* 2022-01-18 [ci skip]
[ruby-80x24.org.git] / bootstraptest / test_syntax.rb
blob948e2d7809ee244ae58f4bf37c3e8ceb6bda22cc
1 assert_equal %q{4}, %q{1 && 2 && 3 && 4}
2 assert_equal %q{}, %q{1 && nil && 3 && 4}
3 assert_equal %q{}, %q{1 && 2 && 3 && nil}
4 assert_equal %q{false}, %q{1 && 2 && 3 && false}
5 assert_equal %q{4}, %q{1 and 2 and 3 and 4}
6 assert_equal %q{}, %q{1 and nil and 3 and 4}
7 assert_equal %q{}, %q{1 and 2 and 3 and nil}
8 assert_equal %q{false}, %q{1 and 2 and 3 and false}
9 assert_equal %q{}, %q{nil && true}
10 assert_equal %q{false}, %q{false && true}
11 assert_equal %q{}, %q{
12   case 1
13   when 2
14     :ng
15   end}
16 assert_equal %q{ok}, %q{
17   case 1
18   when 10,20,30
19     :ng1
20   when 1,2,3
21     :ok
22   when 100,200,300
23     :ng2
24   else
25     :elseng
26   end}
27 assert_equal %q{elseok}, %q{
28   case 123
29   when 10,20,30
30     :ng1
31   when 1,2,3
32     :ng2
33   when 100,200,300
34     :ng3
35   else
36     :elseok
37   end
39 assert_equal %q{ok}, %q{
40   case 'test'
41   when /testx/
42     :ng1
43   when /test/
44     :ok
45   when /tetxx/
46     :ng2
47   else
48     :ng_else
49   end
51 assert_equal %q{ok}, %q{
52   case Object.new
53   when Object
54     :ok
55   end
57 assert_equal %q{ok}, %q{
58   case Object
59   when Object.new
60     :ng
61   else
62     :ok
63   end
65 assert_equal %q{ok}, %q{
66   case 'test'
67   when 'tes'
68     :ng
69   when 'te'
70     :ng
71   else
72     :ok
73   end
75 assert_equal %q{ok}, %q{
76   case 'test'
77   when 'tes'
78     :ng
79   when 'te'
80     :ng
81   when 'test'
82     :ok
83   end
85 assert_equal %q{ng}, %q{
86   case 'test'
87   when 'tes'
88     :ng
89   when /te/
90     :ng
91   else
92     :ok
93   end
95 assert_equal %q{ok}, %q{
96   case 'test'
97   when 'tes'
98     :ng
99   when /test/
100     :ok
101   else
102     :ng
103   end
105 assert_equal %q{100}, %q{
106   def test(arg)
107     case 1
108     when 2
109       3
110     end
111     return arg
112   end
114   test(100)
116 assert_equal %q{ok}, %q{
117   ary = [1, 2]
118   case 1
119   when *ary
120     :ok
121   else
122     :ng
123   end
125 assert_equal %q{ok}, %q{
126   ary = [1, 2]
127   case 3
128   when *ary
129     :ng
130   else
131     :ok
132   end
134 assert_equal %q{ok}, %q{
135   ary = [1, 2]
136   case 1
137   when :x, *ary
138     :ok
139   when :z
140     :ng1
141   else
142     :ng2
143   end
145 assert_equal %q{ok}, %q{
146   ary = [1, 2]
147   case 3
148   when :x, *ary
149     :ng1
150   when :z
151     :ng2
152   else
153     :ok
154   end
156 assert_equal %q{[:false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :false, :false, :false, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :then, :false, :then, :then, :then, :false, :false, :false, :false, :false, :false, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :false, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :false, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :false, :then, :then, :then, :then, :then, :then, :then, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep, :then, :sep]}, %q{
158   def make_perm ary, num
159     if num == 1
160       ary.map{|e| [e]}
161     else
162       base = make_perm(ary, num-1)
163       res  = []
164       base.each{|b|
165         ary.each{|e|
166           res << [e] + b
167         }
168       }
169       res
170     end
171   end
173   def each_test
174     conds = make_perm(['fv', 'tv'], 3)
175     bangs = make_perm(['', '!'], 3)
176     exprs = make_perm(['and', 'or'], 3)
177     ['if', 'unless'].each{|syn|
178       conds.each{|cs|
179         bangs.each{|bs|
180           exprs.each{|es|
181             yield(syn, cs, bs, es)
182           }
183         }
184       }
185     }
186   end
188   fv = false
189   tv = true
191   $ans = []
192   each_test{|syn, conds, bangs, exprs|
193     c1, c2, c3 = conds
194     bang1, bang2, bang3 = bangs
195     e1, e2 = exprs
196     eval %Q{
197       #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
198         $ans << :then
199       else
200         $ans << :false
201       end
202     }
203   }
205   each_test{|syn, conds, bangs, exprs|
206     c1, c2, c3 = conds
207     bang1, bang2, bang3 = bangs
208     e1, e2 = exprs
209     eval %Q{
210       #{syn} #{bang1}#{c1} #{e1} #{bang2}#{c2} #{e2} #{bang3}#{c3}
211         $ans << :then
212       end
213       $ans << :sep
214     }
215   }
216   $ans
218 assert_equal %q{}, %q{
219   defined?(m)
221 assert_equal %q{method}, %q{
222   def m
223   end
224   defined?(m)
226 assert_equal %q{}, %q{
227   defined?(a.class)
229 assert_equal %q{method}, %q{
230   a = 1
231   defined?(a.class)
233 assert_equal %q{["method", "method", "method", "method", nil, nil, "method", "method", "method", nil]}, %q{
234   class C
235     def test
236       [defined?(m1()), defined?(self.m1), defined?(C.new.m1),
237        defined?(m2()), defined?(self.m2), defined?(C.new.m2),
238        defined?(m3()), defined?(self.m3), defined?(C.new.m3)]
239     end
240     def m1
241     end
242     private
243     def m2
244     end
245     protected
246     def m3
247     end
248   end
249   C.new.test + [defined?(C.new.m3)]
251 assert_equal %q{[nil, nil, nil, nil, "global-variable", "global-variable", nil, nil]}, %q{
252   $ans = [defined?($1), defined?($2), defined?($3), defined?($4)]
253   /(a)(b)/ =~ 'ab'
254   $ans + [defined?($1), defined?($2), defined?($3), defined?($4)]
256 assert_equal %q{nilselftruefalse}, %q{
257   defined?(nil) + defined?(self) +
258     defined?(true) + defined?(false)
260 assert_equal %q{}, %q{
261   defined?(@a)
263 assert_equal %q{instance-variable}, %q{
264   @a = 1
265   defined?(@a)
267 assert_equal %q{}, %q{
268   defined?(@@a)
270 assert_equal %q{class variable}, %q{
271   class A
272     @@a = 1
273     defined?(@@a)
274   end
276 assert_equal %q{}, %q{
277   defined?($a)
279 assert_equal %q{global-variable}, %q{
280   $a = 1
281   defined?($a)
283 assert_equal %q{}, %q{
284   defined?(C_definedtest)
286 assert_equal %q{constant}, %q{
287   C_definedtest = 1
288   defined?(C_definedtest)
290 assert_equal %q{}, %q{
291   defined?(::C_definedtest)
293 assert_equal %q{constant}, %q{
294   C_definedtest = 1
295   defined?(::C_definedtest)
297 assert_equal %q{}, %q{
298   defined?(C_definedtestA::C_definedtestB::C_definedtestC)
300 assert_equal %q{constant}, %q{
301   class C_definedtestA
302     class C_definedtestB
303       C_definedtestC = 1
304     end
305   end
306   defined?(C_definedtestA::C_definedtestB::C_definedtestC)
308 assert_equal %q{30}, %q{
309   sum = 0
310   30.times{|ib|
311     if ib % 10 == 0 .. true
312       sum += ib
313     end
314   }
315   sum
317 assert_equal %q{63}, %q{
318   sum = 0
319   30.times{|ib|
320     if ib % 10 == 0 ... true
321       sum += ib
322     end
323   }
324   sum
326 assert_equal %q{[["NUM", "Type: NUM\n"], ["NUM", "123\n"], ["NUM", "456\n"], ["NUM", "Type: ARP\n"], ["NUM", "aaa\n"], ["NUM", "bbb\n"], ["NUM", "\f\n"], ["ARP", "Type: ARP\n"], ["ARP", "aaa\n"], ["ARP", "bbb\n"]]}, %q{
327   t = nil
328   unless ''.respond_to? :lines
329     class String
330       def lines
331         self
332       end
333     end
334   end
335   ary = []
336 "this must not print
337 Type: NUM
340 Type: ARP
344 this must not print
345 hoge
346 Type: ARP
349 ".lines.each{|l|
350     if (t = l[/^Type: (.*)/, 1])..(/^\f/ =~ l)
351       ary << [t, l]
352     end
353   }
354   ary
356 assert_equal %q{1}, %q{if true  then 1 ; end}
357 assert_equal %q{}, %q{if false then 1 ; end}
358 assert_equal %q{1}, %q{if true  then 1 ; else; 2; end}
359 assert_equal %q{2}, %q{if false then 1 ; else; 2; end}
360 assert_equal %q{}, %q{if true  then   ; elsif true then ; 1 ; end}
361 assert_equal %q{1}, %q{if false then   ; elsif true then ; 1 ; end}
362 assert_equal %q{}, %q{unless true  then 1 ; end}
363 assert_equal %q{1}, %q{unless false then 1 ; end}
364 assert_equal %q{2}, %q{unless true  then 1 ; else; 2; end}
365 assert_equal %q{1}, %q{unless false then 1 ; else; 2; end}
366 assert_equal %q{1}, %q{1 if true}
367 assert_equal %q{}, %q{1 if false}
368 assert_equal %q{}, %q{1 if nil}
369 assert_equal %q{}, %q{1 unless true}
370 assert_equal %q{1}, %q{1 unless false}
371 assert_equal %q{1}, %q{1 unless nil}
372 assert_equal %q{1}, %q{1 || 2 || 3 || 4}
373 assert_equal %q{1}, %q{1 || false || 3 || 4}
374 assert_equal %q{2}, %q{nil || 2 || 3 || 4}
375 assert_equal %q{2}, %q{false || 2 || 3 || 4}
376 assert_equal %q{false}, %q{nil || false || nil || false}
377 assert_equal %q{1}, %q{1 or 2 or 3 or 4}
378 assert_equal %q{1}, %q{1 or false or 3 or 4}
379 assert_equal %q{2}, %q{nil or 2 or 3 or 4}
380 assert_equal %q{2}, %q{false or 2 or 3 or 4}
381 assert_equal %q{1}, %q{if true && ""; then 1; end}
382 assert_equal %q{1}, %q{if nil || true; then 1; end}
383 assert_equal %q{false}, %q{nil or false or nil or false}
384 assert_equal %q{elseng}, %q{
385   case
386   when 1==2, 2==3
387     :ng1
388   when false, 4==5
389     :ok
390   when false
391     :ng2
392   else
393     :elseng
394   end
396 assert_equal %q{ok}, %q{
397   case
398   when nil, nil
399     :ng1
400   when 1,2,3
401     :ok
402   when false, false
403     :ng2
404   else
405     :elseng
406   end
408 assert_equal %q{elseok}, %q{
409   case
410   when nil
411     :ng1
412   when false
413     :ng2
414   else
415     :elseok
416   end}
417 assert_equal %q{}, %q{
418   case
419   when 1
420   end
422 assert_equal %q{ok}, %q{
423   r = nil
424   ary = []
425   case
426   when false
427     r = :ng1
428   when false, false
429     r = :ng2
430   when *ary
431     r = :ng3
432   when false, *ary
433     r = :ng4
434   when true, *ary
435     r = :ok
436   end
437   r
439 assert_equal %q{ok}, %q{
440   ary = []
441   case
442   when false, *ary
443     :ng
444   else
445     :ok
446   end
448 assert_equal %q{ok}, %q{
449   ary = [false, nil]
450   case
451   when *ary
452     :ng
453   else
454     :ok
455   end
457 assert_equal %q{ok}, %q{
458   ary = [false, nil]
459   case
460   when *ary
461     :ng
462   when true
463     :ok
464   else
465     :ng2
466   end
468 assert_equal %q{ng}, %q{
469   ary = [false, nil]
470   case
471   when *ary
472     :ok
473   else
474     :ng
475   end
477 assert_equal %q{ok}, %q{
478   ary = [false, true]
479   case
480   when *ary
481     :ok
482   else
483     :ng
484   end
486 assert_equal %q{ok}, %q{
487   ary = [false, true]
488   case
489   when false, false
490   when false, *ary
491     :ok
492   else
493     :ng
494   end
496 assert_equal %q{}, %q{
497   i = 0
498   while i < 10
499     i+=1
500   end}
501 assert_equal %q{10}, %q{
502   i = 0
503   while i < 10
504     i+=1
505   end; i}
506 assert_equal %q{}, %q{
507   i = 0
508   until i > 10
509     i+=1
510   end}
511 assert_equal %q{11}, %q{
512   i = 0
513   until i > 10
514     i+=1
515   end; i}
516 assert_equal %q{1}, %q{
517   i = 0
518   begin
519     i+=1
520   end while false
521   i
523 assert_equal %q{1}, %q{
524   i = 0
525   begin
526     i+=1
527   end until true
528   i
530 def assert_syntax_error expected, code, message = ''
531   assert_equal "#{expected}",
532     "begin eval(%q{#{code}}, nil, '', 0)"'; rescue SyntaxError => e; e.message[/\A:(?:\d+:)? (.*)/, 1] end', message
534 assert_syntax_error "unterminated string meets end of file", '().."', '[ruby-dev:29732]'
535 assert_equal %q{[]}, %q{$&;[]}, '[ruby-dev:31068]'
536 assert_syntax_error "syntax error, unexpected *, expecting '}'", %q{{*0}}, '[ruby-dev:31072]'
537 assert_syntax_error "`@0' is not allowed as an instance variable name", %q{@0..0}, '[ruby-dev:31095]'
538 assert_syntax_error "identifier $00 is not valid to get", %q{$00..0}, '[ruby-dev:31100]'
539 assert_syntax_error "identifier $00 is not valid to set", %q{0..$00=1}
540 assert_equal %q{0}, %q{[*0];0}, '[ruby-dev:31102]'
541 assert_syntax_error "syntax error, unexpected ')'", %q{v0,(*,v1,) = 0}, '[ruby-dev:31104]'
542 assert_equal %q{1}, %q{
543   class << (ary=[]); def []; 0; end; def []=(x); super(0,x);end;end; ary[]+=1
544 }, '[ruby-dev:31110]'
545 assert_syntax_error "Can't set variable $1", %q{0..$1=1}, '[ruby-dev:31118]'
546 assert_valid_syntax %q{1.times{1+(1&&next)}}, '[ruby-dev:31119]'
547 assert_valid_syntax %q{x=-1;loop{x+=1&&redo if (x+=1).zero?}}, '[ruby-dev:31119]'
548 assert_syntax_error %q{syntax error, unexpected end-of-input}, %q{!}, '[ruby-dev:31243]'
549 assert_equal %q{[nil]}, %q{[()]}, '[ruby-dev:31252]'
550 assert_equal %q{true}, %q{!_=()}, '[ruby-dev:31263]'
551 assert_equal 'ok', %q{while true; redo; end if 1 == 2; :ok}, '[ruby-dev:31360]'
552 assert_equal 'ok', %q{
553   1.times {
554     begin
555     ensure
556       next
557     end
558   }; :ok
559 }, '[ruby-dev:31373]'
560 assert_equal 'ok', %q{
561   flag = false
562   1.times {
563     next if flag
564     flag = true
565     begin
566     ensure
567       redo
568     end
569   }; :ok
570 }, '[ruby-dev:31373]'
572 assert_equal 'ok', %q{
573   1.times{
574     p(1, (next; 2))
575   }; :ok
577 assert_equal '3', %q{
578   i = 0
579   1 + (while true
580          break 2 if (i+=1) > 1
581          next
582        end)
584 assert_equal '3', %q{
585   i = 0
586   1 + (while true
587          break 2 if (i+=1) > 1
588          p(1, (next; 2))
589        end)
591 # redo
592 assert_equal 'ok', %q{
593   i = 0
594   1.times{
595     break if i>1
596     i+=1
597     p(1, (redo; 2))
598   }; :ok
600 assert_equal '3', %q{
601   i = 0
602   1 + (while true
603          break 2 if (i+=1) > 1
604          redo
605        end)
607 assert_equal '3', %q{
608   i = 0
609   1 + (while true
610          break 2 if (i+=1) > 1
611          p(1, (redo; 2))
612        end)
614 assert_equal '1', %q{
615   a = [0]
616   a[*a]+=1
618 assert_equal '2', %q{
619   ary = [0]
620   case 1
621   when *ary, 1
622     1
623   end +
624   case
625   when *ary
626     1
627   end
630 assert_match /invalid multibyte char/, %q{
631   $stderr = STDOUT
632   eval("\"\xf0".force_encoding("utf-8"))
633 }, '[ruby-dev:32429]'
635 # method ! and !=
636 assert_equal 'true', %q{!false}
637 assert_equal 'true', %q{1 == 1}
638 assert_equal 'true', %q{1 != 2}
639 assert_equal 'true', %q{
640   class C; def !=(obj); true; end; end
641   C.new != 1
643 assert_equal 'true', %q{
644   class C; def !@; true; end; end
645   !C.new
647 assert_normal_exit %q{
648   eval "while true; return; end rescue p $!"
649 }, '[ruby-dev:31663]'
650 assert_equal '1', %q{
651   def bar
652     raise
653   end
655   def foo
656     1.times{
657       begin
658         return bar
659       rescue
660         :ok
661       end
662     }
663   end
665   foo
668 assert_equal 'ok', %q{
669   counter = 2
670   while true
671     counter -= 1
672     next if counter != 0
673     break
674   end
675   :ok
676 }, '[ruby-core:14385]'
678 assert_equal 'ok', %q{
679   counter = 2
680   while true
681     counter -= 1
682     next if counter != 0
683     break :ok
684   end # direct
685 }, '[ruby-core:14385]'
687 assert_equal 'ok', %q{
688   counter = 2
689   while true
690     counter -= 1
691     break if counter == 0
692     "#{next}"
693   end
694   :ok
695 }, 'reported by Yusuke ENDOH'
697 assert_equal 'ok', %q{
698   counter = 2
699   while true
700     counter -= 1
701     break if counter == 0
702     next
703     redo
704   end
705   :ok
706 }, 'reported by Yusuke ENDOH'
708 assert_equal 'ok', %q{
709   counter = 2
710   while true
711     counter -= 1
712     break if counter == 0
713     next
714     "#{ redo }"
715   end
716   :ok
717 }, 'reported by Yusuke ENDOH'
719 assert_normal_exit %q{
720   begin
721     raise
722   rescue
723     counter = 2
724     while true
725       counter -= 1
726       break if counter == 0
727       next
728       retry
729     end
730   end
731 }, 'reported by Yusuke ENDOH'
733 assert_normal_exit %q{
734   counter = 2
735   while true
736     counter -= 1
737     break if counter == 0
738     next
739     "#{ break }"
740   end
741 }, 'reported by Yusuke ENDOH'
743 assert_normal_exit %q{
744   counter = 2
745   while true
746     counter -= 1
747     next if counter != 0
748     "#{ break }"
749   end
750 }, 'reported by Yusuke ENDOH'
752 assert_equal 'ok', %q{
753   1.times do
754     [
755       1, 2, 3, 4, 5, 6, 7, 8,
756       begin
757         false ? next : p
758         break while true
759       end
760     ]
761   end
762   :ok
763 }, '[ruby-dev:32882]'
765 assert_equal "1\n2\n", %q{
766   i = 0
767   while i<2
768     i += 1
769     next p(i)
770   end
773 assert_valid_syntax('1.times {|i|print (42),1;}', '[ruby-list:44479]')
775 assert_equal 'ok', %q{
776   def a() end
777   begin
778     if defined?(a(1).a)
779       :ng
780     else
781       :ok
782     end
783   rescue
784     :ng
785   end
786 }, '[ruby-core:16010]'
788 assert_equal 'ok', %q{
789   def a() end
790   begin
791     if defined?(a::B)
792       :ng
793     else
794       :ok
795     end
796   rescue
797     :ng
798   end
799 }, '[ruby-core:16010]'
801 assert_normal_exit %q{
802   defined? C && 0
805 assert_normal_exit %q{
806   class C
807     def m
808       defined?(super())
809     end
810   end
811   C.new.m
814 assert_equal 'ok', %q{
815   class X < RuntimeError;end
816   x = [X]
817   begin
818    raise X
819   rescue *x
820    :ok
821   end
822 }, '[ruby-core:14537]'
824 assert_equal 'ok', %q{
825   a = [false]
826   (a[0] &&= true) == false ? :ok : :ng
827 }, '[ruby-dev:34679]'
829 assert_normal_exit %q{
830   a = []
831   100.times {|i| a << i << nil << nil }
832   p a.compact!
835 assert_equal 'ok', %q{
836   "#{}""#{}ok"
837 }, '[ruby-dev:38968]'
840 assert_equal 'ok', %q{
841   "o" "#{}k"
842 }, '[ruby-dev:38980]'
844 bug2415 = '[ruby-core:26961]'
845 assert_normal_exit %q{
846   0.times do
847     0.times do
848       def x(a=1, b, *rest); nil end
849     end
850   end
851 }, bug2415
853 assert_normal_exit %q{
854   0.times do
855     0.times do
856       def x@; nil end
857     end
858   end
859 }, bug2415
861 assert_normal_exit %q{
862   0.times do
863     0.times do
864       def x(a = 0.times do
865               def y(a=1, b, *rest); nil; end
866             end)
867         nil
868       end
869     end
870   end
871 }, bug2415
873 assert_normal_exit %q{
874   0.times do
875     0.times do
876       def x(a = 0.times do
877               def x@; nil; end
878             end)
879         nil
880       end
881     end
882   end
883 }, bug2415
885 assert_normal_exit %q{
886   a {
887     b {|c.d| }
888     e
889   }
890 }, '[ruby-dev:39861]'
892 bug1240 = '[ruby-core:22637]'
893 assert_valid_syntax('x y { "#{}".z { } }', bug1240)
894 assert_valid_syntax('x y { "#{}".z do end }', bug1240)
896 assert_valid_syntax('y "#{a 1}" do end', '[ruby-core:29579]')
897 assert_normal_exit %q{
898   def foo(&block)
899     yield
900   end
902   foo do
903     s = defined?(raise + 1)
904     Class
905   end
906 }, '[ruby-core:30293]'