mirah 0.0.12-java → 0.1.0-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|