rdl 1.1.1 → 2.0.0.rc1
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.
- checksums.yaml +4 -4
- data/CHANGES.md +6 -0
- data/README.md +211 -32
- data/gemfiles/Gemfile.travis +1 -1
- data/lib/rdl.rb +85 -18
- data/lib/rdl/info.rb +74 -0
- data/lib/rdl/query.rb +8 -9
- data/lib/rdl/typecheck.rb +1057 -0
- data/lib/rdl/types/annotated_arg.rb +5 -5
- data/lib/rdl/types/{nil.rb → bot.rb} +9 -13
- data/lib/rdl/types/dependent_arg.rb +5 -5
- data/lib/rdl/types/dots_query.rb +2 -0
- data/lib/rdl/types/finitehash.rb +67 -24
- data/lib/rdl/types/generic.rb +13 -21
- data/lib/rdl/types/intersection.rb +9 -8
- data/lib/rdl/types/method.rb +30 -32
- data/lib/rdl/types/nominal.rb +22 -16
- data/lib/rdl/types/optional.rb +8 -22
- data/lib/rdl/types/parser.racc +8 -3
- data/lib/rdl/types/parser.tab.rb +131 -118
- data/lib/rdl/types/singleton.rb +15 -10
- data/lib/rdl/types/structural.rb +6 -6
- data/lib/rdl/types/top.rb +6 -6
- data/lib/rdl/types/tuple.rb +56 -24
- data/lib/rdl/types/type.rb +9 -0
- data/lib/rdl/types/type_inferencer.rb +1 -1
- data/lib/rdl/types/union.rb +52 -26
- data/lib/rdl/types/var.rb +7 -6
- data/lib/rdl/types/vararg.rb +5 -6
- data/lib/rdl/types/wild_query.rb +9 -2
- data/lib/rdl/util.rb +9 -7
- data/lib/rdl/wrap.rb +90 -72
- data/lib/rdl_types.rb +2 -2
- data/rdl.gemspec +6 -8
- data/test/test_alias.rb +4 -3
- data/test/test_contract.rb +5 -4
- data/test/test_dsl.rb +2 -1
- data/test/test_generic.rb +30 -26
- data/test/test_intersection.rb +3 -3
- data/test/test_le.rb +129 -61
- data/test/test_lib_types.rb +3 -2
- data/test/test_member.rb +33 -46
- data/test/test_parser.rb +113 -116
- data/test/test_query.rb +2 -1
- data/test/test_rdl.rb +64 -6
- data/test/test_rdl_type.rb +3 -2
- data/test/test_type_contract.rb +30 -12
- data/test/test_typecheck.rb +893 -0
- data/test/test_types.rb +50 -54
- data/test/test_wrap.rb +2 -1
- data/types/ruby-2.x/_aliases.rb +13 -2
- data/types/ruby-2.x/bigdecimal.rb +60 -85
- data/types/ruby-2.x/bignum.rb +80 -119
- data/types/ruby-2.x/complex.rb +33 -40
- data/types/ruby-2.x/fixnum.rb +81 -120
- data/types/ruby-2.x/float.rb +79 -116
- data/types/ruby-2.x/integer.rb +187 -22
- data/types/ruby-2.x/nil.rb +12 -0
- data/types/ruby-2.x/numeric.rb +38 -38
- data/types/ruby-2.x/object.rb +3 -3
- data/types/ruby-2.x/random.rb +2 -0
- data/types/ruby-2.x/range.rb +20 -19
- data/types/ruby-2.x/rational.rb +40 -40
- data/types/ruby-2.x/regexp.rb +4 -4
- data/types/ruby-2.x/string.rb +15 -17
- metadata +17 -16
- data/lib/rdl/types/.#lexer.rex +0 -1
data/test/test_intersection.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
3
|
+
require 'rdl'
|
3
4
|
|
4
5
|
class TestIntersection < Minitest::Test
|
5
6
|
include RDL::Type
|
@@ -14,7 +15,7 @@ class TestIntersection < Minitest::Test
|
|
14
15
|
@true_n = NominalType.new(TrueClass)
|
15
16
|
|
16
17
|
@tparam_t = VarType.new(:t)
|
17
|
-
|
18
|
+
|
18
19
|
@f_or_s = UnionType.new(@fixnum, @string)
|
19
20
|
@string_or_true = UnionType.new(@string, @true_n)
|
20
21
|
|
@@ -38,4 +39,3 @@ class TestIntersection < Minitest::Test
|
|
38
39
|
assert_equal(t1, i)
|
39
40
|
end
|
40
41
|
end
|
41
|
-
|
data/test/test_le.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
3
|
+
require 'rdl'
|
4
|
+
require 'rdl_types'
|
3
5
|
|
4
6
|
class TestLe < Minitest::Test
|
5
7
|
include RDL::Type
|
@@ -14,63 +16,57 @@ class TestLe < Minitest::Test
|
|
14
16
|
end
|
15
17
|
|
16
18
|
def setup
|
17
|
-
@tnil = NilType.new
|
18
|
-
@ttop = TopType.new
|
19
|
-
@tstring = NominalType.new "String"
|
20
|
-
@tobject = NominalType.new "Object"
|
21
19
|
@tbasicobject = NominalType.new "BasicObject"
|
22
20
|
@tsymfoo = SingletonType.new :foo
|
23
|
-
@tsym = NominalType.new Symbol
|
24
21
|
@ta = NominalType.new A
|
25
22
|
@tb = NominalType.new B
|
26
23
|
@tc = NominalType.new C
|
27
|
-
@tfixnum = NominalType.new "Fixnum"
|
28
24
|
end
|
29
25
|
|
30
26
|
def test_nil
|
31
|
-
assert (
|
32
|
-
assert (
|
33
|
-
assert (
|
34
|
-
assert (
|
35
|
-
assert (
|
36
|
-
assert (not (
|
37
|
-
assert (not (
|
38
|
-
assert (not (
|
39
|
-
assert (not (@tbasicobject <=
|
40
|
-
assert (not (@tsymfoo <=
|
27
|
+
assert ($__rdl_nil_type <= $__rdl_top_type)
|
28
|
+
assert ($__rdl_nil_type <= $__rdl_string_type)
|
29
|
+
assert ($__rdl_nil_type <= $__rdl_object_type)
|
30
|
+
assert ($__rdl_nil_type <= @tbasicobject)
|
31
|
+
assert (not ($__rdl_nil_type <= @tsymfoo)) # nil no longer <= other singleton types
|
32
|
+
assert (not ($__rdl_top_type <= $__rdl_nil_type))
|
33
|
+
assert (not ($__rdl_string_type <= $__rdl_nil_type))
|
34
|
+
assert (not ($__rdl_object_type <= $__rdl_nil_type))
|
35
|
+
assert (not (@tbasicobject <= $__rdl_nil_type))
|
36
|
+
assert (not (@tsymfoo <= $__rdl_nil_type))
|
41
37
|
end
|
42
38
|
|
43
39
|
def test_top
|
44
|
-
assert (not (
|
45
|
-
assert (not (
|
46
|
-
assert (not (
|
47
|
-
assert (not (
|
48
|
-
assert (not (
|
49
|
-
assert (
|
50
|
-
assert (
|
51
|
-
assert (
|
52
|
-
assert (@tbasicobject <=
|
53
|
-
assert (@tsymfoo <=
|
40
|
+
assert (not ($__rdl_top_type <= $__rdl_nil_type))
|
41
|
+
assert (not ($__rdl_top_type <= $__rdl_string_type))
|
42
|
+
assert (not ($__rdl_top_type <= $__rdl_object_type))
|
43
|
+
assert (not ($__rdl_top_type <= @tbasicobject))
|
44
|
+
assert (not ($__rdl_top_type <= @tsymfoo))
|
45
|
+
assert ($__rdl_top_type <= $__rdl_top_type)
|
46
|
+
assert ($__rdl_string_type <= $__rdl_top_type)
|
47
|
+
assert ($__rdl_object_type <= $__rdl_top_type)
|
48
|
+
assert (@tbasicobject <= $__rdl_top_type)
|
49
|
+
assert (@tsymfoo <= $__rdl_top_type)
|
54
50
|
end
|
55
51
|
|
56
52
|
def test_sym
|
57
|
-
assert (
|
53
|
+
assert ($__rdl_symbol_type <= $__rdl_symbol_type)
|
58
54
|
assert (@tsymfoo <= @tsymfoo)
|
59
|
-
assert (@tsymfoo <=
|
60
|
-
assert (not (
|
55
|
+
assert (@tsymfoo <= $__rdl_symbol_type)
|
56
|
+
assert (not ($__rdl_symbol_type <= @tsymfoo))
|
61
57
|
end
|
62
58
|
|
63
59
|
def test_nominal
|
64
|
-
assert (
|
65
|
-
assert (
|
66
|
-
assert (not (
|
67
|
-
assert (not (
|
68
|
-
assert (
|
69
|
-
assert (
|
70
|
-
assert (
|
71
|
-
assert (not (
|
72
|
-
assert (not (@tbasicobject <=
|
73
|
-
assert (not (@tbasicobject <=
|
60
|
+
assert ($__rdl_string_type <= $__rdl_string_type)
|
61
|
+
assert ($__rdl_symbol_type <= $__rdl_symbol_type)
|
62
|
+
assert (not ($__rdl_string_type <= $__rdl_symbol_type))
|
63
|
+
assert (not ($__rdl_symbol_type <= $__rdl_string_type))
|
64
|
+
assert ($__rdl_string_type <= $__rdl_object_type)
|
65
|
+
assert ($__rdl_string_type <= @tbasicobject)
|
66
|
+
assert ($__rdl_object_type <= @tbasicobject)
|
67
|
+
assert (not ($__rdl_object_type <= $__rdl_string_type))
|
68
|
+
assert (not (@tbasicobject <= $__rdl_string_type))
|
69
|
+
assert (not (@tbasicobject <= $__rdl_object_type))
|
74
70
|
assert (@ta <= @ta)
|
75
71
|
assert (@tb <= @ta)
|
76
72
|
assert (@tc <= @ta)
|
@@ -83,28 +79,100 @@ class TestLe < Minitest::Test
|
|
83
79
|
end
|
84
80
|
|
85
81
|
def test_union
|
86
|
-
tstring_or_sym = UnionType.new(
|
87
|
-
assert (tstring_or_sym <=
|
88
|
-
assert (not (
|
82
|
+
tstring_or_sym = UnionType.new($__rdl_string_type, $__rdl_symbol_type)
|
83
|
+
assert (tstring_or_sym <= $__rdl_object_type)
|
84
|
+
assert (not ($__rdl_object_type <= tstring_or_sym))
|
89
85
|
end
|
90
86
|
|
91
87
|
def test_tuple
|
92
|
-
t1 = TupleType.new(
|
93
|
-
t2 = TupleType.new(
|
88
|
+
t1 = TupleType.new($__rdl_symbol_type, $__rdl_string_type)
|
89
|
+
t2 = TupleType.new($__rdl_object_type, $__rdl_object_type)
|
94
90
|
tarray = NominalType.new("Array")
|
95
91
|
assert (t1 <= t1)
|
96
92
|
assert (t2 <= t2)
|
97
|
-
assert (not (t1 <= t2)) # invariant subtyping since tuples are mutable
|
98
93
|
assert (not (t2 <= t1))
|
99
|
-
assert (not (t1 <= tarray)) # no convertability to arrays due to mutability
|
100
94
|
assert (not (tarray <= t1))
|
95
|
+
assert (t1 <= t2) # covariant subtyping since tuples are *immutable*
|
96
|
+
t123 = $__rdl_parser.scan_str "#T [1, 2, 3]"
|
97
|
+
tfff = $__rdl_parser.scan_str "#T [Fixnum, Fixnum, Fixnum]"
|
98
|
+
tooo = $__rdl_parser.scan_str "#T [Object, Object, Object]"
|
99
|
+
assert (t123 <= tfff) # covariant subtyping with singletons
|
100
|
+
assert (tfff <= tooo)
|
101
|
+
assert (t123 <= tooo)
|
102
|
+
|
103
|
+
# subtyping of tuples and arrays
|
104
|
+
tfs_1 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
105
|
+
tafs_1 = $__rdl_parser.scan_str "#T Array<Fixnum or String>"
|
106
|
+
assert (tfs_1 <= tafs_1) # subtyping allowed by tfs_1 promoted to array
|
107
|
+
tfs2_1 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
108
|
+
assert (not (tfs_1 <= tfs2_1)) # t12 has been promoted to array, no longer subtype
|
109
|
+
|
110
|
+
tfs_2 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
111
|
+
tfs2_2 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
112
|
+
assert (tfs_2 <= tfs2_2) # this is allowed here because tfs_2 is still a tuple
|
113
|
+
tafs_2 = $__rdl_parser.scan_str "#T Array<Fixnum or String>"
|
114
|
+
assert (not (tfs_2 <= tafs_2)) # subtyping not allowed because tfs_2 <= tfs2_2 unsatisfiable after tfs_2 promoted
|
115
|
+
|
116
|
+
tfs_3 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
117
|
+
tfs2_3 = $__rdl_parser.scan_str "#T [Object, Object]"
|
118
|
+
assert (tfs_3 <= tfs2_3) # this is allowed here because t12a is still a tuple
|
119
|
+
tafs_3 = $__rdl_parser.scan_str "#T Array<Object>"
|
120
|
+
assert (not (tfs2_3 <= tafs_3)) # subtyping not allowed because tfs_3 <= tfs2_3 unsatisfiable after tfs2_3 promoted
|
121
|
+
|
122
|
+
tfs_4 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
123
|
+
tfs2_4 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
124
|
+
assert (tfs_4 <= tfs2_4) # allowed, types are the same
|
125
|
+
tafs_4 = $__rdl_parser.scan_str "#T Array<Fixnum or String>"
|
126
|
+
assert (tfs2_4 <= tafs_4) # allowed, both tfs2_4 and tfs_4 promoted to array
|
127
|
+
tfs3_4 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
128
|
+
assert (not(tfs_4 <= tfs3_4)) # not allowed, tfs_4 has been promoted
|
129
|
+
end
|
130
|
+
|
131
|
+
def test_finite_hash
|
132
|
+
t12 = $__rdl_parser.scan_str "#T {a: 1, b: 2}"
|
133
|
+
tfs = $__rdl_parser.scan_str "#T {a: Fixnum, b: Fixnum}"
|
134
|
+
too = $__rdl_parser.scan_str "#T {a: Object, b: Object}"
|
135
|
+
assert (t12 <= tfs)
|
136
|
+
assert (t12 <= too)
|
137
|
+
assert (tfs <= too)
|
138
|
+
assert (not (tfs <= t12))
|
139
|
+
assert (not (too <= tfs))
|
140
|
+
assert (not (too <= t12))
|
141
|
+
|
142
|
+
# subtyping of finite hashes and hashes; same pattern as tuples
|
143
|
+
# subtyping of tuples and arrays
|
144
|
+
tfs_1 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
145
|
+
thfs_1 = $__rdl_parser.scan_str "#T Hash<Symbol, Fixnum or String>"
|
146
|
+
assert (tfs_1 <= thfs_1) # subtyping allowed because tfs_1 promoted to hash
|
147
|
+
tfs2_1 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
148
|
+
assert (not (tfs_1 <= tfs2_1)) # t12 has been promoted to hash, no longer subtype
|
149
|
+
|
150
|
+
tfs_2 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
151
|
+
tfs2_2 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
152
|
+
assert (tfs_2 <= tfs2_2) # this is allowed here because tfs_2 is still finite
|
153
|
+
thfs_2 = $__rdl_parser.scan_str "#T Hash<Symbol, Fixnum or String>"
|
154
|
+
assert (not (tfs_2 <= thfs_2)) # subtyping not allowed because tfs_2 <= tfs2_2 unsatisfiable after tfs_2 promoted
|
155
|
+
|
156
|
+
tfs_3 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
157
|
+
tfs2_3 = $__rdl_parser.scan_str "#T {x: Object, y: Object}"
|
158
|
+
assert (tfs_3 <= tfs2_3) # this is allowed here because t12a is still finite
|
159
|
+
thfs_3 = $__rdl_parser.scan_str "#T Hash<Symbol, Object>"
|
160
|
+
assert (not (tfs2_3 <= thfs_3)) # subtyping not allowed because tfs_3 <= tfs2_3 unsatisfiable after tfs2_3 promoted
|
161
|
+
|
162
|
+
tfs_4 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
163
|
+
tfs2_4 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
164
|
+
assert (tfs_4 <= tfs2_4) # allowed, types are the same
|
165
|
+
thfs_4 = $__rdl_parser.scan_str "#T Hash<Symbol, Fixnum or String>"
|
166
|
+
assert (tfs2_4 <= thfs_4) # allowed, both tfs2_4 and tfs_4 promoted to hash
|
167
|
+
tfs3_4 = $__rdl_parser.scan_str "#T {x: Fixnum, y: String}"
|
168
|
+
assert (not(tfs_4 <= tfs3_4)) # not allowed, tfs_4 has been promoted
|
101
169
|
end
|
102
170
|
|
103
171
|
def test_method
|
104
|
-
tss = MethodType.new([
|
105
|
-
tso = MethodType.new([
|
106
|
-
tos = MethodType.new([
|
107
|
-
too = MethodType.new([
|
172
|
+
tss = MethodType.new([$__rdl_string_type], nil, $__rdl_string_type)
|
173
|
+
tso = MethodType.new([$__rdl_string_type], nil, $__rdl_object_type)
|
174
|
+
tos = MethodType.new([$__rdl_object_type], nil, $__rdl_string_type)
|
175
|
+
too = MethodType.new([$__rdl_object_type], nil, $__rdl_object_type)
|
108
176
|
assert (tss <= tss)
|
109
177
|
assert (tss <= tso)
|
110
178
|
assert (not (tss <= tos))
|
@@ -121,8 +189,8 @@ class TestLe < Minitest::Test
|
|
121
189
|
assert (too <= tso)
|
122
190
|
assert (not (too <= tos))
|
123
191
|
assert (too <= too)
|
124
|
-
tbos = MethodType.new([], tos,
|
125
|
-
tbso = MethodType.new([], tso,
|
192
|
+
tbos = MethodType.new([], tos, $__rdl_object_type)
|
193
|
+
tbso = MethodType.new([], tso, $__rdl_object_type)
|
126
194
|
assert (tbos <= tbos)
|
127
195
|
assert (not (tbos <= tbso))
|
128
196
|
assert (tbso <= tbso)
|
@@ -130,11 +198,11 @@ class TestLe < Minitest::Test
|
|
130
198
|
end
|
131
199
|
|
132
200
|
def test_structural
|
133
|
-
tso = MethodType.new([
|
134
|
-
tos = MethodType.new([
|
201
|
+
tso = MethodType.new([$__rdl_string_type], nil, $__rdl_object_type)
|
202
|
+
tos = MethodType.new([$__rdl_object_type], nil, $__rdl_string_type)
|
135
203
|
ts1 = StructuralType.new(m1: tso)
|
136
204
|
ts2 = StructuralType.new(m1: tos)
|
137
|
-
assert (ts1 <=
|
205
|
+
assert (ts1 <= $__rdl_top_type)
|
138
206
|
assert (ts1 <= ts1)
|
139
207
|
assert (ts2 <= ts2)
|
140
208
|
assert (ts2 <= ts1)
|
@@ -167,8 +235,8 @@ class TestLe < Minitest::Test
|
|
167
235
|
def test_nominal_structural
|
168
236
|
tnom = NominalType.new(Nom)
|
169
237
|
tnomt = NominalType.new(NomT)
|
170
|
-
tma = MethodType.new([], nil,
|
171
|
-
tmb = MethodType.new([
|
238
|
+
tma = MethodType.new([], nil, $__rdl_nil_type)
|
239
|
+
tmb = MethodType.new([$__rdl_fixnum_type], nil, $__rdl_nil_type)
|
172
240
|
ts1 = StructuralType.new(m1: tma)
|
173
241
|
assert (tnom <= ts1)
|
174
242
|
assert (tnomt <= ts1)
|
@@ -185,9 +253,9 @@ class TestLe < Minitest::Test
|
|
185
253
|
|
186
254
|
# def test_intersection
|
187
255
|
# skip "<= not defined on intersection"
|
188
|
-
# tobject_and_basicobject = IntersectionType.new(
|
189
|
-
# assert (not (tobject_and_basicobject <=
|
190
|
-
# assert (
|
256
|
+
# tobject_and_basicobject = IntersectionType.new($__rdl_object_type, @tbasicobject)
|
257
|
+
# assert (not (tobject_and_basicobject <= $__rdl_object_type))
|
258
|
+
# assert ($__rdl_object_type <= tobject_and_basicobject)
|
191
259
|
# end
|
192
260
|
|
193
261
|
end
|
data/test/test_lib_types.rb
CHANGED
@@ -8,8 +8,9 @@ require 'coverage.so'
|
|
8
8
|
require 'uri'
|
9
9
|
|
10
10
|
require 'minitest/autorun'
|
11
|
-
|
12
|
-
|
11
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
12
|
+
require 'rdl'
|
13
|
+
require 'rdl_types.rb'
|
13
14
|
|
14
15
|
class Dummy
|
15
16
|
def self.each
|
data/test/test_member.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
3
|
+
require 'rdl'
|
3
4
|
|
4
5
|
class TestMember < Minitest::Test
|
5
6
|
include RDL::Type
|
@@ -14,60 +15,46 @@ class TestMember < Minitest::Test
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def setup
|
17
|
-
@tnil = NilType.new
|
18
|
-
@ttop = TopType.new
|
19
|
-
@tstring = NominalType.new "String"
|
20
|
-
@tobject = NominalType.new "Object"
|
21
18
|
@tbasicobject = NominalType.new "BasicObject"
|
22
19
|
@tsymfoo = SingletonType.new :foo
|
23
|
-
@
|
24
|
-
@
|
25
|
-
@
|
26
|
-
@
|
27
|
-
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@
|
31
|
-
@
|
32
|
-
@
|
33
|
-
@tstring_and_sym = IntersectionType.new(@tstring, @tsym)
|
34
|
-
@tobject_and_basicobject = IntersectionType.new(@tobject, @tbasicobject)
|
20
|
+
@tarraystring = GenericType.new($__rdl_array_type, $__rdl_string_type)
|
21
|
+
@tarrayobject = GenericType.new($__rdl_array_type, $__rdl_object_type)
|
22
|
+
@tarrayarraystring = GenericType.new($__rdl_array_type, @tarraystring)
|
23
|
+
@tarrayarrayobject = GenericType.new($__rdl_array_type, @tarrayobject)
|
24
|
+
$__rdl_hash_type = NominalType.new Hash
|
25
|
+
@thashstringstring = GenericType.new($__rdl_hash_type, $__rdl_string_type, $__rdl_string_type)
|
26
|
+
@thashobjectobject = GenericType.new($__rdl_hash_type, $__rdl_object_type, $__rdl_object_type)
|
27
|
+
@tstring_or_sym = UnionType.new($__rdl_string_type, $__rdl_symbol_type)
|
28
|
+
@tstring_and_sym = IntersectionType.new($__rdl_string_type, $__rdl_symbol_type)
|
29
|
+
@tobject_and_basicobject = IntersectionType.new($__rdl_object_type, @tbasicobject)
|
35
30
|
@ta = NominalType.new A
|
36
31
|
@tb = NominalType.new B
|
37
32
|
@tc = NominalType.new C
|
38
33
|
@tkernel = NominalType.new Kernel
|
39
|
-
@tarray = NominalType.new Array
|
40
|
-
@tarraystring = GenericType.new(@tarray, @tstring)
|
41
|
-
@tarrayobject = GenericType.new(@tarray, @tobject)
|
42
|
-
@tarrayarraystring = GenericType.new(@tarray, @tarraystring)
|
43
|
-
@tarrayarrayobject = GenericType.new(@tarray, @tarrayobject)
|
44
|
-
@thash = NominalType.new Hash
|
45
|
-
@thashsymstring = GenericType.new(@thash, @tsym, @tstring)
|
46
|
-
@thashobjectobject = GenericType.new(@thash, @tobject, @tobject)
|
47
34
|
@tavar = VarType.new :a
|
48
35
|
end
|
49
36
|
|
50
37
|
def test_nil
|
51
|
-
assert (
|
52
|
-
assert (not (
|
53
|
-
assert (not (
|
38
|
+
assert ($__rdl_nil_type.member? nil)
|
39
|
+
assert (not ($__rdl_nil_type.member? "foo"))
|
40
|
+
assert (not ($__rdl_nil_type.member? (Object.new)))
|
54
41
|
end
|
55
42
|
|
56
43
|
def test_top
|
57
|
-
assert (
|
58
|
-
assert (
|
59
|
-
assert (
|
44
|
+
assert ($__rdl_top_type.member? nil)
|
45
|
+
assert ($__rdl_top_type.member? "foo")
|
46
|
+
assert ($__rdl_top_type.member? (Object.new))
|
60
47
|
end
|
61
48
|
|
62
49
|
def test_nominal
|
63
50
|
o = Object.new
|
64
|
-
assert (
|
65
|
-
assert (not (
|
66
|
-
assert (not (
|
51
|
+
assert ($__rdl_string_type.member? "Foo")
|
52
|
+
assert (not ($__rdl_string_type.member? :Foo))
|
53
|
+
assert (not ($__rdl_string_type.member? o))
|
67
54
|
|
68
|
-
assert (
|
69
|
-
assert (
|
70
|
-
assert (
|
55
|
+
assert ($__rdl_object_type.member? "Foo")
|
56
|
+
assert ($__rdl_object_type.member? :Foo)
|
57
|
+
assert ($__rdl_object_type.member? o)
|
71
58
|
|
72
59
|
assert (@tkernel.member? "Foo")
|
73
60
|
assert (@tkernel.member? :Foo)
|
@@ -86,18 +73,18 @@ class TestMember < Minitest::Test
|
|
86
73
|
assert (not (@tc.member? b))
|
87
74
|
assert (@tc.member? c)
|
88
75
|
|
89
|
-
assert (
|
90
|
-
assert (
|
76
|
+
assert ($__rdl_string_type.member? nil)
|
77
|
+
assert ($__rdl_object_type.member? nil)
|
91
78
|
end
|
92
79
|
|
93
80
|
def test_symbol
|
94
|
-
assert (
|
95
|
-
assert (
|
96
|
-
assert (not (
|
81
|
+
assert ($__rdl_symbol_type.member? :foo)
|
82
|
+
assert ($__rdl_symbol_type.member? :bar)
|
83
|
+
assert (not ($__rdl_symbol_type.member? "foo"))
|
97
84
|
assert (@tsymfoo.member? :foo)
|
98
85
|
assert (not (@tsymfoo.member? :bar))
|
99
86
|
assert (not (@tsymfoo.member? "foo"))
|
100
|
-
assert (@tsymfoo.member? nil)
|
87
|
+
assert (not(@tsymfoo.member? nil)) # nil no longer subtype of other singletons
|
101
88
|
end
|
102
89
|
|
103
90
|
def test_union_intersection
|
@@ -122,7 +109,7 @@ class TestMember < Minitest::Test
|
|
122
109
|
end
|
123
110
|
|
124
111
|
def test_tuple
|
125
|
-
t1 = TupleType.new(
|
112
|
+
t1 = TupleType.new($__rdl_symbol_type, $__rdl_string_type)
|
126
113
|
assert (t1.member? [:foo, "foo"])
|
127
114
|
assert (not (t1.member? ["foo", :foo]))
|
128
115
|
assert (not (t1.member? [:foo, "foo", "bar"]))
|
@@ -132,13 +119,13 @@ class TestMember < Minitest::Test
|
|
132
119
|
end
|
133
120
|
|
134
121
|
def test_finite_hash
|
135
|
-
t1 = FiniteHashType.new(a:
|
122
|
+
t1 = FiniteHashType.new(a: $__rdl_symbol_type, b: $__rdl_string_type)
|
136
123
|
assert (t1.member?(a: :foo, b: "foo"))
|
137
124
|
assert (not (t1.member?(a: 1, b: "foo")))
|
138
125
|
assert (not (t1.member?(a: :foo)))
|
139
126
|
assert (not (t1.member?(b: "foo")))
|
140
127
|
assert (not (t1.member?(a: :foo, b: "foo", c: :baz)))
|
141
|
-
t2 = FiniteHashType.new({"a"
|
128
|
+
t2 = FiniteHashType.new({"a"=>$__rdl_symbol_type, 2=>$__rdl_string_type})
|
142
129
|
assert (t2.member?({"a"=>:foo, 2=>"foo"}))
|
143
130
|
assert (not (t2.member?({"a"=>2, 2=>"foo"})))
|
144
131
|
assert (not (t2.member?({"a"=>:foo})))
|
data/test/test_parser.rb
CHANGED
@@ -1,28 +1,25 @@
|
|
1
1
|
require 'minitest/autorun'
|
2
|
-
|
2
|
+
$LOAD_PATH << File.dirname(__FILE__) + "/../lib"
|
3
|
+
require 'rdl'
|
3
4
|
|
4
5
|
class TestParser < Minitest::Test
|
5
6
|
include RDL::Type
|
6
7
|
|
8
|
+
class A; end
|
9
|
+
class B; end
|
10
|
+
class C; end
|
11
|
+
|
7
12
|
def setup
|
8
|
-
@
|
9
|
-
@
|
10
|
-
@
|
11
|
-
@tfixnum = NominalType.new Fixnum
|
12
|
-
@tfixnumopt = OptionalType.new @tfixnum
|
13
|
-
@tfixnumvararg = VarargType.new @tfixnum
|
14
|
-
@tstring = NominalType.new String
|
15
|
-
@tstringopt = OptionalType.new @tstring
|
13
|
+
@tfixnumopt = OptionalType.new $__rdl_fixnum_type
|
14
|
+
@tfixnumvararg = VarargType.new $__rdl_fixnum_type
|
15
|
+
@tstringopt = OptionalType.new $__rdl_string_type
|
16
16
|
@tenum = NominalType.new :Enumerator
|
17
|
-
@ttrue = NominalType.new TrueClass
|
18
|
-
@tfalse = NominalType.new FalseClass
|
19
|
-
@tbool = UnionType.new @ttrue, @tfalse
|
20
17
|
@ta = NominalType.new :A
|
21
18
|
@tb = NominalType.new :B
|
22
19
|
@tc = NominalType.new :C
|
23
|
-
@tfixnumx = AnnotatedArgType.new("x",
|
24
|
-
@tfixnumy = AnnotatedArgType.new("y",
|
25
|
-
@tfixnumret = AnnotatedArgType.new("ret",
|
20
|
+
@tfixnumx = AnnotatedArgType.new("x", $__rdl_fixnum_type)
|
21
|
+
@tfixnumy = AnnotatedArgType.new("y", $__rdl_fixnum_type)
|
22
|
+
@tfixnumret = AnnotatedArgType.new("ret", $__rdl_fixnum_type)
|
26
23
|
@tfixnumoptx = AnnotatedArgType.new("x", @tfixnumopt)
|
27
24
|
@tfixnumvarargx = AnnotatedArgType.new("x", @tfixnumvararg)
|
28
25
|
@tsymbol = SingletonType.new(:symbol)
|
@@ -30,167 +27,167 @@ class TestParser < Minitest::Test
|
|
30
27
|
end
|
31
28
|
|
32
29
|
def test_basic
|
33
|
-
t1 =
|
34
|
-
assert_equal (MethodType.new [
|
35
|
-
t2 =
|
36
|
-
assert_equal (MethodType.new [
|
37
|
-
t3 =
|
30
|
+
t1 = $__rdl_parser.scan_str "(nil) -> nil"
|
31
|
+
assert_equal (MethodType.new [$__rdl_nil_type], nil, $__rdl_nil_type), t1
|
32
|
+
t2 = $__rdl_parser.scan_str "(Fixnum, Fixnum) -> Fixnum"
|
33
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, $__rdl_fixnum_type], nil, $__rdl_fixnum_type), t2
|
34
|
+
t3 = $__rdl_parser.scan_str "() -> Enumerator"
|
38
35
|
assert_equal (MethodType.new [], nil, @tenum), t3
|
39
|
-
t4 =
|
40
|
-
assert_equal (MethodType.new [
|
41
|
-
t5 =
|
42
|
-
assert_equal (MethodType.new [
|
43
|
-
assert_raises(RuntimeError) {
|
44
|
-
t6 =
|
45
|
-
assert_equal (MethodType.new [@ta], nil,
|
46
|
-
t7 =
|
47
|
-
assert_equal (MethodType.new [NominalType.new("TestParser::A")], nil,
|
48
|
-
t8 =
|
49
|
-
assert_equal (MethodType.new [
|
36
|
+
t4 = $__rdl_parser.scan_str "(%any) -> nil"
|
37
|
+
assert_equal (MethodType.new [$__rdl_top_type], nil, $__rdl_nil_type), t4
|
38
|
+
t5 = $__rdl_parser.scan_str "(%bool) -> Fixnum"
|
39
|
+
assert_equal (MethodType.new [$__rdl_bool_type], nil, $__rdl_fixnum_type), t5
|
40
|
+
assert_raises(RuntimeError) { $__rdl_parser.scan_str "(%foo) -> nil" }
|
41
|
+
t6 = $__rdl_parser.scan_str "(A) -> nil"
|
42
|
+
assert_equal (MethodType.new [@ta], nil, $__rdl_nil_type), t6
|
43
|
+
t7 = $__rdl_parser.scan_str "(TestParser::A) -> nil"
|
44
|
+
assert_equal (MethodType.new [NominalType.new("TestParser::A")], nil, $__rdl_nil_type), t7
|
45
|
+
t8 = $__rdl_parser.scan_str "(Fixnum) { (%any, String) -> nil } -> :symbol"
|
46
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type], MethodType.new([$__rdl_top_type, $__rdl_string_type], nil, $__rdl_nil_type), @tsymbol), t8
|
47
|
+
t9 = $__rdl_parser.scan_str "(true) -> false"
|
48
|
+
assert_equal (MethodType.new [$__rdl_true_type], nil, $__rdl_false_type), t9
|
50
49
|
end
|
51
50
|
|
52
51
|
def test_opt_vararg
|
53
|
-
t1 =
|
54
|
-
assert_equal (MethodType.new [
|
55
|
-
t2 =
|
56
|
-
assert_equal (MethodType.new [
|
57
|
-
t3 =
|
58
|
-
assert_equal (MethodType.new [
|
59
|
-
t4 =
|
60
|
-
assert_equal (MethodType.new [@tfixnumopt], nil,
|
61
|
-
t5 =
|
62
|
-
assert_equal (MethodType.new [@tfixnumvararg], nil,
|
52
|
+
t1 = $__rdl_parser.scan_str "(Fixnum, ?Fixnum) -> Fixnum"
|
53
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumopt], nil, $__rdl_fixnum_type), t1
|
54
|
+
t2 = $__rdl_parser.scan_str "(Fixnum, *Fixnum) -> Fixnum"
|
55
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumvararg], nil, $__rdl_fixnum_type), t2
|
56
|
+
t3 = $__rdl_parser.scan_str "(Fixnum, ?Fixnum, ?Fixnum, *Fixnum) -> Fixnum"
|
57
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumopt, @tfixnumopt, @tfixnumvararg], nil, $__rdl_fixnum_type), t3
|
58
|
+
t4 = $__rdl_parser.scan_str "(?Fixnum) -> nil"
|
59
|
+
assert_equal (MethodType.new [@tfixnumopt], nil, $__rdl_nil_type), t4
|
60
|
+
t5 = $__rdl_parser.scan_str "(*Fixnum) -> nil"
|
61
|
+
assert_equal (MethodType.new [@tfixnumvararg], nil, $__rdl_nil_type), t5
|
63
62
|
end
|
64
63
|
|
65
64
|
def test_union
|
66
|
-
t1 =
|
67
|
-
assert_equal (MethodType.new [UnionType.new(
|
68
|
-
t2 =
|
69
|
-
assert_equal (MethodType.new [UnionType.new(
|
70
|
-
t3 =
|
71
|
-
assert_equal (MethodType.new [], nil, UnionType.new(
|
65
|
+
t1 = $__rdl_parser.scan_str "(Fixnum or String) -> nil"
|
66
|
+
assert_equal (MethodType.new [UnionType.new($__rdl_fixnum_type, $__rdl_string_type)], nil, $__rdl_nil_type), t1
|
67
|
+
t2 = $__rdl_parser.scan_str "(Fixnum or String or Symbol) -> nil"
|
68
|
+
assert_equal (MethodType.new [UnionType.new($__rdl_fixnum_type, $__rdl_string_type, $__rdl_symbol_type)], nil, $__rdl_nil_type), t2
|
69
|
+
t3 = $__rdl_parser.scan_str "() -> Fixnum or String or Symbol"
|
70
|
+
assert_equal (MethodType.new [], nil, UnionType.new($__rdl_fixnum_type, $__rdl_string_type, $__rdl_symbol_type)), t3
|
72
71
|
end
|
73
72
|
|
74
73
|
def test_bare
|
75
|
-
t1 =
|
76
|
-
assert_equal
|
77
|
-
t2 =
|
78
|
-
assert_equal
|
79
|
-
t3 =
|
74
|
+
t1 = $__rdl_parser.scan_str "#T nil"
|
75
|
+
assert_equal $__rdl_nil_type, t1
|
76
|
+
t2 = $__rdl_parser.scan_str "#T %any"
|
77
|
+
assert_equal $__rdl_top_type, t2
|
78
|
+
t3 = $__rdl_parser.scan_str "#T A"
|
80
79
|
assert_equal NominalType.new("A"), t3
|
81
80
|
end
|
82
81
|
|
83
82
|
def test_symbol
|
84
|
-
t1 =
|
83
|
+
t1 = $__rdl_parser.scan_str "#T :symbol"
|
85
84
|
assert_equal @tsymbol, t1
|
86
85
|
end
|
87
86
|
|
88
87
|
def test_annotated_params
|
89
|
-
t1 =
|
90
|
-
assert_equal (MethodType.new [@tfixnumx,
|
91
|
-
t2 =
|
92
|
-
assert_equal (MethodType.new [
|
93
|
-
t3 =
|
94
|
-
assert_equal (MethodType.new [
|
95
|
-
t4 =
|
96
|
-
assert_equal (MethodType.new [
|
97
|
-
t5 =
|
98
|
-
assert_equal (MethodType.new [@tfixnumx, @tfixnumy], nil,
|
99
|
-
t6 =
|
100
|
-
assert_equal (MethodType.new [
|
101
|
-
t7 =
|
102
|
-
assert_equal (MethodType.new [@tfixnumx,
|
103
|
-
t8 =
|
104
|
-
assert_equal (MethodType.new [
|
105
|
-
t9 =
|
88
|
+
t1 = $__rdl_parser.scan_str "(Fixnum x, Fixnum) -> Fixnum"
|
89
|
+
assert_equal (MethodType.new [@tfixnumx, $__rdl_fixnum_type], nil, $__rdl_fixnum_type), t1
|
90
|
+
t2 = $__rdl_parser.scan_str "(Fixnum, ?Fixnum x) -> Fixnum"
|
91
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumoptx], nil, $__rdl_fixnum_type), t2
|
92
|
+
t3 = $__rdl_parser.scan_str "(Fixnum, *Fixnum x) -> Fixnum"
|
93
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumvarargx], nil, $__rdl_fixnum_type), t3
|
94
|
+
t4 = $__rdl_parser.scan_str "(Fixnum, Fixnum y) -> Fixnum"
|
95
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumy], nil, $__rdl_fixnum_type), t4
|
96
|
+
t5 = $__rdl_parser.scan_str "(Fixnum x, Fixnum y) -> Fixnum"
|
97
|
+
assert_equal (MethodType.new [@tfixnumx, @tfixnumy], nil, $__rdl_fixnum_type), t5
|
98
|
+
t6 = $__rdl_parser.scan_str "(Fixnum, Fixnum) -> Fixnum ret"
|
99
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, $__rdl_fixnum_type], nil, @tfixnumret), t6
|
100
|
+
t7 = $__rdl_parser.scan_str "(Fixnum x, Fixnum) -> Fixnum ret"
|
101
|
+
assert_equal (MethodType.new [@tfixnumx, $__rdl_fixnum_type], nil, @tfixnumret), t7
|
102
|
+
t8 = $__rdl_parser.scan_str "(Fixnum, Fixnum y) -> Fixnum ret"
|
103
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumy], nil, @tfixnumret), t8
|
104
|
+
t9 = $__rdl_parser.scan_str "(Fixnum x, Fixnum y) -> Fixnum ret"
|
106
105
|
assert_equal (MethodType.new [@tfixnumx, @tfixnumy], nil, @tfixnumret), t9
|
107
|
-
t10 =
|
108
|
-
assert_equal (MethodType.new [@tsymbolx], nil,
|
106
|
+
t10 = $__rdl_parser.scan_str "(:symbol x) -> Fixnum"
|
107
|
+
assert_equal (MethodType.new [@tsymbolx], nil, $__rdl_fixnum_type), t10
|
109
108
|
end
|
110
109
|
|
111
110
|
def test_generic
|
112
|
-
t1 =
|
111
|
+
t1 = $__rdl_parser.scan_str "#T t"
|
113
112
|
assert_equal (VarType.new "t"), t1
|
114
|
-
t2 =
|
113
|
+
t2 = $__rdl_parser.scan_str "#T Array"
|
115
114
|
assert_equal (NominalType.new "Array"), t2
|
116
|
-
t3 =
|
115
|
+
t3 = $__rdl_parser.scan_str "#T Array<t>"
|
117
116
|
assert_equal (GenericType.new(t2, t1)), t3
|
118
|
-
t4 =
|
117
|
+
t4 = $__rdl_parser.scan_str "#T Array<Array<t>>"
|
119
118
|
assert_equal (GenericType.new(t2, t3)), t4
|
120
|
-
t5 =
|
119
|
+
t5 = $__rdl_parser.scan_str "#T Hash"
|
121
120
|
assert_equal (NominalType.new "Hash"), t5
|
122
|
-
t6 =
|
121
|
+
t6 = $__rdl_parser.scan_str "#T Hash<u, v>"
|
123
122
|
assert_equal (GenericType.new(t5, VarType.new("u"), VarType.new("v"))), t6
|
124
|
-
t7 =
|
125
|
-
assert_equal (GenericType.new(NominalType.new("Foo"),
|
123
|
+
t7 = $__rdl_parser.scan_str "#T Foo<String, Array<t>, Array<Array<t>>>"
|
124
|
+
assert_equal (GenericType.new(NominalType.new("Foo"), $__rdl_string_type, t3, t4)), t7
|
126
125
|
end
|
127
126
|
|
128
127
|
def test_tuple
|
129
|
-
t1 =
|
130
|
-
assert_equal (TupleType.new(
|
131
|
-
t2 =
|
132
|
-
assert_equal (TupleType.new(
|
128
|
+
t1 = $__rdl_parser.scan_str "#T [Fixnum, String]"
|
129
|
+
assert_equal (TupleType.new($__rdl_fixnum_type, $__rdl_string_type)), t1
|
130
|
+
t2 = $__rdl_parser.scan_str "#T [String]"
|
131
|
+
assert_equal (TupleType.new($__rdl_string_type)), t2
|
133
132
|
end
|
134
133
|
|
135
134
|
def test_fixnum
|
136
|
-
t1 =
|
135
|
+
t1 = $__rdl_parser.scan_str "#T 42"
|
137
136
|
assert_equal (SingletonType.new(42)), t1
|
138
|
-
t2 =
|
137
|
+
t2 = $__rdl_parser.scan_str "#T -42"
|
139
138
|
assert_equal (SingletonType.new(-42)), t2
|
140
139
|
end
|
141
140
|
|
142
141
|
def test_float
|
143
|
-
t1 =
|
142
|
+
t1 = $__rdl_parser.scan_str "#T 3.14"
|
144
143
|
assert_equal (SingletonType.new(3.14)), t1
|
145
144
|
end
|
146
145
|
|
147
146
|
def test_const
|
148
|
-
t1 =
|
147
|
+
t1 = $__rdl_parser.scan_str "#T ${Math::PI}"
|
149
148
|
assert_equal (SingletonType.new(Math::PI)), t1
|
150
149
|
end
|
151
150
|
|
152
151
|
def test_type_alias
|
153
|
-
type_alias '%foobarbaz',
|
154
|
-
assert_equal
|
152
|
+
type_alias '%foobarbaz', $__rdl_nil_type
|
153
|
+
assert_equal $__rdl_nil_type, ($__rdl_parser.scan_str "#T %foobarbaz")
|
155
154
|
type_alias '%quxquxqux', 'nil'
|
156
|
-
assert_equal
|
155
|
+
assert_equal $__rdl_nil_type, ($__rdl_parser.scan_str "#T %quxquxqux")
|
157
156
|
assert_raises(RuntimeError) { type_alias '%quxquxqux', 'nil' }
|
158
|
-
assert_raises(RuntimeError) {
|
157
|
+
assert_raises(RuntimeError) { $__rdl_parser.scan_str "#T %qux" }
|
159
158
|
end
|
160
159
|
|
161
160
|
def test_structural
|
162
|
-
t1 =
|
163
|
-
tm1 = MethodType.new [], nil,
|
161
|
+
t1 = $__rdl_parser.scan_str "#T [to_str: () -> String]"
|
162
|
+
tm1 = MethodType.new [], nil, $__rdl_string_type
|
164
163
|
ts1 = StructuralType.new(to_str: tm1)
|
165
164
|
assert_equal ts1, t1
|
166
165
|
end
|
167
166
|
|
168
167
|
def test_finite_hash
|
169
|
-
t1 =
|
170
|
-
assert_equal (FiniteHashType.new({a:
|
171
|
-
t2 =
|
172
|
-
assert_equal (FiniteHashType.new({"a"
|
168
|
+
t1 = $__rdl_parser.scan_str "#T {a: Fixnum, b: String}"
|
169
|
+
assert_equal (FiniteHashType.new({a: $__rdl_fixnum_type, b: $__rdl_string_type})), t1
|
170
|
+
t2 = $__rdl_parser.scan_str "#T {'a'=>Fixnum, 2=>String}"
|
171
|
+
assert_equal (FiniteHashType.new({"a"=>$__rdl_fixnum_type, 2=>$__rdl_string_type})), t2
|
173
172
|
end
|
174
173
|
|
175
174
|
def test_named_params
|
176
|
-
t1 =
|
177
|
-
assert_equal (MethodType.new [
|
178
|
-
t2 =
|
179
|
-
assert_equal (MethodType.new [
|
180
|
-
t3 =
|
181
|
-
assert_equal (MethodType.new [
|
182
|
-
t4 =
|
183
|
-
assert_equal (MethodType.new [
|
184
|
-
t4 =
|
185
|
-
assert_equal (MethodType.new [
|
186
|
-
t5 =
|
187
|
-
assert_equal (MethodType.new [@tfixnumx, FiniteHashType.new(x:
|
188
|
-
|
189
|
-
assert_equal (MethodType.new [
|
190
|
-
|
191
|
-
assert_equal (MethodType.new [FiniteHashType.new(x:
|
192
|
-
t7 = @p.scan_str "(x: Fixnum) { (%any, String) -> nil } -> :symbol"
|
193
|
-
assert_equal (MethodType.new [FiniteHashType.new(x: @tfixnum)], MethodType.new([@ttop, @tstring], nil, @tnil), @tsymbol), t7
|
175
|
+
t1 = $__rdl_parser.scan_str "(Fixnum, x: Fixnum) -> Fixnum"
|
176
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new(x: $__rdl_fixnum_type)], nil, $__rdl_fixnum_type), t1
|
177
|
+
t2 = $__rdl_parser.scan_str "(Fixnum, x: Fixnum, y: String) -> Fixnum"
|
178
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new(x: $__rdl_fixnum_type, y: $__rdl_string_type)], nil, $__rdl_fixnum_type), t2
|
179
|
+
t3 = $__rdl_parser.scan_str "(Fixnum, y: String, x: Fixnum) -> Fixnum"
|
180
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new(x: $__rdl_fixnum_type, y: $__rdl_string_type)], nil, $__rdl_fixnum_type), t3
|
181
|
+
t4 = $__rdl_parser.scan_str "(Fixnum, y: String, x: ?Fixnum) -> Fixnum"
|
182
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new(x: @tfixnumopt, y: $__rdl_string_type)], nil, $__rdl_fixnum_type), t4
|
183
|
+
t4 = $__rdl_parser.scan_str "(Fixnum, y: ?String, x: Fixnum) -> Fixnum"
|
184
|
+
assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new(x: $__rdl_fixnum_type, y: @tstringopt)], nil, $__rdl_fixnum_type), t4
|
185
|
+
t5 = $__rdl_parser.scan_str "(Fixnum x, x: Fixnum) -> Fixnum"
|
186
|
+
assert_equal (MethodType.new [@tfixnumx, FiniteHashType.new(x: $__rdl_fixnum_type)], nil, $__rdl_fixnum_type), t5
|
187
|
+
t6 = $__rdl_parser.scan_str "(x: Fixnum) -> Fixnum"
|
188
|
+
assert_equal (MethodType.new [FiniteHashType.new(x: $__rdl_fixnum_type)], nil, $__rdl_fixnum_type), t6
|
189
|
+
t7 = $__rdl_parser.scan_str "(x: Fixnum) { (%any, String) -> nil } -> :symbol"
|
190
|
+
assert_equal (MethodType.new [FiniteHashType.new(x: $__rdl_fixnum_type)], MethodType.new([$__rdl_top_type, $__rdl_string_type], nil, $__rdl_nil_type), @tsymbol), t7
|
194
191
|
end
|
195
192
|
|
196
193
|
end
|