rdl 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +13 -0
  3. data/CHANGES.md +35 -0
  4. data/README.md +153 -116
  5. data/bin/rdl_query +1 -1
  6. data/extras/type_tests/typetests.rb +905 -0
  7. data/lib/rdl.rb +0 -1
  8. data/lib/rdl/boot.rb +108 -77
  9. data/lib/rdl/boot_rails.rb +2 -8
  10. data/lib/rdl/config.rb +44 -17
  11. data/lib/rdl/contracts/flat.rb +1 -1
  12. data/lib/rdl/info.rb +3 -3
  13. data/lib/rdl/query.rb +11 -11
  14. data/lib/rdl/typecheck.rb +399 -136
  15. data/lib/rdl/types/finite_hash.rb +3 -2
  16. data/lib/rdl/types/generic.rb +7 -6
  17. data/lib/rdl/types/intersection.rb +3 -2
  18. data/lib/rdl/types/lexer.rex +2 -3
  19. data/lib/rdl/types/lexer.rex.rb +1 -4
  20. data/lib/rdl/types/method.rb +7 -6
  21. data/lib/rdl/types/nominal.rb +10 -1
  22. data/lib/rdl/types/parser.racc +7 -8
  23. data/lib/rdl/types/parser.tab.rb +108 -109
  24. data/lib/rdl/types/structural.rb +1 -0
  25. data/lib/rdl/types/tuple.rb +2 -2
  26. data/lib/rdl/types/type.rb +8 -8
  27. data/lib/rdl/types/type_inferencer.rb +1 -1
  28. data/lib/rdl/types/union.rb +2 -1
  29. data/lib/rdl/util.rb +28 -3
  30. data/lib/rdl/wrap.rb +216 -165
  31. data/lib/rdl_disable.rb +22 -15
  32. data/lib/types/core.rb +2 -4
  33. data/lib/types/core/_aliases.rb +14 -0
  34. data/lib/types/core/abbrev.rb +3 -0
  35. data/lib/types/core/array.rb +139 -0
  36. data/lib/types/core/base64.rb +8 -0
  37. data/lib/types/core/basic_object.rb +12 -0
  38. data/lib/types/core/benchmark.rb +9 -0
  39. data/lib/types/core/bigdecimal.rb +223 -0
  40. data/lib/types/core/bigmath.rb +10 -0
  41. data/lib/types/core/bignum.rb +214 -0
  42. data/lib/types/core/class.rb +15 -0
  43. data/lib/types/core/complex.rb +123 -0
  44. data/lib/types/core/coverage.rb +4 -0
  45. data/lib/types/core/csv.rb +3 -0
  46. data/lib/types/core/date.rb +4 -0
  47. data/lib/types/core/dir.rb +37 -0
  48. data/lib/types/core/encoding.rb +21 -0
  49. data/lib/types/core/enumerable.rb +96 -0
  50. data/lib/types/core/enumerator.rb +24 -0
  51. data/lib/types/core/exception.rb +15 -0
  52. data/lib/types/core/file.rb +125 -0
  53. data/lib/types/core/fileutils.rb +4 -0
  54. data/lib/types/core/fixnum.rb +213 -0
  55. data/lib/types/core/float.rb +199 -0
  56. data/lib/types/core/gem.rb +19 -0
  57. data/lib/types/core/hash.rb +72 -0
  58. data/lib/types/core/integer.rb +194 -0
  59. data/lib/types/core/io.rb +101 -0
  60. data/lib/types/core/kernel.rb +89 -0
  61. data/lib/types/core/marshal.rb +3 -0
  62. data/lib/types/core/matchdata.rb +24 -0
  63. data/lib/types/core/math.rb +50 -0
  64. data/lib/types/core/module.rb +81 -0
  65. data/lib/types/core/nil.rb +11 -0
  66. data/lib/types/core/numeric.rb +56 -0
  67. data/lib/types/core/object.rb +73 -0
  68. data/lib/types/core/pathname.rb +104 -0
  69. data/lib/types/core/proc.rb +12 -0
  70. data/lib/types/core/process.rb +110 -0
  71. data/lib/types/core/random.rb +13 -0
  72. data/lib/types/core/range.rb +37 -0
  73. data/lib/types/core/rational.rb +207 -0
  74. data/lib/types/core/regexp.rb +28 -0
  75. data/lib/types/core/set.rb +56 -0
  76. data/lib/types/core/string.rb +140 -0
  77. data/lib/types/core/strscan.rb +6 -0
  78. data/lib/types/core/symbol.rb +27 -0
  79. data/lib/types/core/time.rb +66 -0
  80. data/lib/types/core/uri.rb +18 -0
  81. data/lib/types/core/yaml.rb +3 -0
  82. data/lib/types/devise.rb +1 -0
  83. data/lib/types/devise/controller_helpers.rb +3 -0
  84. data/lib/types/devise/parameter_sanitizer.rb +2 -0
  85. data/lib/types/pundit.rb +2 -0
  86. data/lib/types/rails/_helpers.rb +50 -0
  87. data/lib/types/rails/abstract_controller/translation.rb +2 -0
  88. data/lib/types/rails/action_controller/base.rb +3 -0
  89. data/lib/types/rails/action_controller/instrumentation.rb +6 -0
  90. data/lib/types/rails/action_controller/metal.rb +3 -0
  91. data/lib/types/rails/action_controller/mime_responds.rb +13 -0
  92. data/lib/types/rails/action_controller/parameters.rb +3 -0
  93. data/lib/types/{rails-5.x → rails}/action_controller/strong_parameters.rb +4 -8
  94. data/lib/types/rails/action_dispatch/flashhash.rb +8 -0
  95. data/lib/types/rails/action_dispatch/routing.rb +10 -0
  96. data/lib/types/rails/action_mailer/base.rb +2 -0
  97. data/lib/types/rails/action_mailer/message_delivery.rb +2 -0
  98. data/lib/types/rails/action_view/helpers_sanitizehelper.rb +2 -0
  99. data/lib/types/rails/action_view/helpers_urlhelper.rb +5 -0
  100. data/lib/types/rails/active_model/errors.rb +14 -0
  101. data/lib/types/rails/active_model/validations.rb +2 -0
  102. data/lib/types/rails/active_record/associations.rb +208 -0
  103. data/lib/types/rails/active_record/base.rb +2 -0
  104. data/lib/types/rails/active_record/core.rb +2 -0
  105. data/lib/types/rails/active_record/finder_methods.rb +2 -0
  106. data/lib/types/rails/active_record/model_schema.rb +37 -0
  107. data/lib/types/rails/active_record/relation.rb +11 -0
  108. data/lib/types/rails/active_record/schema_types.rb +51 -0
  109. data/lib/types/rails/active_record/validations.rb +2 -0
  110. data/lib/types/rails/active_support/base.rb +2 -0
  111. data/lib/types/rails/active_support/logger.rb +3 -0
  112. data/lib/types/rails/active_support/tagged_logging.rb +2 -0
  113. data/lib/types/rails/active_support/time_with_zone.rb +13 -0
  114. data/lib/types/rails/active_support/time_zone.rb +2 -0
  115. data/lib/types/rails/fixnum.rb +2 -0
  116. data/lib/types/rails/integer.rb +2 -0
  117. data/lib/types/rails/rack/request.rb +2 -0
  118. data/lib/types/rails/string.rb +3 -0
  119. data/lib/types/rails/time.rb +1 -0
  120. data/rdl.gemspec +2 -2
  121. data/test/disabled_test_rdoc.rb +8 -8
  122. data/test/test_alias.rb +1 -0
  123. data/test/test_dsl.rb +4 -4
  124. data/test/test_generic.rb +45 -38
  125. data/test/test_intersection.rb +10 -10
  126. data/test/test_le.rb +103 -102
  127. data/test/test_member.rb +33 -33
  128. data/test/test_parser.rb +101 -96
  129. data/test/test_query.rb +84 -84
  130. data/test/test_rdl.rb +87 -52
  131. data/test/test_rdl_type.rb +26 -9
  132. data/test/test_type_contract.rb +32 -31
  133. data/test/test_typecheck.rb +802 -436
  134. data/test/test_types.rb +39 -39
  135. data/test/test_wrap.rb +3 -2
  136. metadata +91 -120
  137. data/extras/type_tests/%.rb +0 -171
  138. data/extras/type_tests/&.rb +0 -159
  139. data/extras/type_tests/**.rb +0 -222
  140. data/extras/type_tests/*.rb +0 -177
  141. data/extras/type_tests/+.rb +0 -170
  142. data/extras/type_tests/-.rb +0 -171
  143. data/extras/type_tests/1scomp.rb +0 -157
  144. data/extras/type_tests/<.rb +0 -170
  145. data/extras/type_tests/<<.rb +0 -159
  146. data/extras/type_tests/>>.rb +0 -159
  147. data/extras/type_tests/[].rb +0 -163
  148. data/extras/type_tests/^.rb +0 -159
  149. data/extras/type_tests/abs.rb +0 -155
  150. data/extras/type_tests/abs2.rb +0 -164
  151. data/extras/type_tests/angle.rb +0 -157
  152. data/extras/type_tests/arg.rb +0 -157
  153. data/extras/type_tests/bit_length.rb +0 -157
  154. data/extras/type_tests/ceil.rb +0 -157
  155. data/extras/type_tests/ceilRational.rb +0 -160
  156. data/extras/type_tests/conj.rb +0 -158
  157. data/extras/type_tests/defwhere.rb +0 -86
  158. data/extras/type_tests/denominator.rb +0 -157
  159. data/extras/type_tests/div.rb +0 -172
  160. data/extras/type_tests/divslash.rb +0 -179
  161. data/extras/type_tests/even?.rb +0 -157
  162. data/extras/type_tests/fdiv.rb +0 -244
  163. data/extras/type_tests/finite?.rb +0 -157
  164. data/extras/type_tests/floor.rb +0 -157
  165. data/extras/type_tests/floorRational.rb +0 -161
  166. data/extras/type_tests/hash.rb +0 -157
  167. data/extras/type_tests/imag.rb +0 -158
  168. data/extras/type_tests/infinite?.rb +0 -157
  169. data/extras/type_tests/modulo.rb +0 -171
  170. data/extras/type_tests/nan?.rb +0 -157
  171. data/extras/type_tests/neg.rb +0 -155
  172. data/extras/type_tests/next.rb +0 -157
  173. data/extras/type_tests/next_float.rb +0 -157
  174. data/extras/type_tests/numerator.rb +0 -157
  175. data/extras/type_tests/phase.rb +0 -157
  176. data/extras/type_tests/prev_float.rb +0 -157
  177. data/extras/type_tests/quo.rb +0 -179
  178. data/extras/type_tests/rationalize.rb +0 -157
  179. data/extras/type_tests/rationalizeArg.rb +0 -198
  180. data/extras/type_tests/real.rb +0 -157
  181. data/extras/type_tests/real?.rb +0 -157
  182. data/extras/type_tests/round.rb +0 -157
  183. data/extras/type_tests/roundArg.rb +0 -169
  184. data/extras/type_tests/size.rb +0 -157
  185. data/extras/type_tests/to_c.rb +0 -157
  186. data/extras/type_tests/to_f.rb +0 -155
  187. data/extras/type_tests/to_i.rb +0 -157
  188. data/extras/type_tests/to_r.rb +0 -157
  189. data/extras/type_tests/to_s.rb +0 -157
  190. data/extras/type_tests/truncate.rb +0 -157
  191. data/extras/type_tests/truncateArg.rb +0 -166
  192. data/extras/type_tests/type tests +0 -1
  193. data/extras/type_tests/zero?.rb +0 -155
  194. data/extras/type_tests/|.rb +0 -159
  195. data/lib/types/core-ruby-2.x/_aliases.rb +0 -15
  196. data/lib/types/core-ruby-2.x/abbrev.rb +0 -5
  197. data/lib/types/core-ruby-2.x/array.rb +0 -137
  198. data/lib/types/core-ruby-2.x/base64.rb +0 -10
  199. data/lib/types/core-ruby-2.x/basic_object.rb +0 -14
  200. data/lib/types/core-ruby-2.x/benchmark.rb +0 -11
  201. data/lib/types/core-ruby-2.x/bigdecimal.rb +0 -224
  202. data/lib/types/core-ruby-2.x/bigmath.rb +0 -12
  203. data/lib/types/core-ruby-2.x/bignum.rb +0 -214
  204. data/lib/types/core-ruby-2.x/class.rb +0 -17
  205. data/lib/types/core-ruby-2.x/complex.rb +0 -124
  206. data/lib/types/core-ruby-2.x/coverage.rb +0 -6
  207. data/lib/types/core-ruby-2.x/csv.rb +0 -5
  208. data/lib/types/core-ruby-2.x/date.rb +0 -6
  209. data/lib/types/core-ruby-2.x/dir.rb +0 -38
  210. data/lib/types/core-ruby-2.x/encoding.rb +0 -23
  211. data/lib/types/core-ruby-2.x/enumerable.rb +0 -98
  212. data/lib/types/core-ruby-2.x/enumerator.rb +0 -26
  213. data/lib/types/core-ruby-2.x/exception.rb +0 -17
  214. data/lib/types/core-ruby-2.x/file.rb +0 -126
  215. data/lib/types/core-ruby-2.x/fileutils.rb +0 -6
  216. data/lib/types/core-ruby-2.x/fixnum.rb +0 -213
  217. data/lib/types/core-ruby-2.x/float.rb +0 -199
  218. data/lib/types/core-ruby-2.x/gem.rb +0 -247
  219. data/lib/types/core-ruby-2.x/hash.rb +0 -72
  220. data/lib/types/core-ruby-2.x/integer.rb +0 -197
  221. data/lib/types/core-ruby-2.x/io.rb +0 -103
  222. data/lib/types/core-ruby-2.x/kernel.rb +0 -90
  223. data/lib/types/core-ruby-2.x/marshal.rb +0 -5
  224. data/lib/types/core-ruby-2.x/matchdata.rb +0 -26
  225. data/lib/types/core-ruby-2.x/math.rb +0 -53
  226. data/lib/types/core-ruby-2.x/module.rb +0 -83
  227. data/lib/types/core-ruby-2.x/nil.rb +0 -12
  228. data/lib/types/core-ruby-2.x/numeric.rb +0 -56
  229. data/lib/types/core-ruby-2.x/object.rb +0 -75
  230. data/lib/types/core-ruby-2.x/pathname.rb +0 -106
  231. data/lib/types/core-ruby-2.x/proc.rb +0 -16
  232. data/lib/types/core-ruby-2.x/process.rb +0 -127
  233. data/lib/types/core-ruby-2.x/random.rb +0 -17
  234. data/lib/types/core-ruby-2.x/range.rb +0 -39
  235. data/lib/types/core-ruby-2.x/rational.rb +0 -209
  236. data/lib/types/core-ruby-2.x/regexp.rb +0 -30
  237. data/lib/types/core-ruby-2.x/set.rb +0 -58
  238. data/lib/types/core-ruby-2.x/string.rb +0 -143
  239. data/lib/types/core-ruby-2.x/strscan.rb +0 -7
  240. data/lib/types/core-ruby-2.x/symbol.rb +0 -29
  241. data/lib/types/core-ruby-2.x/time.rb +0 -68
  242. data/lib/types/core-ruby-2.x/uri.rb +0 -20
  243. data/lib/types/core-ruby-2.x/yaml.rb +0 -5
  244. data/lib/types/rails-5.x/_helpers.rb +0 -52
  245. data/lib/types/rails-5.x/action_controller/mime_responds.rb +0 -11
  246. data/lib/types/rails-5.x/action_dispatch/routing.rb +0 -10
  247. data/lib/types/rails-5.x/active_model/errors.rb +0 -15
  248. data/lib/types/rails-5.x/active_model/validations.rb +0 -5
  249. data/lib/types/rails-5.x/active_record/associations.rb +0 -190
  250. data/lib/types/rails-5.x/active_record/core.rb +0 -3
  251. data/lib/types/rails-5.x/active_record/model_schema.rb +0 -39
  252. data/lib/types/rails-5.x/fixnum.rb +0 -3
@@ -10,79 +10,79 @@ class TestParser < Minitest::Test
10
10
  class C; end
11
11
 
12
12
  def setup
13
- @tfixnumopt = OptionalType.new $__rdl_fixnum_type
14
- @tfixnumvararg = VarargType.new $__rdl_fixnum_type
15
- @tstringopt = OptionalType.new $__rdl_string_type
13
+ @tintegeropt = OptionalType.new RDL::Globals.types[:integer]
14
+ @tintegervararg = VarargType.new RDL::Globals.types[:integer]
15
+ @tstringopt = OptionalType.new RDL::Globals.types[:string]
16
16
  @tenum = NominalType.new :Enumerator
17
17
  @ta = NominalType.new :A
18
18
  @tb = NominalType.new :B
19
19
  @tc = NominalType.new :C
20
- @tfixnumx = AnnotatedArgType.new("x", $__rdl_fixnum_type)
21
- @tfixnumy = AnnotatedArgType.new("y", $__rdl_fixnum_type)
22
- @tfixnumret = AnnotatedArgType.new("ret", $__rdl_fixnum_type)
23
- @tfixnumoptx = AnnotatedArgType.new("x", @tfixnumopt)
24
- @tfixnumvarargx = AnnotatedArgType.new("x", @tfixnumvararg)
20
+ @tintegerx = AnnotatedArgType.new("x", RDL::Globals.types[:integer])
21
+ @tintegery = AnnotatedArgType.new("y", RDL::Globals.types[:integer])
22
+ @tintegerret = AnnotatedArgType.new("ret", RDL::Globals.types[:integer])
23
+ @tintegeroptx = AnnotatedArgType.new("x", @tintegeropt)
24
+ @tintegervarargx = AnnotatedArgType.new("x", @tintegervararg)
25
25
  @tsymbol = SingletonType.new(:symbol)
26
26
  @tsymbolx = AnnotatedArgType.new("x", @tsymbol)
27
27
  end
28
28
 
29
29
  def tt(t)
30
- $__rdl_parser.scan_str('#T ' + t)
30
+ RDL::Globals.parser.scan_str('#T ' + t)
31
31
  end
32
32
 
33
33
  def tm(t)
34
- $__rdl_parser.scan_str t
34
+ RDL::Globals.parser.scan_str t
35
35
  end
36
36
 
37
37
  def test_basic
38
38
  t1 = tm "(nil) -> nil"
39
- assert_equal (MethodType.new [$__rdl_nil_type], nil, $__rdl_nil_type), t1
40
- t2 = tm "(Fixnum, Fixnum) -> Fixnum"
41
- assert_equal (MethodType.new [$__rdl_fixnum_type, $__rdl_fixnum_type], nil, $__rdl_fixnum_type), t2
39
+ assert_equal (MethodType.new [RDL::Globals.types[:nil]], nil, RDL::Globals.types[:nil]), t1
40
+ t2 = tm "(Integer, Integer) -> Integer"
41
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], RDL::Globals.types[:integer]], nil, RDL::Globals.types[:integer]), t2
42
42
  t3 = tm "() -> Enumerator"
43
43
  assert_equal (MethodType.new [], nil, @tenum), t3
44
44
  t4 = tm "(%any) -> nil"
45
- assert_equal (MethodType.new [$__rdl_top_type], nil, $__rdl_nil_type), t4
46
- t5 = tm "(%bool) -> Fixnum"
47
- assert_equal (MethodType.new [$__rdl_bool_type], nil, $__rdl_fixnum_type), t5
45
+ assert_equal (MethodType.new [RDL::Globals.types[:top]], nil, RDL::Globals.types[:nil]), t4
46
+ t5 = tm "(%bool) -> Integer"
47
+ assert_equal (MethodType.new [RDL::Globals.types[:bool]], nil, RDL::Globals.types[:integer]), t5
48
48
  assert_raises(RuntimeError) { tm "(%foo) -> nil" }
49
49
  t6 = tm "(A) -> nil"
50
- assert_equal (MethodType.new [@ta], nil, $__rdl_nil_type), t6
50
+ assert_equal (MethodType.new [@ta], nil, RDL::Globals.types[:nil]), t6
51
51
  t7 = tm "(TestParser::A) -> nil"
52
- assert_equal (MethodType.new [NominalType.new("TestParser::A")], nil, $__rdl_nil_type), t7
53
- t8 = tm "(Fixnum) { (%any, String) -> nil } -> :symbol"
54
- assert_equal (MethodType.new [$__rdl_fixnum_type], MethodType.new([$__rdl_top_type, $__rdl_string_type], nil, $__rdl_nil_type), @tsymbol), t8
52
+ assert_equal (MethodType.new [NominalType.new("TestParser::A")], nil, RDL::Globals.types[:nil]), t7
53
+ t8 = tm "(Integer) { (%any, String) -> nil } -> :symbol"
54
+ assert_equal (MethodType.new [RDL::Globals.types[:integer]], MethodType.new([RDL::Globals.types[:top], RDL::Globals.types[:string]], nil, RDL::Globals.types[:nil]), @tsymbol), t8
55
55
  t9 = tm "(true) -> false"
56
- assert_equal (MethodType.new [$__rdl_true_type], nil, $__rdl_false_type), t9
56
+ assert_equal (MethodType.new [RDL::Globals.types[:true]], nil, RDL::Globals.types[:false]), t9
57
57
  end
58
58
 
59
59
  def test_opt_vararg
60
- t1 = tm "(Fixnum, ?Fixnum) -> Fixnum"
61
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumopt], nil, $__rdl_fixnum_type), t1
62
- t2 = tm "(Fixnum, *Fixnum) -> Fixnum"
63
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumvararg], nil, $__rdl_fixnum_type), t2
64
- t3 = tm "(Fixnum, ?Fixnum, ?Fixnum, *Fixnum) -> Fixnum"
65
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumopt, @tfixnumopt, @tfixnumvararg], nil, $__rdl_fixnum_type), t3
66
- t4 = tm "(?Fixnum) -> nil"
67
- assert_equal (MethodType.new [@tfixnumopt], nil, $__rdl_nil_type), t4
68
- t5 = tm "(*Fixnum) -> nil"
69
- assert_equal (MethodType.new [@tfixnumvararg], nil, $__rdl_nil_type), t5
60
+ t1 = tm "(Integer, ?Integer) -> Integer"
61
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegeropt], nil, RDL::Globals.types[:integer]), t1
62
+ t2 = tm "(Integer, *Integer) -> Integer"
63
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegervararg], nil, RDL::Globals.types[:integer]), t2
64
+ t3 = tm "(Integer, ?Integer, ?Integer, *Integer) -> Integer"
65
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegeropt, @tintegeropt, @tintegervararg], nil, RDL::Globals.types[:integer]), t3
66
+ t4 = tm "(?Integer) -> nil"
67
+ assert_equal (MethodType.new [@tintegeropt], nil, RDL::Globals.types[:nil]), t4
68
+ t5 = tm "(*Integer) -> nil"
69
+ assert_equal (MethodType.new [@tintegervararg], nil, RDL::Globals.types[:nil]), t5
70
70
  end
71
71
 
72
72
  def test_union
73
- t1 = tm "(Fixnum or String) -> nil"
74
- assert_equal (MethodType.new [UnionType.new($__rdl_fixnum_type, $__rdl_string_type)], nil, $__rdl_nil_type), t1
75
- t2 = tm "(Fixnum or String or Symbol) -> nil"
76
- assert_equal (MethodType.new [UnionType.new($__rdl_fixnum_type, $__rdl_string_type, $__rdl_symbol_type)], nil, $__rdl_nil_type), t2
77
- t3 = tm "() -> Fixnum or String or Symbol"
78
- assert_equal (MethodType.new [], nil, UnionType.new($__rdl_fixnum_type, $__rdl_string_type, $__rdl_symbol_type)), t3
73
+ t1 = tm "(Integer or String) -> nil"
74
+ assert_equal (MethodType.new [UnionType.new(RDL::Globals.types[:integer], RDL::Globals.types[:string])], nil, RDL::Globals.types[:nil]), t1
75
+ t2 = tm "(Integer or String or Symbol) -> nil"
76
+ assert_equal (MethodType.new [UnionType.new(RDL::Globals.types[:integer], RDL::Globals.types[:string], RDL::Globals.types[:symbol])], nil, RDL::Globals.types[:nil]), t2
77
+ t3 = tm "() -> Integer or String or Symbol"
78
+ assert_equal (MethodType.new [], nil, UnionType.new(RDL::Globals.types[:integer], RDL::Globals.types[:string], RDL::Globals.types[:symbol])), t3
79
79
  end
80
80
 
81
81
  def test_bare
82
82
  t1 = tt "nil"
83
- assert_equal $__rdl_nil_type, t1
83
+ assert_equal RDL::Globals.types[:nil], t1
84
84
  t2 = tt "%any"
85
- assert_equal $__rdl_top_type, t2
85
+ assert_equal RDL::Globals.types[:top], t2
86
86
  t3 = tt "A"
87
87
  assert_equal NominalType.new("A"), t3
88
88
  end
@@ -93,26 +93,26 @@ class TestParser < Minitest::Test
93
93
  end
94
94
 
95
95
  def test_annotated_params
96
- t1 = tm "(Fixnum x, Fixnum) -> Fixnum"
97
- assert_equal (MethodType.new [@tfixnumx, $__rdl_fixnum_type], nil, $__rdl_fixnum_type), t1
98
- t2 = tm "(Fixnum, ?Fixnum x) -> Fixnum"
99
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumoptx], nil, $__rdl_fixnum_type), t2
100
- t3 = tm "(Fixnum, *Fixnum x) -> Fixnum"
101
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumvarargx], nil, $__rdl_fixnum_type), t3
102
- t4 = tm "(Fixnum, Fixnum y) -> Fixnum"
103
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumy], nil, $__rdl_fixnum_type), t4
104
- t5 = tm "(Fixnum x, Fixnum y) -> Fixnum"
105
- assert_equal (MethodType.new [@tfixnumx, @tfixnumy], nil, $__rdl_fixnum_type), t5
106
- t6 = tm "(Fixnum, Fixnum) -> Fixnum ret"
107
- assert_equal (MethodType.new [$__rdl_fixnum_type, $__rdl_fixnum_type], nil, @tfixnumret), t6
108
- t7 = tm "(Fixnum x, Fixnum) -> Fixnum ret"
109
- assert_equal (MethodType.new [@tfixnumx, $__rdl_fixnum_type], nil, @tfixnumret), t7
110
- t8 = tm "(Fixnum, Fixnum y) -> Fixnum ret"
111
- assert_equal (MethodType.new [$__rdl_fixnum_type, @tfixnumy], nil, @tfixnumret), t8
112
- t9 = tm "(Fixnum x, Fixnum y) -> Fixnum ret"
113
- assert_equal (MethodType.new [@tfixnumx, @tfixnumy], nil, @tfixnumret), t9
114
- t10 = tm "(:symbol x) -> Fixnum"
115
- assert_equal (MethodType.new [@tsymbolx], nil, $__rdl_fixnum_type), t10
96
+ t1 = tm "(Integer x, Integer) -> Integer"
97
+ assert_equal (MethodType.new [@tintegerx, RDL::Globals.types[:integer]], nil, RDL::Globals.types[:integer]), t1
98
+ t2 = tm "(Integer, ?Integer x) -> Integer"
99
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegeroptx], nil, RDL::Globals.types[:integer]), t2
100
+ t3 = tm "(Integer, *Integer x) -> Integer"
101
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegervarargx], nil, RDL::Globals.types[:integer]), t3
102
+ t4 = tm "(Integer, Integer y) -> Integer"
103
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegery], nil, RDL::Globals.types[:integer]), t4
104
+ t5 = tm "(Integer x, Integer y) -> Integer"
105
+ assert_equal (MethodType.new [@tintegerx, @tintegery], nil, RDL::Globals.types[:integer]), t5
106
+ t6 = tm "(Integer, Integer) -> Integer ret"
107
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], RDL::Globals.types[:integer]], nil, @tintegerret), t6
108
+ t7 = tm "(Integer x, Integer) -> Integer ret"
109
+ assert_equal (MethodType.new [@tintegerx, RDL::Globals.types[:integer]], nil, @tintegerret), t7
110
+ t8 = tm "(Integer, Integer y) -> Integer ret"
111
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], @tintegery], nil, @tintegerret), t8
112
+ t9 = tm "(Integer x, Integer y) -> Integer ret"
113
+ assert_equal (MethodType.new [@tintegerx, @tintegery], nil, @tintegerret), t9
114
+ t10 = tm "(:symbol x) -> Integer"
115
+ assert_equal (MethodType.new [@tsymbolx], nil, RDL::Globals.types[:integer]), t10
116
116
  end
117
117
 
118
118
  def test_generic
@@ -129,17 +129,17 @@ class TestParser < Minitest::Test
129
129
  t6 = tt "Hash<u, v>"
130
130
  assert_equal (GenericType.new(t5, VarType.new("u"), VarType.new("v"))), t6
131
131
  t7 = tt "Foo<String, Array<t>, Array<Array<t>>>"
132
- assert_equal (GenericType.new(NominalType.new("Foo"), $__rdl_string_type, t3, t4)), t7
132
+ assert_equal (GenericType.new(NominalType.new("Foo"), RDL::Globals.types[:string], t3, t4)), t7
133
133
  end
134
134
 
135
135
  def test_tuple
136
- t1 = tt "[Fixnum, String]"
137
- assert_equal (TupleType.new($__rdl_fixnum_type, $__rdl_string_type)), t1
136
+ t1 = tt "[Integer, String]"
137
+ assert_equal (TupleType.new(RDL::Globals.types[:integer], RDL::Globals.types[:string])), t1
138
138
  t2 = tt "[String]"
139
- assert_equal (TupleType.new($__rdl_string_type)), t2
139
+ assert_equal (TupleType.new(RDL::Globals.types[:string])), t2
140
140
  end
141
141
 
142
- def test_fixnum
142
+ def test_integer
143
143
  t1 = tt "42"
144
144
  assert_equal (SingletonType.new(42)), t1
145
145
  t2 = tt "-42"
@@ -157,52 +157,52 @@ class TestParser < Minitest::Test
157
157
  end
158
158
 
159
159
  def test_type_alias
160
- type_alias '%foobarbaz', $__rdl_nil_type
161
- assert_equal $__rdl_nil_type, (tt "%foobarbaz")
162
- type_alias '%quxquxqux', 'nil'
163
- assert_equal $__rdl_nil_type, (tt "%quxquxqux")
164
- assert_raises(RuntimeError) { type_alias '%quxquxqux', 'nil' }
160
+ RDL.type_alias '%foobarbaz', RDL::Globals.types[:nil]
161
+ assert_equal RDL::Globals.types[:nil], (tt "%foobarbaz")
162
+ RDL.type_alias '%quxquxqux', 'nil'
163
+ assert_equal RDL::Globals.types[:nil], (tt "%quxquxqux")
164
+ assert_raises(RuntimeError) { RDL.type_alias '%quxquxqux', 'nil' }
165
165
  assert_raises(RuntimeError) { tt "%qux" }
166
166
  end
167
167
 
168
168
  def test_structural
169
169
  t1 = tt "[to_str: () -> String]"
170
- tm1 = MethodType.new [], nil, $__rdl_string_type
170
+ tm1 = MethodType.new [], nil, RDL::Globals.types[:string]
171
171
  ts1 = StructuralType.new(to_str: tm1)
172
172
  assert_equal ts1, t1
173
173
  end
174
174
 
175
175
  def test_finite_hash
176
- t1 = tt "{a: Fixnum, b: String}"
177
- assert_equal (FiniteHashType.new({a: $__rdl_fixnum_type, b: $__rdl_string_type}, nil)), t1
178
- t2 = tt "{'a'=>Fixnum, 2=>String}"
179
- assert_equal (FiniteHashType.new({"a"=>$__rdl_fixnum_type, 2=>$__rdl_string_type}, nil)), t2
176
+ t1 = tt "{a: Integer, b: String}"
177
+ assert_equal (FiniteHashType.new({a: RDL::Globals.types[:integer], b: RDL::Globals.types[:string]}, nil)), t1
178
+ t2 = tt "{'a'=>Integer, 2=>String}"
179
+ assert_equal (FiniteHashType.new({"a"=>RDL::Globals.types[:integer], 2=>RDL::Globals.types[:string]}, nil)), t2
180
180
  end
181
181
 
182
182
  def test_named_params
183
- t1 = tm "(Fixnum, x: Fixnum) -> Fixnum"
184
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: $__rdl_fixnum_type}, nil)], nil, $__rdl_fixnum_type), t1
185
- t2 = tm "(Fixnum, x: Fixnum, y: String) -> Fixnum"
186
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: $__rdl_fixnum_type, y: $__rdl_string_type}, nil)], nil, $__rdl_fixnum_type), t2
187
- t3 = tm "(Fixnum, y: String, x: Fixnum) -> Fixnum"
188
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: $__rdl_fixnum_type, y: $__rdl_string_type}, nil)], nil, $__rdl_fixnum_type), t3
189
- t4 = tm "(Fixnum, y: String, x: ?Fixnum) -> Fixnum"
190
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: @tfixnumopt, y: $__rdl_string_type}, nil)], nil, $__rdl_fixnum_type), t4
191
- t4 = tm "(Fixnum, y: ?String, x: Fixnum) -> Fixnum"
192
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: $__rdl_fixnum_type, y: @tstringopt}, nil)], nil, $__rdl_fixnum_type), t4
193
- t5 = tm "(Fixnum x, x: Fixnum) -> Fixnum"
194
- assert_equal (MethodType.new [@tfixnumx, FiniteHashType.new({x: $__rdl_fixnum_type}, nil)], nil, $__rdl_fixnum_type), t5
195
- t6 = tm "(x: Fixnum) -> Fixnum"
196
- assert_equal (MethodType.new [FiniteHashType.new({x: $__rdl_fixnum_type}, nil)], nil, $__rdl_fixnum_type), t6
197
- t7 = tm "(x: Fixnum) { (%any, String) -> nil } -> :symbol"
198
- assert_equal (MethodType.new [FiniteHashType.new({x: $__rdl_fixnum_type}, nil)], MethodType.new([$__rdl_top_type, $__rdl_string_type], nil, $__rdl_nil_type), @tsymbol), t7
199
- t8 = tm "(Fixnum, x: Fixnum, **String) -> Fixnum"
200
- assert_equal (MethodType.new [$__rdl_fixnum_type, FiniteHashType.new({x: $__rdl_fixnum_type}, $__rdl_string_type)], nil, $__rdl_fixnum_type), t8
183
+ t1 = tm "(Integer, x: Integer) -> Integer"
184
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: RDL::Globals.types[:integer]}, nil)], nil, RDL::Globals.types[:integer]), t1
185
+ t2 = tm "(Integer, x: Integer, y: String) -> Integer"
186
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: RDL::Globals.types[:integer], y: RDL::Globals.types[:string]}, nil)], nil, RDL::Globals.types[:integer]), t2
187
+ t3 = tm "(Integer, y: String, x: Integer) -> Integer"
188
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: RDL::Globals.types[:integer], y: RDL::Globals.types[:string]}, nil)], nil, RDL::Globals.types[:integer]), t3
189
+ t4 = tm "(Integer, y: String, x: ?Integer) -> Integer"
190
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: @tintegeropt, y: RDL::Globals.types[:string]}, nil)], nil, RDL::Globals.types[:integer]), t4
191
+ t4 = tm "(Integer, y: ?String, x: Integer) -> Integer"
192
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: RDL::Globals.types[:integer], y: @tstringopt}, nil)], nil, RDL::Globals.types[:integer]), t4
193
+ t5 = tm "(Integer x, x: Integer) -> Integer"
194
+ assert_equal (MethodType.new [@tintegerx, FiniteHashType.new({x: RDL::Globals.types[:integer]}, nil)], nil, RDL::Globals.types[:integer]), t5
195
+ t6 = tm "(x: Integer) -> Integer"
196
+ assert_equal (MethodType.new [FiniteHashType.new({x: RDL::Globals.types[:integer]}, nil)], nil, RDL::Globals.types[:integer]), t6
197
+ t7 = tm "(x: Integer) { (%any, String) -> nil } -> :symbol"
198
+ assert_equal (MethodType.new [FiniteHashType.new({x: RDL::Globals.types[:integer]}, nil)], MethodType.new([RDL::Globals.types[:top], RDL::Globals.types[:string]], nil, RDL::Globals.types[:nil]), @tsymbol), t7
199
+ t8 = tm "(Integer, x: Integer, **String) -> Integer"
200
+ assert_equal (MethodType.new [RDL::Globals.types[:integer], FiniteHashType.new({x: RDL::Globals.types[:integer]}, RDL::Globals.types[:string])], nil, RDL::Globals.types[:integer]), t8
201
201
  end
202
202
 
203
203
  def test_nonnull
204
204
  assert_equal NonNullType.new(@ta), tt("!A")
205
- tm2 = MethodType.new [], nil, $__rdl_string_type
205
+ tm2 = MethodType.new [], nil, RDL::Globals.types[:string]
206
206
  ts2 = StructuralType.new(to_str: tm2)
207
207
  assert_equal NonNullType.new(ts2), tt("![to_str: () -> String]")
208
208
  assert_raises(RuntimeError) { tt("!3") }
@@ -210,11 +210,16 @@ class TestParser < Minitest::Test
210
210
 
211
211
  def test_optional_block
212
212
  t1 = tm "() { (%any) -> nil } -> %any"
213
- assert_equal (MethodType.new [], MethodType.new([$__rdl_top_type], nil, $__rdl_nil_type), $__rdl_top_type), t1
213
+ assert_equal (MethodType.new [], MethodType.new([RDL::Globals.types[:top]], nil, RDL::Globals.types[:nil]), RDL::Globals.types[:top]), t1
214
214
  t2 = tm "() ?{ (%any) -> nil } -> %any"
215
- assert_equal (MethodType.new [], OptionalType.new(MethodType.new([$__rdl_top_type], nil, $__rdl_nil_type)), $__rdl_top_type), t2
215
+ assert_equal (MethodType.new [], OptionalType.new(MethodType.new([RDL::Globals.types[:top]], nil, RDL::Globals.types[:nil])), RDL::Globals.types[:top]), t2
216
216
  t3 = tm "() ?{ (t) -> nil } -> %any"
217
- assert_equal (MethodType.new [], OptionalType.new(MethodType.new([VarType.new('t')], nil, $__rdl_nil_type)), $__rdl_top_type), t3
217
+ assert_equal (MethodType.new [], OptionalType.new(MethodType.new([VarType.new('t')], nil, RDL::Globals.types[:nil])), RDL::Globals.types[:top]), t3
218
+ end
219
+
220
+ def test_or
221
+ assert_equal (FiniteHashType.new({aorganization: RDL::Globals.types[:symbol]}, nil)), tt('{aorganization: Symbol}')
222
+ assert_equal (FiniteHashType.new({organization: RDL::Globals.types[:symbol]}, nil)), tt('{organization: Symbol}')
218
223
  end
219
224
 
220
225
  end
@@ -7,7 +7,7 @@ class TestQuery < Minitest::Test
7
7
 
8
8
  def setup
9
9
  @p = Parser.new
10
- @tfixnum = NominalType.new Fixnum
10
+ @tinteger = NominalType.new Integer
11
11
  @tarray = NominalType.new Array
12
12
  @qwild = WildQuery.new
13
13
  @qwildopt = OptionalType.new @qwild
@@ -19,94 +19,94 @@ class TestQuery < Minitest::Test
19
19
  def test_parse
20
20
  q1 = @p.scan_str "#Q (.) -> ."
21
21
  assert_equal (MethodType.new [@qwild], nil, @qwild), q1
22
- q2 = @p.scan_str "#Q (., Fixnum) -> Fixnum"
23
- assert_equal (MethodType.new [@qwild, @tfixnum], nil, @tfixnum), q2
24
- q3 = @p.scan_str "#Q (Fixnum, ?.) -> Fixnum"
25
- assert_equal (MethodType.new [@tfixnum, @qwildopt], nil, @tfixnum), q3
26
- q4 = @p.scan_str "#Q (*.) -> Fixnum"
27
- assert_equal (MethodType.new [@qwildvararg], nil, @tfixnum), q4
28
- q5 = @p.scan_str "#Q (. or Fixnum) -> Fixnum"
29
- assert_equal (MethodType.new [UnionType.new(@qwild, @tfixnum)], nil, @tfixnum), q5
30
- q6 = @p.scan_str "#Q (. x, Fixnum) -> Fixnum"
31
- assert_equal (MethodType.new [@qwildx, @tfixnum], nil, @tfixnum), q6
32
- q7 = @p.scan_str "#Q (Array<.>) -> Fixnum"
33
- assert_equal (MethodType.new [GenericType.new(@tarray, @qwild)], nil, @tfixnum), q7
34
- # q8 = @p.scan_str "#Q (.<Fixnum>) -> Fixnum"
35
- # assert_equal (MethodType.new [GenericType.new(@twild, @tfixnum)], nil, @tfixnum), q8
36
- q9 = @p.scan_str "#Q ([Fixnum, .]) -> Fixnum"
37
- assert_equal (MethodType.new [TupleType.new(@tfixnum, @qwild)], nil, @tfixnum), q9
38
- q10 = @p.scan_str "#Q ([to_str: () -> .]) -> Fixnum"
39
- assert_equal (MethodType.new [StructuralType.new(to_str: (MethodType.new [], nil, @qwild))], nil, @tfixnum), q10
40
- q11 = @p.scan_str "#Q ({a: Fixnum, b: .}) -> Fixnum"
41
- assert_equal (MethodType.new [FiniteHashType.new({a: @tfixnum, b: @qwild}, nil)], nil, @tfixnum), q11
42
- q12 = @p.scan_str "#Q (Fixnum, x: .) -> Fixnum"
43
- assert_equal (MethodType.new [@tfixnum, FiniteHashType.new({x: @qwild}, nil)], nil, @tfixnum), q12
44
- q13 = @p.scan_str "#Q (Fixnum, ..., Fixnum) -> Fixnum"
45
- assert_equal (MethodType.new [@tfixnum, @qdots, @tfixnum], nil, @tfixnum), q13
46
- q14 = @p.scan_str "#Q (Fixnum, ...) -> Fixnum"
47
- assert_equal (MethodType.new [@tfixnum, @qdots], nil, @tfixnum), q14
48
- q15 = @p.scan_str "#Q (...) -> Fixnum"
49
- assert_equal (MethodType.new [@qdots], nil, @tfixnum), q15
22
+ q2 = @p.scan_str "#Q (., Integer) -> Integer"
23
+ assert_equal (MethodType.new [@qwild, @tinteger], nil, @tinteger), q2
24
+ q3 = @p.scan_str "#Q (Integer, ?.) -> Integer"
25
+ assert_equal (MethodType.new [@tinteger, @qwildopt], nil, @tinteger), q3
26
+ q4 = @p.scan_str "#Q (*.) -> Integer"
27
+ assert_equal (MethodType.new [@qwildvararg], nil, @tinteger), q4
28
+ q5 = @p.scan_str "#Q (. or Integer) -> Integer"
29
+ assert_equal (MethodType.new [UnionType.new(@qwild, @tinteger)], nil, @tinteger), q5
30
+ q6 = @p.scan_str "#Q (. x, Integer) -> Integer"
31
+ assert_equal (MethodType.new [@qwildx, @tinteger], nil, @tinteger), q6
32
+ q7 = @p.scan_str "#Q (Array<.>) -> Integer"
33
+ assert_equal (MethodType.new [GenericType.new(@tarray, @qwild)], nil, @tinteger), q7
34
+ # q8 = @p.scan_str "#Q (.<Integer>) -> Integer"
35
+ # assert_equal (MethodType.new [GenericType.new(@twild, @tinteger)], nil, @tinteger), q8
36
+ q9 = @p.scan_str "#Q ([Integer, .]) -> Integer"
37
+ assert_equal (MethodType.new [TupleType.new(@tinteger, @qwild)], nil, @tinteger), q9
38
+ q10 = @p.scan_str "#Q ([to_str: () -> .]) -> Integer"
39
+ assert_equal (MethodType.new [StructuralType.new(to_str: (MethodType.new [], nil, @qwild))], nil, @tinteger), q10
40
+ q11 = @p.scan_str "#Q ({a: Integer, b: .}) -> Integer"
41
+ assert_equal (MethodType.new [FiniteHashType.new({a: @tinteger, b: @qwild}, nil)], nil, @tinteger), q11
42
+ q12 = @p.scan_str "#Q (Integer, x: .) -> Integer"
43
+ assert_equal (MethodType.new [@tinteger, FiniteHashType.new({x: @qwild}, nil)], nil, @tinteger), q12
44
+ q13 = @p.scan_str "#Q (Integer, ..., Integer) -> Integer"
45
+ assert_equal (MethodType.new [@tinteger, @qdots, @tinteger], nil, @tinteger), q13
46
+ q14 = @p.scan_str "#Q (Integer, ...) -> Integer"
47
+ assert_equal (MethodType.new [@tinteger, @qdots], nil, @tinteger), q14
48
+ q15 = @p.scan_str "#Q (...) -> Integer"
49
+ assert_equal (MethodType.new [@qdots], nil, @tinteger), q15
50
50
  end
51
51
 
52
52
  def test_match
53
- t1 = @p.scan_str "(Fixnum, Fixnum) -> Fixnum"
54
- assert (@p.scan_str "#Q (Fixnum, Fixnum) -> Fixnum").match(t1)
53
+ t1 = @p.scan_str "(Integer, Integer) -> Integer"
54
+ assert (@p.scan_str "#Q (Integer, Integer) -> Integer").match(t1)
55
55
  assert (@p.scan_str "#Q (., .) -> .").match(t1)
56
- assert (@p.scan_str "#Q (..., Fixnum) -> Fixnum").match(t1)
57
- assert (@p.scan_str "#Q (Fixnum, ...) -> Fixnum").match(t1)
58
- assert (@p.scan_str "#Q (...) -> Fixnum").match(t1)
59
- assert (not (@p.scan_str "#Q (Fixnum, String) -> Fixnum").match(t1))
60
- assert (not (@p.scan_str "#Q (String, Fixnum) -> Fixnum").match(t1))
61
- assert (not (@p.scan_str "#Q (Fixnum, String) -> String").match(t1))
56
+ assert (@p.scan_str "#Q (..., Integer) -> Integer").match(t1)
57
+ assert (@p.scan_str "#Q (Integer, ...) -> Integer").match(t1)
58
+ assert (@p.scan_str "#Q (...) -> Integer").match(t1)
59
+ assert (not (@p.scan_str "#Q (Integer, String) -> Integer").match(t1))
60
+ assert (not (@p.scan_str "#Q (String, Integer) -> Integer").match(t1))
61
+ assert (not (@p.scan_str "#Q (Integer, String) -> String").match(t1))
62
62
  assert (not (@p.scan_str "#Q (..., String) -> String").match(t1))
63
63
  assert (not (@p.scan_str "#Q (String, ...) -> String").match(t1))
64
- t2 = @p.scan_str "(String or Fixnum) -> Fixnum"
65
- assert (@p.scan_str "#Q (String or Fixnum) -> Fixnum").match(t2)
66
- assert (@p.scan_str "#Q (String or .) -> Fixnum").match(t2)
67
- assert (@p.scan_str "#Q (. or Fixnum) -> Fixnum").match(t2)
68
- assert (@p.scan_str "#Q (Fixnum or String) -> Fixnum").match(t2)
69
- assert (@p.scan_str "#Q (Fixnum or .) -> Fixnum").match(t2)
70
- assert (@p.scan_str "#Q (. or String) -> Fixnum").match(t2)
71
- t3 = @p.scan_str "(Array<Fixnum>) -> Fixnum"
72
- assert (@p.scan_str "#Q (Array<Fixnum>) -> Fixnum").match(t3)
73
- assert (@p.scan_str "#Q (Array<.>) -> Fixnum").match(t3)
74
- t4 = @p.scan_str "([Fixnum, String]) -> Fixnum"
75
- assert (@p.scan_str "#Q ([Fixnum, String]) -> Fixnum").match(t4)
76
- assert (@p.scan_str "#Q ([Fixnum, .]) -> Fixnum").match(t4)
77
- assert (@p.scan_str "#Q ([., String]) -> Fixnum").match(t4)
78
- t5 = @p.scan_str "([to_str: () -> Fixnum]) -> Fixnum"
79
- assert (@p.scan_str "#Q ([to_str: () -> Fixnum]) -> Fixnum").match(t5)
80
- assert (@p.scan_str "#Q ([to_str: () -> .]) -> Fixnum").match(t5)
81
- t6 = @p.scan_str "(Fixnum, ?Fixnum) -> Fixnum"
82
- assert (@p.scan_str "#Q (Fixnum, ?Fixnum) -> Fixnum").match(t6)
83
- assert (@p.scan_str "#Q (Fixnum, ?.) -> Fixnum").match(t6)
84
- assert (@p.scan_str "#Q (Fixnum, .) -> Fixnum").match(t6)
85
- t7 = @p.scan_str "(*Fixnum) -> Fixnum"
86
- assert (@p.scan_str "#Q (*Fixnum) -> Fixnum").match(t7)
87
- assert (@p.scan_str "#Q (*.) -> Fixnum").match(t7)
88
- assert (@p.scan_str "#Q (.) -> Fixnum").match(t7)
89
- t8 = @p.scan_str "({a: Fixnum, b: String}) -> Fixnum"
90
- assert (@p.scan_str "#Q ({a: Fixnum, b: String}) -> Fixnum").match(t8)
91
- assert (@p.scan_str "#Q ({a: Fixnum, b: .}) -> Fixnum").match(t8)
92
- assert (@p.scan_str "#Q ({a: ., b: String}) -> Fixnum").match(t8)
93
- assert (@p.scan_str "#Q ({a: ., b: .}) -> Fixnum").match(t8)
94
- assert (@p.scan_str "#Q ({b: String, a: Fixnum}) -> Fixnum").match(t8)
95
- assert (@p.scan_str "#Q ({b: ., a: Fixnum}) -> Fixnum").match(t8)
96
- assert (@p.scan_str "#Q ({b: String, a: .}) -> Fixnum").match(t8)
97
- assert (@p.scan_str "#Q ({b: ., a: .}) -> Fixnum").match(t8)
98
- assert (@p.scan_str "#Q (.) -> Fixnum").match(t8)
99
- t9 = @p.scan_str "(Fixnum, x: String) -> Fixnum"
100
- assert (@p.scan_str "#Q (Fixnum, x: String) -> Fixnum").match(t9)
101
- assert (@p.scan_str "#Q (Fixnum, x: .) -> Fixnum").match(t9)
102
- assert (@p.scan_str "#Q (Fixnum, .) -> Fixnum").match(t9)
103
- t10 = @p.scan_str "(String x, Fixnum) -> Fixnum"
104
- assert (@p.scan_str "#Q (String x, Fixnum) -> Fixnum").match(t10)
105
- assert (@p.scan_str "#Q (. x, Fixnum) -> Fixnum").match(t10)
106
- assert (@p.scan_str "#Q (String, Fixnum) -> Fixnum").match(t10)
107
- assert (@p.scan_str "#Q (., Fixnum) -> Fixnum").match(t10)
108
- t11 = @p.scan_str "(Fixnum, x: String, **Float) -> Fixnum"
109
- assert (@p.scan_str "#Q (Fixnum, x: String, **Float) -> Fixnum").match(t11)
110
- assert (@p.scan_str "#Q (Fixnum, x: String, **.) -> Fixnum").match(t11)
64
+ t2 = @p.scan_str "(String or Integer) -> Integer"
65
+ assert (@p.scan_str "#Q (String or Integer) -> Integer").match(t2)
66
+ assert (@p.scan_str "#Q (String or .) -> Integer").match(t2)
67
+ assert (@p.scan_str "#Q (. or Integer) -> Integer").match(t2)
68
+ assert (@p.scan_str "#Q (Integer or String) -> Integer").match(t2)
69
+ assert (@p.scan_str "#Q (Integer or .) -> Integer").match(t2)
70
+ assert (@p.scan_str "#Q (. or String) -> Integer").match(t2)
71
+ t3 = @p.scan_str "(Array<Integer>) -> Integer"
72
+ assert (@p.scan_str "#Q (Array<Integer>) -> Integer").match(t3)
73
+ assert (@p.scan_str "#Q (Array<.>) -> Integer").match(t3)
74
+ t4 = @p.scan_str "([Integer, String]) -> Integer"
75
+ assert (@p.scan_str "#Q ([Integer, String]) -> Integer").match(t4)
76
+ assert (@p.scan_str "#Q ([Integer, .]) -> Integer").match(t4)
77
+ assert (@p.scan_str "#Q ([., String]) -> Integer").match(t4)
78
+ t5 = @p.scan_str "([to_str: () -> Integer]) -> Integer"
79
+ assert (@p.scan_str "#Q ([to_str: () -> Integer]) -> Integer").match(t5)
80
+ assert (@p.scan_str "#Q ([to_str: () -> .]) -> Integer").match(t5)
81
+ t6 = @p.scan_str "(Integer, ?Integer) -> Integer"
82
+ assert (@p.scan_str "#Q (Integer, ?Integer) -> Integer").match(t6)
83
+ assert (@p.scan_str "#Q (Integer, ?.) -> Integer").match(t6)
84
+ assert (@p.scan_str "#Q (Integer, .) -> Integer").match(t6)
85
+ t7 = @p.scan_str "(*Integer) -> Integer"
86
+ assert (@p.scan_str "#Q (*Integer) -> Integer").match(t7)
87
+ assert (@p.scan_str "#Q (*.) -> Integer").match(t7)
88
+ assert (@p.scan_str "#Q (.) -> Integer").match(t7)
89
+ t8 = @p.scan_str "({a: Integer, b: String}) -> Integer"
90
+ assert (@p.scan_str "#Q ({a: Integer, b: String}) -> Integer").match(t8)
91
+ assert (@p.scan_str "#Q ({a: Integer, b: .}) -> Integer").match(t8)
92
+ assert (@p.scan_str "#Q ({a: ., b: String}) -> Integer").match(t8)
93
+ assert (@p.scan_str "#Q ({a: ., b: .}) -> Integer").match(t8)
94
+ assert (@p.scan_str "#Q ({b: String, a: Integer}) -> Integer").match(t8)
95
+ assert (@p.scan_str "#Q ({b: ., a: Integer}) -> Integer").match(t8)
96
+ assert (@p.scan_str "#Q ({b: String, a: .}) -> Integer").match(t8)
97
+ assert (@p.scan_str "#Q ({b: ., a: .}) -> Integer").match(t8)
98
+ assert (@p.scan_str "#Q (.) -> Integer").match(t8)
99
+ t9 = @p.scan_str "(Integer, x: String) -> Integer"
100
+ assert (@p.scan_str "#Q (Integer, x: String) -> Integer").match(t9)
101
+ assert (@p.scan_str "#Q (Integer, x: .) -> Integer").match(t9)
102
+ assert (@p.scan_str "#Q (Integer, .) -> Integer").match(t9)
103
+ t10 = @p.scan_str "(String x, Integer) -> Integer"
104
+ assert (@p.scan_str "#Q (String x, Integer) -> Integer").match(t10)
105
+ assert (@p.scan_str "#Q (. x, Integer) -> Integer").match(t10)
106
+ assert (@p.scan_str "#Q (String, Integer) -> Integer").match(t10)
107
+ assert (@p.scan_str "#Q (., Integer) -> Integer").match(t10)
108
+ t11 = @p.scan_str "(Integer, x: String, **Float) -> Integer"
109
+ assert (@p.scan_str "#Q (Integer, x: String, **Float) -> Integer").match(t11)
110
+ assert (@p.scan_str "#Q (Integer, x: String, **.) -> Integer").match(t11)
111
111
  end
112
112
  end