mirah 0.0.12-java → 0.1.0-java
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +372 -0
- data/README.txt +4 -5
- data/Rakefile +178 -55
- data/examples/appengine/Readme +3 -3
- data/examples/appengine/src/org/mirah/MirahApp.mirah +1 -1
- data/examples/appengine/src/org/mirah/list.dhtml +1 -1
- data/examples/bintrees.mirah +1 -1
- data/examples/edb.mirah +1 -1
- data/examples/fib.mirah +1 -1
- data/examples/interfaces.mirah +1 -1
- data/examples/macros/{string-each-char.mirah → string_each_char.mirah} +4 -5
- data/examples/maven/README.txt +1 -1
- data/examples/maven/src/main/mirah/hello_mirah.mirah +1 -1
- data/examples/plugins/appengine/Rakefile +1 -1
- data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/MetaModel.mirah +1 -1
- data/examples/plugins/appengine/src/com/google/appengine/ext/duby/db/Model.duby +1 -1
- data/examples/plugins/appengine/test/com/google/appengine/ext/duby/db/ModelTest.duby +1 -1
- data/examples/rosettacode/100-doors.mirah +6 -6
- data/examples/rosettacode/README.txt +3 -3
- data/examples/rosettacode/boolean-values.mirah +1 -1
- data/examples/rosettacode/comments.mirah +1 -1
- data/examples/rosettacode/count-occurrences-of-a-substring.mirah +1 -1
- data/examples/rosettacode/factorial.mirah +1 -1
- data/examples/rosettacode/fibonacci.mirah +1 -1
- data/examples/rosettacode/fizz-buzz.mirah +2 -2
- data/examples/rosettacode/flatten-a-list.mirah +4 -4
- data/examples/rosettacode/guess-the-number.mirah +2 -2
- data/examples/rosettacode/hamming-numbers.mirah +4 -4
- data/examples/rosettacode/is-string-numeric.mirah +22 -22
- data/examples/rosettacode/palindrome.mirah +2 -2
- data/examples/rosettacode/random-numbers.mirah +1 -1
- data/examples/rosettacode/repeat-a-string.mirah +1 -1
- data/examples/rosettacode/reverse-a-string.mirah +1 -1
- data/examples/rosettacode/rot-13.mirah +5 -5
- data/examples/rosettacode/secure-temporary-file.mirah +2 -2
- data/examples/rosettacode/sleep.mirah +1 -1
- data/examples/rosettacode/string-length.mirah +5 -5
- data/examples/swing.mirah +1 -1
- data/examples/test.edb +1 -1
- data/javalib/mirah-bootstrap.jar +0 -0
- data/javalib/mirah-builtins.jar +0 -0
- data/javalib/mirah-parser.jar +0 -0
- data/javalib/mirah-util.jar +0 -0
- data/lib/duby.rb +1 -1
- data/lib/mirah.rb +50 -28
- data/lib/mirah/ast.rb +15 -605
- data/lib/mirah/ast/scope.rb +98 -69
- data/lib/mirah/commands.rb +1 -1
- data/lib/mirah/commands/base.rb +7 -7
- data/lib/mirah/commands/compile.rb +3 -3
- data/lib/mirah/commands/parse.rb +7 -5
- data/lib/mirah/commands/run.rb +12 -19
- data/lib/mirah/compiler.rb +15 -23
- data/lib/mirah/errors.rb +16 -1
- data/lib/mirah/generator.rb +79 -39
- data/lib/mirah/jvm/compiler.rb +1 -19
- data/lib/mirah/jvm/compiler/base.rb +233 -90
- data/lib/mirah/jvm/compiler/jvm_bytecode.rb +675 -363
- data/lib/mirah/jvm/method_lookup.rb +134 -65
- data/lib/mirah/jvm/typer.rb +10 -5
- data/lib/mirah/jvm/types.rb +10 -2
- data/lib/mirah/jvm/types/array_type.rb +10 -12
- data/lib/mirah/{compiler/type.rb → jvm/types/ast_ext.rb} +12 -8
- data/lib/mirah/jvm/types/basic_types.rb +26 -33
- data/lib/mirah/jvm/types/bitescript_ext.rb +1 -1
- data/lib/mirah/jvm/types/block_type.rb +15 -0
- data/lib/mirah/jvm/types/boolean.rb +8 -4
- data/lib/mirah/jvm/types/dynamic_type.rb +12 -13
- data/lib/mirah/jvm/types/enumerable.rb +7 -7
- data/lib/mirah/jvm/types/extensions.rb +11 -6
- data/lib/mirah/jvm/types/factory.rb +624 -94
- data/lib/mirah/jvm/types/floats.rb +21 -15
- data/lib/mirah/jvm/types/generic_type.rb +72 -0
- data/lib/mirah/jvm/types/implicit_nil_type.rb +29 -0
- data/lib/mirah/jvm/types/integers.rb +26 -71
- data/lib/mirah/jvm/types/interface_definition.rb +3 -3
- data/lib/mirah/jvm/types/intrinsics.rb +203 -168
- data/lib/mirah/jvm/types/literals.rb +6 -6
- data/lib/mirah/jvm/types/meta_type.rb +13 -4
- data/lib/mirah/jvm/types/methods.rb +281 -93
- data/lib/mirah/jvm/types/null_type.rb +17 -5
- data/lib/mirah/jvm/types/number.rb +10 -7
- data/lib/mirah/jvm/types/primitive_type.rb +17 -6
- data/lib/mirah/jvm/types/source_mirror.rb +12 -7
- data/lib/mirah/jvm/types/type.rb +107 -23
- data/lib/mirah/jvm/types/type_definition.rb +25 -10
- data/lib/mirah/jvm/types/unreachable_type.rb +1 -1
- data/lib/mirah/jvm/types/void_type.rb +3 -3
- data/lib/mirah/parser.rb +154 -16
- data/lib/mirah/plugin/edb.rb +1 -1
- data/lib/mirah/transform.rb +1 -2
- data/lib/mirah/transform/ast_ext.rb +24 -43
- data/lib/mirah/transform/transformer.rb +29 -224
- data/lib/mirah/typer.rb +2 -16
- data/lib/mirah/util/argument_processor.rb +25 -10
- data/lib/mirah/util/class_loader.rb +1 -1
- data/lib/mirah/util/compilation_state.rb +16 -17
- data/lib/mirah/util/delegate.rb +2 -2
- data/lib/mirah/util/logging.rb +110 -0
- data/lib/mirah/util/process_errors.rb +69 -11
- data/lib/mirah/version.rb +1 -1
- data/test/core/commands_test.rb +6 -24
- data/test/core/env_test.rb +5 -5
- data/{lib/mirah/jvm/source_generator/typer.rb → test/core/generator_test.rb} +9 -9
- data/test/core/typer_test.rb +196 -158
- data/test/core/util/argument_processor_test.rb +10 -10
- data/test/core/util/class_loader_test.rb +6 -5
- data/test/fixtures/org/foo/LowerCaseInnerClass$inner.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.class +0 -0
- data/test/fixtures/org/foo/LowerCaseInnerClass.java +7 -0
- data/test/jvm/annotations_test.rb +5 -5
- data/test/jvm/blocks_test.rb +140 -88
- data/test/jvm/bytecode_test_helper.rb +112 -94
- data/test/jvm/cast_test.rb +162 -0
- data/test/jvm/constructors_test.rb +18 -8
- data/test/jvm/enumerable_test.rb +77 -44
- data/test/jvm/example_test.rb +53 -0
- data/test/jvm/factory_test.rb +7 -1
- data/test/jvm/generics_test.rb +57 -0
- data/test/jvm/hash_test.rb +106 -0
- data/test/jvm/import_test.rb +81 -0
- data/test/jvm/interface_test.rb +73 -0
- data/test/jvm/java_typer_test.rb +92 -66
- data/{lib/mirah/typer/base.rb → test/jvm/jvm_commands_test.rb} +6 -10
- data/test/jvm/jvm_compiler_test.rb +170 -604
- data/test/jvm/list_extensions_test.rb +23 -0
- data/test/jvm/macros_test.rb +197 -32
- data/test/jvm/main_method_test.rb +4 -4
- data/test/jvm/numeric_extensions_test.rb +13 -0
- data/test/jvm/rescue_test.rb +73 -16
- data/test/jvm/varargs_test.rb +65 -0
- data/test/test_helper.rb +1 -2
- metadata +234 -251
- data/examples/SortClosure$__xform_tmp_1.class +0 -0
- data/examples/SortClosure$__xform_tmp_2.class +0 -0
- data/examples/SortClosure.class +0 -0
- data/examples/macros/StringEachChar$Extension1.class +0 -0
- data/lib/mirah/ast/call.rb +0 -345
- data/lib/mirah/ast/class.rb +0 -359
- data/lib/mirah/ast/flow.rb +0 -381
- data/lib/mirah/ast/intrinsics.rb +0 -563
- data/lib/mirah/ast/literal.rb +0 -178
- data/lib/mirah/ast/local.rb +0 -112
- data/lib/mirah/ast/method.rb +0 -408
- data/lib/mirah/ast/structure.rb +0 -387
- data/lib/mirah/ast/type.rb +0 -146
- data/lib/mirah/commands/base.rb~ +0 -57
- data/lib/mirah/compiler/call.rb +0 -45
- data/lib/mirah/compiler/class.rb +0 -81
- data/lib/mirah/compiler/flow.rb +0 -109
- data/lib/mirah/compiler/literal.rb +0 -130
- data/lib/mirah/compiler/local.rb +0 -59
- data/lib/mirah/compiler/method.rb +0 -44
- data/lib/mirah/compiler/structure.rb +0 -65
- data/lib/mirah/jvm/compiler/java_source.rb +0 -787
- data/lib/mirah/jvm/method_lookup.rb~ +0 -247
- data/lib/mirah/jvm/source_generator/builder.rb +0 -468
- data/lib/mirah/jvm/source_generator/loops.rb +0 -131
- data/lib/mirah/jvm/source_generator/precompile.rb +0 -210
- data/lib/mirah/plugin/gwt.rb +0 -189
- data/lib/mirah/plugin/java.rb +0 -70
- data/lib/mirah/transform/error.rb +0 -13
- data/lib/mirah/transform/helper.rb +0 -765
- data/lib/mirah/typer/simple.rb +0 -384
- data/lib/mirah/version.rb~ +0 -18
- data/test/core/ast_test.rb +0 -382
- data/test/core/compilation_test.rb +0 -130
- data/test/core/macros_test.rb +0 -61
- data/test/jvm/javac_test_helper.rb +0 -89
- data/test/jvm/jvm_compiler_test.rb~ +0 -2181
- data/test/plugins/gwt_test.rb +0 -69
@@ -0,0 +1,162 @@
|
|
1
|
+
# Copyright (c) 2013 The Mirah project authors. All Rights Reserved.
|
2
|
+
# All contributing project authors may be found in the NOTICE file.
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
|
16
|
+
class CastTest < Test::Unit::TestCase
|
17
|
+
|
18
|
+
def test_cast
|
19
|
+
cls, = compile(<<-EOF)
|
20
|
+
def f2b; byte(1.0); end
|
21
|
+
def f2s; short(1.0); end
|
22
|
+
def f2c; char(1.0); end
|
23
|
+
def f2i; int(1.0); end
|
24
|
+
def f2l; long(1.0); end
|
25
|
+
def f2d; int(1.0); end
|
26
|
+
|
27
|
+
def i2b; byte(1); end
|
28
|
+
def i2s; short(1); end
|
29
|
+
def i2c; char(1); end
|
30
|
+
def i2l; long(1); end
|
31
|
+
def i2f; float(1); end
|
32
|
+
def i2d; int(1); end
|
33
|
+
|
34
|
+
def b2s; short(byte(1)); end
|
35
|
+
def b2c; char(byte(1)); end
|
36
|
+
def b2i; int(byte(1)); end
|
37
|
+
def b2l; long(byte(1)); end
|
38
|
+
def b2f; float(byte(1)); end
|
39
|
+
def b2d; double(byte(1)); end
|
40
|
+
|
41
|
+
def s2b; byte(short(1)); end
|
42
|
+
def s2c; char(short(1)); end
|
43
|
+
def s2i; int(short(1)); end
|
44
|
+
def s2l; long(short(1)); end
|
45
|
+
def s2f; float(short(1)); end
|
46
|
+
def s2d; double(short(1)); end
|
47
|
+
|
48
|
+
def c2b; byte(char(1)); end
|
49
|
+
def c2s; short(char(1)); end
|
50
|
+
def c2i; int(char(1)); end
|
51
|
+
def c2l; long(char(1)); end
|
52
|
+
def c2f; float(char(1)); end
|
53
|
+
def c2d; double(char(1)); end
|
54
|
+
|
55
|
+
def l2b; byte(long(1)); end
|
56
|
+
def l2c; char(long(1)); end
|
57
|
+
def l2i; int(long(1)); end
|
58
|
+
def l2l; long(long(1)); end
|
59
|
+
def l2f; float(long(1)); end
|
60
|
+
def l2d; double(long(1)); end
|
61
|
+
|
62
|
+
def d2b; byte(1.0); end
|
63
|
+
def d2s; short(1.0); end
|
64
|
+
def d2c; char(1.0); end
|
65
|
+
def d2i; int(1.0); end
|
66
|
+
def d2l; long(1.0); end
|
67
|
+
def d2f; float(1.0); end
|
68
|
+
|
69
|
+
def hard_i2f(a:int)
|
70
|
+
float(if a < 0
|
71
|
+
a *= -1
|
72
|
+
a * 2
|
73
|
+
else
|
74
|
+
a * 2
|
75
|
+
end)
|
76
|
+
end
|
77
|
+
EOF
|
78
|
+
|
79
|
+
assert_equal 1, cls.b2s
|
80
|
+
assert_equal 1, cls.b2c
|
81
|
+
assert_equal 1, cls.b2i
|
82
|
+
assert_equal 1, cls.b2l
|
83
|
+
assert_equal 1.0, cls.b2f
|
84
|
+
assert_equal 1.0, cls.b2d
|
85
|
+
|
86
|
+
assert_equal 1, cls.s2b
|
87
|
+
assert_equal 1, cls.s2c
|
88
|
+
assert_equal 1, cls.s2i
|
89
|
+
assert_equal 1, cls.s2l
|
90
|
+
assert_equal 1.0, cls.s2f
|
91
|
+
assert_equal 1.0, cls.s2d
|
92
|
+
|
93
|
+
assert_equal 1, cls.c2b
|
94
|
+
assert_equal 1, cls.c2s
|
95
|
+
assert_equal 1, cls.c2i
|
96
|
+
assert_equal 1, cls.c2l
|
97
|
+
assert_equal 1.0, cls.c2f
|
98
|
+
assert_equal 1.0, cls.c2d
|
99
|
+
|
100
|
+
assert_equal 1, cls.i2b
|
101
|
+
assert_equal 1, cls.i2s
|
102
|
+
assert_equal 1, cls.i2c
|
103
|
+
assert_equal 1, cls.i2l
|
104
|
+
assert_equal 1.0, cls.i2f
|
105
|
+
assert_equal 1.0, cls.i2d
|
106
|
+
|
107
|
+
assert_equal 1, cls.f2b
|
108
|
+
assert_equal 1, cls.f2s
|
109
|
+
assert_equal 1, cls.f2c
|
110
|
+
assert_equal 1, cls.f2i
|
111
|
+
assert_equal 1, cls.f2l
|
112
|
+
assert_equal 1.0, cls.f2d
|
113
|
+
|
114
|
+
assert_equal 1, cls.d2b
|
115
|
+
assert_equal 1, cls.d2s
|
116
|
+
assert_equal 1, cls.d2c
|
117
|
+
assert_equal 1, cls.d2i
|
118
|
+
assert_equal 1, cls.d2l
|
119
|
+
assert_equal 1.0, cls.d2f
|
120
|
+
|
121
|
+
assert_equal 2.0, cls.hard_i2f(1)
|
122
|
+
assert_equal 4.0, cls.hard_i2f(-2)
|
123
|
+
end
|
124
|
+
|
125
|
+
def test_java_lang_cast
|
126
|
+
cls, = compile(<<-EOF)
|
127
|
+
def foo(a:Object)
|
128
|
+
Integer(a).intValue
|
129
|
+
end
|
130
|
+
EOF
|
131
|
+
|
132
|
+
assert_equal(2, cls.foo(java.lang.Integer.new(2)))
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_array_cast
|
136
|
+
cls, = compile(<<-EOF)
|
137
|
+
def foo(a:Object)
|
138
|
+
bar(String[].cast(a))
|
139
|
+
end
|
140
|
+
|
141
|
+
def bar(a:String[])
|
142
|
+
a[0]
|
143
|
+
end
|
144
|
+
EOF
|
145
|
+
|
146
|
+
assert_equal("foo", cls.foo(["foo", "bar"].to_java(:string)))
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_array_cast_primitive
|
150
|
+
cls, = compile(<<-EOF)
|
151
|
+
def foo(a:Object)
|
152
|
+
bar(int[].cast(a))
|
153
|
+
end
|
154
|
+
|
155
|
+
def bar(a:int[])
|
156
|
+
a[0]
|
157
|
+
end
|
158
|
+
EOF
|
159
|
+
|
160
|
+
assert_equal(2, cls.foo([2, 3].to_java(:int)))
|
161
|
+
end
|
162
|
+
end
|
@@ -16,12 +16,12 @@
|
|
16
16
|
class ConstructorsTest < Test::Unit::TestCase
|
17
17
|
def test_constructor
|
18
18
|
cls, = compile(
|
19
|
-
"class InitializeTest;def initialize;
|
19
|
+
"class InitializeTest;def initialize;System.out.println 'Constructed';end;end")
|
20
20
|
assert_output("Constructed\n") do
|
21
21
|
cls.new
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def test_constructor_chaining
|
26
26
|
foo, = compile(<<-EOF)
|
27
27
|
class Foo5
|
@@ -57,18 +57,17 @@ class ConstructorsTest < Test::Unit::TestCase
|
|
57
57
|
sc_a, sc_b = compile(<<-EOF)
|
58
58
|
class SC_A
|
59
59
|
def initialize(a:int)
|
60
|
-
|
60
|
+
System.out.println "A"
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
class SC_B < SC_A
|
65
65
|
def initialize
|
66
66
|
super(0)
|
67
|
-
|
67
|
+
System.out.println "B"
|
68
68
|
end
|
69
69
|
end
|
70
70
|
EOF
|
71
|
-
|
72
71
|
assert_output("A\nB\n") do
|
73
72
|
sc_b.new
|
74
73
|
end
|
@@ -85,8 +84,19 @@ class ConstructorsTest < Test::Unit::TestCase
|
|
85
84
|
|
86
85
|
def test_inexact_constructor
|
87
86
|
# FIXME: this is a stupid test
|
88
|
-
cls, = compile(
|
89
|
-
|
87
|
+
cls, = compile(<<-EOF)
|
88
|
+
class EmptyEmpty
|
89
|
+
def self.empty_empty
|
90
|
+
t = Thread.new(Thread.new)
|
91
|
+
t.start
|
92
|
+
begin
|
93
|
+
t.join
|
94
|
+
rescue InterruptedException
|
95
|
+
end
|
96
|
+
System.out.println 'ok'
|
97
|
+
end
|
98
|
+
end
|
99
|
+
EOF
|
90
100
|
assert_output("ok\n") do
|
91
101
|
cls.empty_empty
|
92
102
|
end
|
@@ -100,7 +110,7 @@ class ConstructorsTest < Test::Unit::TestCase
|
|
100
110
|
end
|
101
111
|
end
|
102
112
|
|
103
|
-
print DefaultConstructable.new.foo
|
113
|
+
System.out.print DefaultConstructable.new.foo
|
104
114
|
EOF
|
105
115
|
|
106
116
|
assert_output("foo") do
|
data/test/jvm/enumerable_test.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
|
16
16
|
class EnumerableTest < Test::Unit::TestCase
|
17
|
-
def
|
17
|
+
def test_for_in_int_array
|
18
18
|
cls, = compile(<<-EOF)
|
19
19
|
def foo
|
20
20
|
a = int[3]
|
@@ -25,6 +25,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
25
25
|
count
|
26
26
|
end
|
27
27
|
EOF
|
28
|
+
assert_equal(3, cls.foo)
|
28
29
|
|
29
30
|
cls, = compile(<<-EOF)
|
30
31
|
def foo(a:int[])
|
@@ -37,11 +38,13 @@ class EnumerableTest < Test::Unit::TestCase
|
|
37
38
|
EOF
|
38
39
|
|
39
40
|
assert_equal(9, cls.foo([2, 3, 4].to_java(:int)))
|
41
|
+
end
|
40
42
|
|
43
|
+
def test_each_iterable
|
41
44
|
cls, = compile(<<-EOF)
|
42
45
|
def foo(a:Iterable)
|
43
46
|
a.each do |x|
|
44
|
-
|
47
|
+
System.out.println x
|
45
48
|
end
|
46
49
|
end
|
47
50
|
EOF
|
@@ -53,12 +56,14 @@ class EnumerableTest < Test::Unit::TestCase
|
|
53
56
|
list << "3"
|
54
57
|
cls.foo(list)
|
55
58
|
end
|
59
|
+
end
|
56
60
|
|
61
|
+
def test_each_arraylist
|
57
62
|
cls, = compile(<<-EOF)
|
58
63
|
import java.util.ArrayList
|
59
64
|
def foo(a:ArrayList)
|
60
65
|
a.each do |x|
|
61
|
-
|
66
|
+
System.out.println x
|
62
67
|
end
|
63
68
|
end
|
64
69
|
EOF
|
@@ -70,10 +75,12 @@ class EnumerableTest < Test::Unit::TestCase
|
|
70
75
|
list << "3"
|
71
76
|
cls.foo(list)
|
72
77
|
end
|
78
|
+
end
|
73
79
|
|
80
|
+
def test_each_int_arry
|
74
81
|
cls, = compile(<<-EOF)
|
75
82
|
def foo(a:int[])
|
76
|
-
a.each {|x| x += 1;
|
83
|
+
a.each {|x| x += 1;System.out.println x; redo if x == 2}
|
77
84
|
end
|
78
85
|
EOF
|
79
86
|
|
@@ -82,7 +89,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
82
89
|
end
|
83
90
|
end
|
84
91
|
|
85
|
-
def
|
92
|
+
def test_all_int_array
|
86
93
|
cls, = compile(<<-EOF)
|
87
94
|
def foo(a:int[])
|
88
95
|
a.all? {|x| x % 2 == 0}
|
@@ -91,7 +98,9 @@ class EnumerableTest < Test::Unit::TestCase
|
|
91
98
|
|
92
99
|
assert_equal(false, cls.foo([2, 3, 4].to_java(:int)))
|
93
100
|
assert_equal(true, cls.foo([2, 0, 4].to_java(:int)))
|
101
|
+
end
|
94
102
|
|
103
|
+
def test_all_string_array
|
95
104
|
cls, = compile(<<-EOF)
|
96
105
|
def foo(a:String[])
|
97
106
|
a.all?
|
@@ -105,7 +114,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
105
114
|
def test_downto
|
106
115
|
cls, = compile(<<-EOF)
|
107
116
|
def foo(i:int)
|
108
|
-
i.downto(1) {|x|
|
117
|
+
i.downto(1) {|x| System.out.println x }
|
109
118
|
end
|
110
119
|
EOF
|
111
120
|
|
@@ -117,7 +126,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
117
126
|
def test_upto
|
118
127
|
cls, = compile(<<-EOF)
|
119
128
|
def foo(i:int)
|
120
|
-
i.upto(3) {|x|
|
129
|
+
i.upto(3) {|x| System.out.println x }
|
121
130
|
end
|
122
131
|
EOF
|
123
132
|
|
@@ -129,7 +138,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
129
138
|
def test_times
|
130
139
|
cls, = compile(<<-EOF)
|
131
140
|
def foo(i:int)
|
132
|
-
i.times {|x|
|
141
|
+
i.times {|x| System.out.println x }
|
133
142
|
end
|
134
143
|
EOF
|
135
144
|
|
@@ -139,7 +148,7 @@ class EnumerableTest < Test::Unit::TestCase
|
|
139
148
|
|
140
149
|
cls, = compile(<<-EOF)
|
141
150
|
def foo(i:int)
|
142
|
-
i.times {
|
151
|
+
i.times { System.out.println "Hi" }
|
143
152
|
end
|
144
153
|
EOF
|
145
154
|
|
@@ -151,85 +160,101 @@ class EnumerableTest < Test::Unit::TestCase
|
|
151
160
|
def test_general_loop
|
152
161
|
cls, = compile(<<-EOF)
|
153
162
|
def foo(x:boolean)
|
154
|
-
a =
|
155
|
-
|
156
|
-
|
163
|
+
a = StringBuilder.new
|
164
|
+
while x
|
165
|
+
a.append "<body>"
|
166
|
+
end
|
167
|
+
a.toString
|
157
168
|
end
|
158
169
|
EOF
|
159
170
|
assert_equal("", cls.foo(false))
|
160
171
|
|
161
172
|
cls, = compile(<<-EOF)
|
162
173
|
def foo
|
163
|
-
a =
|
164
|
-
|
165
|
-
|
174
|
+
a = StringBuilder.new
|
175
|
+
begin
|
176
|
+
a.append "<body>"
|
177
|
+
end while false
|
178
|
+
a.toString
|
166
179
|
end
|
167
180
|
EOF
|
168
181
|
assert_equal("<body>", cls.foo)
|
169
182
|
|
170
183
|
cls, = compile(<<-EOF)
|
171
184
|
def foo(x:boolean)
|
172
|
-
a =
|
173
|
-
|
174
|
-
a
|
185
|
+
a = StringBuilder.new
|
186
|
+
while x
|
187
|
+
init {a.append "<init>"}
|
188
|
+
pre {a.append "<pre>"}
|
189
|
+
post {a.append "<post>"}
|
190
|
+
a.append "<body>"
|
175
191
|
end
|
176
|
-
a
|
192
|
+
a.toString
|
177
193
|
end
|
178
194
|
EOF
|
179
195
|
assert_equal("<init>", cls.foo(false))
|
180
196
|
|
181
197
|
cls, = compile(<<-EOF)
|
182
198
|
def foo
|
183
|
-
a =
|
184
|
-
|
185
|
-
a
|
186
|
-
|
187
|
-
|
199
|
+
a = StringBuilder.new
|
200
|
+
begin
|
201
|
+
init {a.append "<init>"}
|
202
|
+
pre {a.append "<pre>"}
|
203
|
+
post {a.append "<post>"}
|
204
|
+
a.append "<body>"
|
205
|
+
end while false
|
206
|
+
a.toString
|
188
207
|
end
|
189
208
|
EOF
|
190
209
|
assert_equal("<init><pre><body><post>", cls.foo)
|
191
210
|
|
192
211
|
cls, = compile(<<-EOF)
|
193
212
|
def foo
|
194
|
-
a =
|
195
|
-
|
196
|
-
a
|
213
|
+
a = StringBuilder.new
|
214
|
+
begin
|
215
|
+
init {a.append "<init>"}
|
216
|
+
pre {a.append "<pre>"}
|
217
|
+
post {a.append "<post>"}
|
218
|
+
a.append "<body>"
|
197
219
|
redo if a.length < 20
|
198
|
-
end
|
199
|
-
a
|
220
|
+
end while false
|
221
|
+
a.toString
|
200
222
|
end
|
201
223
|
EOF
|
202
224
|
assert_equal( "<init><pre><body><body><post>", cls.foo)
|
203
225
|
|
204
226
|
cls, = compile(<<-EOF)
|
205
227
|
def foo
|
206
|
-
a =
|
207
|
-
|
228
|
+
a = StringBuilder.new
|
229
|
+
while a.length < 20
|
230
|
+
init {a.append "<init>"}
|
231
|
+
pre {a.append "<pre>"}
|
232
|
+
post {a.append "<post>"}
|
208
233
|
next if a.length < 17
|
209
|
-
a
|
234
|
+
a.append "<body>"
|
210
235
|
end
|
211
|
-
a
|
236
|
+
a.toString
|
212
237
|
end
|
213
238
|
EOF
|
214
239
|
assert_equal("<init><pre><post><pre><body><post>", cls.foo)
|
215
240
|
end
|
216
241
|
|
217
|
-
|
242
|
+
|
218
243
|
def test_each
|
219
244
|
cls, = compile(<<-EOF)
|
220
245
|
def foo
|
221
|
-
[1,2,3].each {|x|
|
246
|
+
[1,2,3].each {|x| System.out.println x}
|
222
247
|
end
|
223
248
|
EOF
|
224
249
|
assert_output("1\n2\n3\n") do
|
225
250
|
cls.foo
|
226
251
|
end
|
227
252
|
end
|
228
|
-
|
253
|
+
|
229
254
|
def test_each_without_block_arguments
|
230
255
|
cls, = compile(<<-EOF)
|
231
256
|
def foo
|
232
|
-
[1,2,3].each {
|
257
|
+
[1,2,3].each { System.out.println :thrice }
|
233
258
|
end
|
234
259
|
EOF
|
235
260
|
assert_output("thrice\nthrice\nthrice\n") do
|
@@ -242,8 +267,8 @@ class EnumerableTest < Test::Unit::TestCase
|
|
242
267
|
cls, = compile(<<-EOF)
|
243
268
|
import java.lang.Integer
|
244
269
|
def foo
|
245
|
-
|
246
|
-
|
270
|
+
System.out.println [1,2,3].any?
|
271
|
+
System.out.println [1,2,3].any? {|x| Integer(x).intValue > 3}
|
247
272
|
end
|
248
273
|
EOF
|
249
274
|
assert_output("true\nfalse\n") do
|
@@ -255,13 +280,22 @@ class EnumerableTest < Test::Unit::TestCase
|
|
255
280
|
cls, = compile(<<-EOF)
|
256
281
|
import java.lang.Integer
|
257
282
|
def foo
|
258
|
-
|
259
|
-
|
283
|
+
System.out.println [1,2,3].all?
|
284
|
+
System.out.println [1,2,3].all? {|x| Integer(x).intValue > 3}
|
260
285
|
end
|
261
286
|
EOF
|
262
287
|
assert_output("true\nfalse\n") do
|
263
288
|
cls.foo
|
264
289
|
end
|
290
|
+
|
291
|
+
cls, = compile(<<-EOF)
|
292
|
+
def foo
|
293
|
+
System.out.println [1,2,3].all? {|x| x.intValue > 3}
|
294
|
+
end
|
295
|
+
EOF
|
296
|
+
assert_output("false\n") do
|
297
|
+
cls.foo
|
298
|
+
end
|
265
299
|
end
|
266
300
|
|
267
301
|
def test_mirah_iterable
|
@@ -291,14 +325,13 @@ class EnumerableTest < Test::Unit::TestCase
|
|
291
325
|
end
|
292
326
|
|
293
327
|
def self.test(x:String)
|
294
|
-
MyIterator.new(x).each {|y|
|
328
|
+
MyIterator.new(x).each {|y| System.out.println y}
|
295
329
|
end
|
296
330
|
end
|
297
331
|
EOF
|
298
|
-
|
332
|
+
|
299
333
|
assert_output("Hi\n") do
|
300
334
|
cls.test("Hi")
|
301
335
|
end
|
302
336
|
end
|
303
|
-
|
304
337
|
end
|