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
@@ -3,6 +3,7 @@ $LOAD_PATH << File.dirname(__FILE__) + "/../lib"
3
3
  require 'rdl'
4
4
 
5
5
  class TestRDL < Minitest::Test
6
+ extend RDL::Annotate
6
7
 
7
8
  # Test wrapping with no types or contracts
8
9
  def test_wrap
@@ -61,7 +62,7 @@ class TestRDL < Minitest::Test
61
62
  def test_pre_contract
62
63
  pos = RDL::Contract::FlatContract.new("Positive") { |x| x > 0 }
63
64
  def m5(x) return x; end
64
- pre TestRDL, :m5, pos
65
+ RDL.pre TestRDL, :m5, pos
65
66
  assert_equal 3, m5(3)
66
67
  assert_raises(RDL::Contract::ContractError) { m5(-1) }
67
68
  end
@@ -69,7 +70,7 @@ class TestRDL < Minitest::Test
69
70
  def test_post_contract
70
71
  neg = RDL::Contract::FlatContract.new("Negative") { |x| x < 0 }
71
72
  def m6(x) return 3; end
72
- post TestRDL, :m6, neg
73
+ RDL.post TestRDL, :m6, neg
73
74
  assert_raises(RDL::Contract::ContractError) { m6(42) }
74
75
  end
75
76
 
@@ -77,8 +78,8 @@ class TestRDL < Minitest::Test
77
78
  pos = RDL::Contract::FlatContract.new("Positive") { |x| x > 0 }
78
79
  ppos = RDL::Contract::FlatContract.new("Positive") { |r, x| r > 0 }
79
80
  def m7(x) return x; end
80
- pre TestRDL, :m7, pos
81
- post TestRDL, :m7, ppos
81
+ RDL.pre TestRDL, :m7, pos
82
+ RDL.post TestRDL, :m7, ppos
82
83
  assert_equal 3, m7(3)
83
84
  end
84
85
 
@@ -87,15 +88,15 @@ class TestRDL < Minitest::Test
87
88
  five = RDL::Contract::FlatContract.new("Five") { |x| x == 5 }
88
89
  gt = RDL::Contract::FlatContract.new("Greater Than 3") { |x| x > 3 }
89
90
  def m8(x) return x; end
90
- pre TestRDL, :m8, pos
91
- pre TestRDL, :m8, gt
91
+ RDL.pre TestRDL, :m8, pos
92
+ RDL.pre TestRDL, :m8, gt
92
93
  assert_equal 5, m8(5)
93
94
  assert_equal 4, m8(4)
94
95
  assert_raises(RDL::Contract::ContractError) { m8 3 }
95
96
  def m9(x) return x; end
96
- pre TestRDL, :m9, pos
97
- pre TestRDL, :m9, gt
98
- pre TestRDL, :m9, five
97
+ RDL.pre TestRDL, :m9, pos
98
+ RDL.pre TestRDL, :m9, gt
99
+ RDL.pre TestRDL, :m9, five
99
100
  assert_equal 5, m9(5)
100
101
  assert_raises(RDL::Contract::ContractError) { m9 4 }
101
102
  assert_raises(RDL::Contract::ContractError) { m9 3 }
@@ -104,15 +105,15 @@ class TestRDL < Minitest::Test
104
105
  pfive = RDL::Contract::FlatContract.new("Five") { |r, x| r == 5 }
105
106
  pgt = RDL::Contract::FlatContract.new("Greater Than 3") { |r, x| r > 3 }
106
107
  def m10(x) return x; end
107
- post TestRDL, :m10, ppos
108
- post TestRDL, :m10, pgt
108
+ RDL.post TestRDL, :m10, ppos
109
+ RDL.post TestRDL, :m10, pgt
109
110
  assert_equal 5, m10(5)
110
111
  assert_equal 4, m10(4)
111
112
  assert_raises(RDL::Contract::ContractError) { m10 3 }
112
113
  def m11(x) return x; end
113
- post TestRDL, :m11, ppos
114
- post TestRDL, :m11, pgt
115
- post TestRDL, :m11, pfive
114
+ RDL.post TestRDL, :m11, ppos
115
+ RDL.post TestRDL, :m11, pgt
116
+ RDL.post TestRDL, :m11, pfive
116
117
  assert_equal 5, m11(5)
117
118
  assert_raises(RDL::Contract::ContractError) { m11 4 }
118
119
  assert_raises(RDL::Contract::ContractError) { m11 3 }
@@ -120,13 +121,13 @@ class TestRDL < Minitest::Test
120
121
 
121
122
  def test_deferred_wrap
122
123
  pos = RDL::Contract::FlatContract.new("Positive") { |x| x > 0 }
123
- pre TestRDL, :m12, pos
124
+ RDL.pre TestRDL, :m12, pos
124
125
  def m12(x) return x; end
125
126
  assert_equal 3, m12(3)
126
127
  assert_raises(RDL::Contract::ContractError) { m12(-1) }
127
128
 
128
129
  ppos = RDL::Contract::FlatContract.new("Positive") { |r, x| r > 0 }
129
- post TestRDL, :m13, ppos
130
+ RDL.post TestRDL, :m13, ppos
130
131
  def m13(x) return x; end
131
132
  assert_equal 3, m13(3)
132
133
  assert_raises(RDL::Contract::ContractError) { m13(-1) }
@@ -218,42 +219,43 @@ RUBY
218
219
  end
219
220
 
220
221
  def test_type_params
221
- self.class.class_eval "class TP1; type_params [:t], :all? end"
222
+ self.class.class_eval "class TP1; extend RDL::Annotate; type_params [:t], :all? end"
222
223
  assert_equal [[:t], [:~], :all?], RDL::Wrap.get_type_params(TestRDL::TP1)
223
- self.class.class_eval "class TP2; type_params([:t], nil) { |t| true } end"
224
+ self.class.class_eval "class TP2; extend RDL::Annotate; type_params([:t], nil) { |t| true } end"
224
225
  tp2 = RDL::Wrap.get_type_params(TestRDL::TP2)
225
226
  assert_equal [:t], tp2[0]
226
227
  assert_equal [:~], tp2[1]
227
- assert_raises(RuntimeError) { self.class.class_eval "class TP1; type_params [:t], :all? end" }
228
- self.class.class_eval "class TP3; type_params [:t, :u], :all? end"
228
+ assert_raises(RuntimeError) { self.class.class_eval "class TP1; extend RDL::Annotate; type_params [:t], :all? end" }
229
+ self.class.class_eval "class TP3; extend RDL::Annotate; type_params [:t, :u], :all? end"
229
230
  assert_equal [[:t, :u], [:~, :~], :all?], RDL::Wrap.get_type_params(TestRDL::TP3)
230
231
 
231
- self.class.class_eval "class TP4; type_params [:t, :u, :v], :all?, variance: [:+, :-, :~] end"
232
+ self.class.class_eval "class TP4; extend RDL::Annotate; type_params [:t, :u, :v], :all?, variance: [:+, :-, :~] end"
232
233
  assert_equal [[:t, :u, :v], [:+, :-, :~], :all?], RDL::Wrap.get_type_params(TestRDL::TP4)
233
- assert_raises(RuntimeError) { self.class.class_eval "class TP5; type_params([], :all?) { true } end" }
234
- assert_raises(RuntimeError) { self.class.class_eval "class TP6; type_params [:t, :u], :all?, variance: [:+] end" }
235
- assert_raises(RuntimeError) { self.class.class_eval "class TP7; type_params [:t, :u], :all?, variance: [:a, :b] end" }
236
- assert_raises(RuntimeError) { self.class.class_eval "class TP8; type_params([:t], :all?) { |t| true } end" }
237
- assert_raises(RuntimeError) { self.class.class_eval "class TP8; type_params [:t], 42 end" }
234
+ assert_raises(RuntimeError) { self.class.class_eval "class TP5; extend RDL::Annotate; type_params([], :all?) { true } end" }
235
+ assert_raises(RuntimeError) { self.class.class_eval "class TP6; extend RDL::Annotate; type_params [:t, :u], :all?, variance: [:+] end" }
236
+ assert_raises(RuntimeError) { self.class.class_eval "class TP7; extend RDL::Annotate; type_params [:t, :u], :all?, variance: [:a, :b] end" }
237
+ assert_raises(RuntimeError) { self.class.class_eval "class TP8; extend RDL::Annotate; type_params([:t], :all?) { |t| true } end" }
238
+ assert_raises(RuntimeError) { self.class.class_eval "class TP8; extend RDL::Annotate; type_params [:t], 42 end" }
238
239
  end
239
240
 
240
241
  def test_wrap_new
241
242
  self.class.class_eval "class B; def initialize(x); @x = x end; def get(); return @x end end"
242
- pre("TestRDL::B", "self.new") { |x| x > 0 }
243
+ RDL.pre("TestRDL::B", "self.new") { |x| x > 0 }
243
244
  assert_equal 3, TestRDL::B.new(3).get
244
245
  assert_raises(RDL::Contract::ContractError) { TestRDL::B.new(-3) }
245
246
 
246
- self.class.class_eval "class C; pre { |x| x > 0 }; def initialize(x); @x = x end; def get(); return @x end end"
247
+ self.class.class_eval "class C; extend RDL::Annotate; pre { |x| x > 0 }; def initialize(x); @x = x end; def get(); return @x end end"
247
248
  assert_equal 3, TestRDL::C.new(3).get
248
249
  assert_raises(RDL::Contract::ContractError) { TestRDL::C.new(-3) }
249
250
 
250
251
  self.class.class_eval "class D; def get(); return @x end end"
251
- pre("TestRDL::D", "self.new") { |x| x > 0 }
252
+ RDL.pre("TestRDL::D", "self.new") { |x| x > 0 }
252
253
  self.class.class_eval "class D; def initialize(x); @x = x end end"
253
254
  assert_equal 3, TestRDL::D.new(3).get
254
255
  assert_raises(RDL::Contract::ContractError) { TestRDL::D.new(-3) }
255
256
 
256
257
  skip "Can't defer contracts on new yet"
258
+ RDL.
257
259
  pre("TestRDL::E", "self.new") { |x| x > 0 }
258
260
  self.class.class_eval "class E; def initialize(x); @x = x end end"
259
261
  assert (TestRDL::E.new(3))
@@ -263,13 +265,13 @@ RUBY
263
265
  def test_class_method
264
266
  pos = RDL::Contract::FlatContract.new("Positive") { |x| x > 0 }
265
267
  self.class.class_eval { def self.cm1(x) return x; end }
266
- pre TestRDL, "self.cm1", pos
268
+ RDL.pre TestRDL, "self.cm1", pos
267
269
  assert_equal 3, TestRDL.cm1(3)
268
270
  assert_raises(RDL::Contract::ContractError) { TestRDL.cm1(-1) }
269
271
 
270
- assert_raises(RuntimeError) { pre TestRDL, "TestRDL.cm1", pos }
272
+ assert_raises(RuntimeError) { RDL.pre TestRDL, "TestRDL.cm1", pos }
271
273
 
272
- pre TestRDL, "self.cm2", pos
274
+ RDL.pre TestRDL, "self.cm2", pos
273
275
  self.class.class_eval { def self.cm2(x) return x; end }
274
276
  assert_equal 3, TestRDL.cm2(3)
275
277
  assert_raises(RDL::Contract::ContractError) { TestRDL.cm2(-1) }
@@ -283,11 +285,11 @@ RUBY
283
285
  end
284
286
 
285
287
  def test_cast
286
- obj1 = 3.type_cast($__rdl_nil_type, force: true)
287
- assert ($__rdl_nil_type.member? obj1)
288
- obj2 = 3.type_cast('nil', force: true)
289
- assert ($__rdl_nil_type.member? obj2)
290
- assert_raises(RuntimeError) { 3.type_cast($__rdl_nil_type) }
288
+ obj1 = RDL.type_cast(3, RDL::Globals.types[:nil], force: true)
289
+ assert (RDL::Globals.types[:nil].member? obj1)
290
+ obj2 = RDL.type_cast(3, 'nil', force: true)
291
+ assert (RDL::Globals.types[:nil].member? obj2)
292
+ assert_raises(RuntimeError) { RDL.type_cast(3, RDL::Globals.types[:nil]) }
291
293
  end
292
294
 
293
295
  def test_pre_post_self
@@ -300,34 +302,34 @@ RUBY
300
302
  end
301
303
 
302
304
  def test_nowrap
303
- pre(TestRDL, :nwrap1) { true }
305
+ RDL.pre(TestRDL, :nwrap1) { true }
304
306
  def nwrap1(x) return x; end
305
307
  assert(RDL::Wrap.wrapped?(TestRDL, :nwrap1))
306
- pre(TestRDL, :nwrap2, wrap: false) { true }
308
+ RDL.pre(TestRDL, :nwrap2, wrap: false) { true }
307
309
  def nwrap2(x) return x; end
308
310
  assert(not(RDL::Wrap.wrapped?(TestRDL, :nwrap2)))
309
311
 
310
- post(TestRDL, :nwrap3) { true }
312
+ RDL.post(TestRDL, :nwrap3) { true }
311
313
  def nwrap3(x) return x; end
312
314
  assert(RDL::Wrap.wrapped?(TestRDL, :nwrap3))
313
- post(TestRDL, :nwrap4, wrap: false) { true }
315
+ RDL.post(TestRDL, :nwrap4, wrap: false) { true }
314
316
  def nwrap4(x) return x; end
315
317
  assert(not(RDL::Wrap.wrapped?(TestRDL, :nwrap4)))
316
318
 
317
- type TestRDL, :nwrap5, "(Fixnum) -> Fixnum"
319
+ RDL.type TestRDL, :nwrap5, "(Integer) -> Integer"
318
320
  def nwrap5(x) return x; end
319
321
  assert(RDL::Wrap.wrapped?(TestRDL, :nwrap5))
320
- type TestRDL, :nwrap6, "(Fixnum) -> Fixnum", wrap: false
322
+ RDL.type TestRDL, :nwrap6, "(Integer) -> Integer", wrap: false
321
323
  def nwrap6(x) return x; end
322
324
  assert(not(RDL::Wrap.wrapped?(TestRDL, :nwrap6)))
323
325
 
324
326
  self.class.class_eval {
325
- type "(Fixnum) -> Fixnum"
327
+ type "(Integer) -> Integer"
326
328
  def nwrap7(x) return x; end
327
329
  }
328
330
  assert(RDL::Wrap.wrapped?(TestRDL, :nwrap7))
329
331
  self.class.class_eval {
330
- type "(Fixnum) -> Fixnum", wrap: false
332
+ type "(Integer) -> Integer", wrap: false
331
333
  def nwrap8(x) return x; end
332
334
  }
333
335
  assert(not(RDL::Wrap.wrapped?(TestRDL, :nwrap8)))
@@ -335,18 +337,18 @@ RUBY
335
337
 
336
338
  def test_var_type
337
339
  self.class.class_eval {
338
- var_type :@foo, "Fixnum"
340
+ var_type :@foo, "Integer"
339
341
  var_type :@@foo, "String"
340
342
  var_type :$foo, "Symbol"
341
343
  }
342
- assert_equal $__rdl_fixnum_type, $__rdl_info.get(TestRDL, :@foo, :type)
343
- assert_equal $__rdl_string_type, $__rdl_info.get(TestRDL, :@@foo, :type)
344
- assert_equal $__rdl_symbol_type, $__rdl_info.get(RDL::Util::GLOBAL_NAME, :$foo, :type)
344
+ assert_equal RDL::Globals.types[:integer], RDL::Globals.info.get(TestRDL, :@foo, :type)
345
+ assert_equal RDL::Globals.types[:string], RDL::Globals.info.get(TestRDL, :@@foo, :type)
346
+ assert_equal RDL::Globals.types[:symbol], RDL::Globals.info.get(RDL::Util::GLOBAL_NAME, :$foo, :type)
345
347
  assert_raises(RuntimeError) {
346
348
  self.class.class_eval { var_type :@foo, "String" }
347
349
  }
348
350
  assert_raises(RuntimeError) {
349
- self.class.class_eval { var_type :@@foo, "Fixnum" }
351
+ self.class.class_eval { var_type :@@foo, "Integer" }
350
352
  }
351
353
  assert_raises(RuntimeError) {
352
354
  self.class.class_eval { var_type :Foo, "String" }
@@ -358,7 +360,7 @@ RUBY
358
360
 
359
361
  def test_inconsistent
360
362
  self.class.class_eval {
361
- type "(Fixnum) -> Fixnum"
363
+ type "(Integer) -> Integer"
362
364
  pre { |x| true }
363
365
  def inconsistent1(y) return y; end
364
366
  }
@@ -370,8 +372,41 @@ RUBY
370
372
  def remove1() return 42; end
371
373
  }
372
374
  assert_raises(RDL::Type::TypeError) { remove1 }
373
- rdl_remove_type(self.class, :remove1)
375
+ RDL.remove_type(self.class, :remove1)
374
376
  assert_equal 42, remove1 # shouldn't raise type error with contract removed
375
377
  end
376
378
 
379
+ def test_version
380
+ RDL.pre("TestRDL::TestVersion", "m1", version: Gem.ruby_version.to_s) { true }
381
+ assert (RDL::Globals.info.has? "TestRDL::TestVersion", "m1", :pre)
382
+ RDL.pre("TestRDL::TestVersion", "m2", version: Gem.ruby_version.bump.to_s) { true }
383
+ assert !(RDL::Globals.info.has? "TestRDL::TestVersion", "m2", :pre)
384
+ RDL.post("TestRDL::TestVersion", "m3", version: Gem.ruby_version.to_s) { true }
385
+ assert (RDL::Globals.info.has? "TestRDL::TestVersion", "m3", :post)
386
+ RDL.
387
+ pre("TestRDL::TestVersion", "m4", version: Gem.ruby_version.bump.to_s) { true }
388
+ assert !(RDL::Globals.info.has? "TestRDL::TestVersion", "m4", :post)
389
+ end
390
+
391
+ class TestRDLAnnotate
392
+ extend RDL::RDLAnnotate
393
+
394
+ rdl_pre { |x| x > 0 }
395
+ def m1(x) return x; end
396
+
397
+ rdl_post { |x| x < 0 }
398
+ def m2(x) return 3; end
399
+
400
+ rdl_type '(Integer) -> Integer'
401
+ def m3(x) return x; end
402
+
403
+ end
404
+
405
+ def test_pre_rdl_annotate_contract
406
+ assert_equal 3, TestRDLAnnotate.new.m1(3)
407
+ assert_raises(RDL::Contract::ContractError) { TestRDLAnnotate.new.m1(-1) }
408
+ assert_raises(RDL::Contract::ContractError) { TestRDLAnnotate.new.m2(42) }
409
+ assert_raises(RDL::Type::TypeError) { TestRDLAnnotate.new.m3('one') }
410
+ end
411
+
377
412
  end
@@ -3,21 +3,23 @@ $LOAD_PATH << File.dirname(__FILE__) + "/../lib"
3
3
  require 'rdl'
4
4
 
5
5
  class TestRDLType < Minitest::Test
6
+ extend RDL::Annotate
7
+
6
8
  def test_single_type_contract
7
9
  def m1(x) return x; end
8
- type TestRDLType, :m1, "(Fixnum) -> Fixnum"
10
+ RDL.type TestRDLType, :m1, "(Integer) -> Integer"
9
11
  assert_equal 5, m1(5)
10
12
  assert_raises(RDL::Type::TypeError) { m1("foo") }
11
13
 
12
14
  self.class.class_eval {
13
- type :m2, "(Fixnum) -> Fixnum"
15
+ type :m2, "(Integer) -> Integer"
14
16
  def m2(x) return x; end
15
17
  }
16
18
  assert_equal 5, m2(5)
17
19
  assert_raises(RDL::Type::TypeError) { m2("foo") }
18
20
 
19
21
  self.class.class_eval {
20
- type "(Fixnum) -> Fixnum"
22
+ type "(Integer) -> Integer"
21
23
  def m3(x) return x; end
22
24
  }
23
25
  assert_equal 5, m3(5)
@@ -26,7 +28,7 @@ class TestRDLType < Minitest::Test
26
28
 
27
29
  def test_intersection_type_contract
28
30
  self.class.class_eval {
29
- type "(Fixnum) -> Fixnum"
31
+ type "(Integer) -> Integer"
30
32
  type "(String) -> String"
31
33
  def m4(x) return x; end
32
34
  }
@@ -35,7 +37,7 @@ class TestRDLType < Minitest::Test
35
37
  assert_raises(RDL::Type::TypeError) { m4(:foo) }
36
38
 
37
39
  self.class.class_eval {
38
- type "(Fixnum) -> Fixnum"
40
+ type "(Integer) -> Integer"
39
41
  type "(String) -> String"
40
42
  def m5(x) return 42; end
41
43
  }
@@ -43,8 +45,8 @@ class TestRDLType < Minitest::Test
43
45
  assert_raises(RDL::Type::TypeError) { m5("foo") }
44
46
 
45
47
  self.class.class_eval {
46
- type "(Fixnum) -> Fixnum"
47
- type "(Fixnum) -> String"
48
+ type "(Integer) -> Integer"
49
+ type "(Integer) -> String"
48
50
  def m6(x) if x > 10 then :oops elsif x > 5 then x else "small" end end
49
51
  }
50
52
  assert_equal 8, m6(8)
@@ -54,7 +56,7 @@ class TestRDLType < Minitest::Test
54
56
 
55
57
  def test_fixnum_type_contract
56
58
  self.class.class_eval {
57
- type "(0) -> Fixnum"
59
+ type "(0) -> Integer"
58
60
  def m7(x) return x; end
59
61
  }
60
62
  assert_equal 0, m7(0)
@@ -63,9 +65,24 @@ class TestRDLType < Minitest::Test
63
65
 
64
66
  def test_wrap_new_inherited
65
67
  self.class.class_eval "class NI_A; def initialize(x); @x = x; end; end; class NI_B < NI_A; end"
66
- type "TestRDLType::NI_A", "self.new", "(Fixnum) -> TestRDLType::NI_A"
68
+ RDL.type "TestRDLType::NI_A", "self.new", "(Integer) -> TestRDLType::NI_A"
67
69
  assert (TestRDLType::NI_B.new(3))
68
70
  assert_raises(RDL::Type::TypeError) { TestRDLType::NI_B.new("3") }
69
71
  end
70
72
 
73
+ def test_version
74
+ RDL.type "TestRDLType::TestVersion", "m1", "() -> nil", version: Gem.ruby_version.to_s
75
+ assert (RDL::Globals.info.has? "TestRDLType::TestVersion", "m1", :type)
76
+ RDL.type "TestRDLType::TestVersion", "m2", "() -> nil", version: Gem.ruby_version.bump.to_s
77
+ assert !(RDL::Globals.info.has? "TestRDLType::TestVersion", "m2", :type)
78
+ end
79
+
80
+ def test_wrap_subclass_method
81
+ self.class.class_eval "class NI_C; def foo; :A; end; end"
82
+ self.class.class_eval "class NI_D < NI_C; def foo; :B; end; end"
83
+ RDL.type 'TestRDLType::NI_C', :foo, '() -> :A'
84
+ RDL.type 'TestRDLType::NI_D', :foo, '() -> :A'
85
+ assert TestRDLType::NI_C.new.foo
86
+ assert_raises(RDL::Type::TypeError) { TestRDLType::NI_D.new.foo}
87
+ end
71
88
  end
@@ -5,16 +5,17 @@ require 'rdl'
5
5
  class TestTypeContract < Minitest::Test
6
6
  include RDL::Type
7
7
  include RDL::Contract
8
+ extend RDL::Annotate
8
9
 
9
10
  def setup
10
11
  @p = Parser.new
11
12
  end
12
13
 
13
14
  def test_flat
14
- cnil = $__rdl_nil_type.to_contract
15
+ cnil = RDL::Globals.types[:nil].to_contract
15
16
  assert (cnil.check self, nil)
16
17
  assert_raises(TypeError) { cnil.check self, true }
17
- tfixnum = NominalType.new :Fixnum
18
+ tfixnum = NominalType.new :Integer
18
19
  cfixnum = tfixnum.to_contract
19
20
  assert (cfixnum.check self, 42)
20
21
  assert (cfixnum.check self, nil)
@@ -29,7 +30,7 @@ class TestTypeContract < Minitest::Test
29
30
  p1b = t1.to_contract.wrap(self) { |x| 42 }
30
31
  assert_raises(TypeError) { p1b.call(nil) }
31
32
 
32
- t2 = @p.scan_str "(Fixnum, Fixnum) -> Fixnum"
33
+ t2 = @p.scan_str "(Integer, Integer) -> Integer"
33
34
  p2 = t2.to_contract.wrap(self) { |x, y| x }
34
35
  assert_equal 42, p2.call(42, 43)
35
36
  assert_equal 42, p2.call(42, nil)
@@ -43,14 +44,14 @@ class TestTypeContract < Minitest::Test
43
44
  assert_nil p3.call
44
45
  assert_raises(TypeError) { p3.call(42) }
45
46
 
46
- t4 = @p.scan_str "(Fixnum, ?Fixnum) -> Fixnum"
47
+ t4 = @p.scan_str "(Integer, ?Integer) -> Integer"
47
48
  p4 = t4.to_contract.wrap(self) { |x| x }
48
49
  assert_equal 42, p4.call(42)
49
50
  assert_equal 42, p4.call(42, 43)
50
51
  assert_raises(TypeError) { p4.call(42, 43, 44) }
51
52
  assert_raises(TypeError) { p4.call }
52
53
 
53
- t5 = @p.scan_str "(Fixnum, *Fixnum) -> Fixnum"
54
+ t5 = @p.scan_str "(Integer, *Integer) -> Integer"
54
55
  p5 = t5.to_contract.wrap(self) { |x| x }
55
56
  assert_equal 42, p5.call(42)
56
57
  assert_equal 42, p5.call(42, 43)
@@ -62,7 +63,7 @@ class TestTypeContract < Minitest::Test
62
63
  assert_raises(TypeError) { p5.call(42, 43, "44") }
63
64
  assert_raises(TypeError) { p5.call(42, 43, 44, "45") }
64
65
 
65
- t6 = @p.scan_str "(Fixnum, ?Fixnum, ?Fixnum, *Fixnum) -> Fixnum"
66
+ t6 = @p.scan_str "(Integer, ?Integer, ?Integer, *Integer) -> Integer"
66
67
  p6 = t6.to_contract.wrap(self) { |x| x }
67
68
  assert_equal 42, p6.call(42)
68
69
  assert_equal 42, p6.call(42, 43)
@@ -76,7 +77,7 @@ class TestTypeContract < Minitest::Test
76
77
  assert_raises(TypeError) { p6.call(42, 43, 44, "45") }
77
78
  assert_raises(TypeError) { p6.call(42, 43, 44, 45, "46") }
78
79
 
79
- t7 = @p.scan_str "(?Fixnum) -> nil"
80
+ t7 = @p.scan_str "(?Integer) -> nil"
80
81
  p7 = t7.to_contract.wrap(self) { nil }
81
82
  assert_nil p7.call
82
83
  assert_nil p7.call(42)
@@ -84,7 +85,7 @@ class TestTypeContract < Minitest::Test
84
85
  assert_raises(TypeError) { p7.call(42, 43) }
85
86
  assert_raises(TypeError) { p7.call(42, 43, 44) }
86
87
 
87
- t8 = @p.scan_str "(*Fixnum) -> nil"
88
+ t8 = @p.scan_str "(*Integer) -> nil"
88
89
  p8 = t8.to_contract.wrap(self) { nil }
89
90
  assert_nil p8.call
90
91
  assert_nil p8.call(42)
@@ -94,26 +95,26 @@ class TestTypeContract < Minitest::Test
94
95
  assert_raises(TypeError) { p8.call(42, "43") }
95
96
  assert_raises(TypeError) { p8.call(42, 43, "44") }
96
97
 
97
- t9 = @p.scan_str "(Fixnum arg1, ?Fixnum arg2) -> Fixnum"
98
+ t9 = @p.scan_str "(Integer arg1, ?Integer arg2) -> Integer"
98
99
  p9 = t9.to_contract.wrap(self) { |x| x }
99
100
  assert_equal 42, p9.call(42)
100
101
  assert_equal 42, p9.call(42, 43)
101
102
  assert_raises(TypeError) { p9.call(42, 43, 44) }
102
103
  assert_raises(TypeError) { p9.call }
103
104
 
104
- t10 = @p.scan_str "(?Fixnum, String) -> Fixnum"
105
+ t10 = @p.scan_str "(?Integer, String) -> Integer"
105
106
  p10 = t10.to_contract.wrap(self) { |*args| 42 }
106
107
  assert_equal 42, p10.call("44")
107
108
  assert_equal 42, p10.call(43, "44")
108
109
  assert_raises(TypeError) { p10.call() }
109
110
  assert_raises(TypeError) { p10.call(43, "44", 45) }
110
111
 
111
- t11 = @p.scan_str "(Fixnum x {{ x > 42 }}) -> Fixnum"
112
+ t11 = @p.scan_str "(Integer x {{ x > 42 }}) -> Integer"
112
113
  p11 = t11.to_contract.wrap(self) { |x| x }
113
114
  assert_equal 43, p11.call(43)
114
115
  assert_raises(TypeError) { p11.call(42) }
115
116
 
116
- t12 = @p.scan_str "(Fixnum x {{ x>10 }}, Fixnum y {{ y > x }}) -> Fixnum z {{z > (x+y) }}"
117
+ t12 = @p.scan_str "(Integer x {{ x>10 }}, Integer y {{ y > x }}) -> Integer z {{z > (x+y) }}"
117
118
  p12 = t12.to_contract.wrap(self) { |x,y| x+y+1 }
118
119
  assert_equal 30, p12.call(14, 15)
119
120
  assert_equal 50, p12.call(24, 25)
@@ -124,7 +125,7 @@ class TestTypeContract < Minitest::Test
124
125
  assert_raises(TypeError) { p12b.call(11, 10) }
125
126
  assert_raises(TypeError) { p12b.call(9, 10) }
126
127
 
127
- t13 = @p.scan_str "(Fixnum, {(Fixnum x {{x>10}}) -> Fixnum}) -> Float"
128
+ t13 = @p.scan_str "(Integer, {(Integer x {{x>10}}) -> Integer}) -> Float"
128
129
  p13 = t13.to_higher_contract(self) { |x,y| x+y.call(11)+0.5 }
129
130
  assert_equal 53.5, p13.call(42, Proc.new { |x| x })
130
131
  assert_raises(TypeError) { p13.call(42.5, Proc.new { |x| x} ) }
@@ -136,7 +137,7 @@ class TestTypeContract < Minitest::Test
136
137
  p13d = t13.to_higher_contract(self) { |x,y| x+y.call(42) }
137
138
  assert_raises(TypeError) { p13d.call(42, Proc.new { |x| x } ) }
138
139
 
139
- t14 = @p.scan_str "(Fixnum, Fixnum) -> {(Fixnum) -> Fixnum}"
140
+ t14 = @p.scan_str "(Integer, Integer) -> {(Integer) -> Integer}"
140
141
  p14 = t14.to_higher_contract(self) { |x,y| Proc.new {|z| x+y+z} }
141
142
  assert_raises(TypeError) { p14.call(42.5, 42) }
142
143
  p14b = p14.call(42,42)
@@ -157,16 +158,16 @@ class TestTypeContract < Minitest::Test
157
158
  assert_raises(TypeError) { block_contract_test4(40.5) }
158
159
  assert_raises(TypeError) { block_contract_test4(42) {|x| x+1.5} }
159
160
 
160
- t15 = @p.scan_str "(Fixnum x {{x>y}}, Fixnum y) -> Fixnum"
161
+ t15 = @p.scan_str "(Integer x {{x>y}}, Integer y) -> Integer"
161
162
  p15 = t15.to_contract.wrap(self) { |x, y| x+y }
162
163
  assert_equal 21, p15.call(11, 10)
163
164
  assert_raises(TypeError) { p15.call(10, 11) }
164
165
 
165
- t16 = @p.scan_str "(Fixnum x {{x > undefvar}}, Fixnum) -> Fixnum"
166
+ t16 = @p.scan_str "(Integer x {{x > undefvar}}, Integer) -> Integer"
166
167
  p16 = t16.to_contract.wrap(self) { |x,y| x }
167
168
  assert_raises(NameError) { p16.call(10,10) }
168
169
 
169
- t17 = @p.scan_str "(Fixnum, *String, Fixnum) -> Fixnum"
170
+ t17 = @p.scan_str "(Integer, *String, Integer) -> Integer"
170
171
  p17 = t17.to_contract.wrap(self) { |x| x }
171
172
  assert_equal 42, p17.call(42, 43)
172
173
  assert_equal 42, p17.call(42, 'foo', 43)
@@ -177,7 +178,7 @@ class TestTypeContract < Minitest::Test
177
178
  assert_raises(TypeError) { p17.call(42, '43') }
178
179
  assert_raises(TypeError) { p17.call(42, 43, '44') }
179
180
 
180
- t18 = @p.scan_str "(Fixnum, ?{(Fixnum) -> Fixnum}) -> Fixnum"
181
+ t18 = @p.scan_str "(Integer, ?{(Integer) -> Integer}) -> Integer"
181
182
  p18 = t18.to_higher_contract(self) { |x,p=nil| if p then p.call(x) else x end }
182
183
  assert_equal 42, p18.call(41, Proc.new {|x| x+1})
183
184
  assert_equal 42, p18.call(42)
@@ -190,29 +191,29 @@ class TestTypeContract < Minitest::Test
190
191
 
191
192
  end
192
193
 
193
- type '(Fixnum) { (Fixnum) -> Fixnum } -> Fixnum'
194
+ type '(Integer) { (Integer) -> Integer } -> Integer'
194
195
  def block_contract_test1(x)
195
196
  x+yield(5)
196
197
  end
197
198
 
198
- type '(Fixnum) { (Fixnum) -> Fixnum } -> Float'
199
+ type '(Integer) { (Integer) -> Integer } -> Float'
199
200
  def block_contract_test2(x)
200
201
  x+yield(4.5)
201
202
  end
202
203
 
203
- type '(Fixnum) -> Fixnum'
204
+ type '(Integer) -> Integer'
204
205
  def block_contract_test3(x)
205
206
  42
206
207
  end
207
208
 
208
- type '(Fixnum) ?{(Fixnum) -> Fixnum} -> Fixnum'
209
+ type '(Integer) ?{(Integer) -> Integer} -> Integer'
209
210
  def block_contract_test4(x,&blk)
210
211
  return yield(x) if blk
211
212
  return x
212
213
  end
213
214
 
214
215
  def test_proc_names
215
- t1 = @p.scan_str "(x: Fixnum) -> Fixnum"
216
+ t1 = @p.scan_str "(x: Integer) -> Integer"
216
217
  p1 = t1.to_contract.wrap(self) { |x:| x }
217
218
  assert_equal 42, p1.call(x: 42)
218
219
  assert_raises(TypeError) { p1.call(x: "42") }
@@ -221,7 +222,7 @@ class TestTypeContract < Minitest::Test
221
222
  assert_raises(TypeError) { p1.call(y: 42) }
222
223
  assert_raises(TypeError) { p1.call(42) }
223
224
  assert_raises(TypeError) { p1.call(42, x: 42) }
224
- t2 = @p.scan_str "(x: Fixnum, y: String) -> Fixnum"
225
+ t2 = @p.scan_str "(x: Integer, y: String) -> Integer"
225
226
  p2 = t2.to_contract.wrap(self) { |x:,y:| x }
226
227
  assert_equal 42, p2.call(x: 42, y: "33")
227
228
  assert_raises(TypeError) { p2.call() }
@@ -230,7 +231,7 @@ class TestTypeContract < Minitest::Test
230
231
  assert_raises(TypeError) { p2.call(42, "43") }
231
232
  assert_raises(TypeError) { p2.call(42, x: 42, y: "33") }
232
233
  assert_raises(TypeError) { p2.call(x: 42, y: "33", z: 44) }
233
- t3 = @p.scan_str "(Fixnum, y: String) -> Fixnum"
234
+ t3 = @p.scan_str "(Integer, y: String) -> Integer"
234
235
  p3 = t3.to_contract.wrap(self) { |x, y:| x }
235
236
  assert_equal 42, p3.call(42, y:"43")
236
237
  assert_raises(TypeError) { p3.call(42) }
@@ -238,7 +239,7 @@ class TestTypeContract < Minitest::Test
238
239
  assert_raises(TypeError) { p3.call() }
239
240
  assert_raises(TypeError) { p3.call(42, 43, y: 44) }
240
241
  assert_raises(TypeError) { p3.call(42, y: 43, z: 44) }
241
- t4 = @p.scan_str "(Fixnum, x: Fixnum, y: String) -> Fixnum"
242
+ t4 = @p.scan_str "(Integer, x: Integer, y: String) -> Integer"
242
243
  p4 = t4.to_contract.wrap(self) { |a, x:, y:| a }
243
244
  assert_equal 42, p4.call(42, x: 43, y: "44")
244
245
  assert_raises(TypeError) { p4.call(42, x: 43) }
@@ -246,7 +247,7 @@ class TestTypeContract < Minitest::Test
246
247
  assert_raises(TypeError) { p4.call() }
247
248
  assert_raises(TypeError) { p4.call(42, 43, x: 44, y: "45") }
248
249
  assert_raises(TypeError) { p4.call(42, x: 43, y: "44", z: 45) }
249
- t5 = @p.scan_str "(x: Fixnum, y: ?String) -> Fixnum"
250
+ t5 = @p.scan_str "(x: Integer, y: ?String) -> Integer"
250
251
  p5 = t5.to_contract.wrap(self) { |x:, **ys| x }
251
252
  assert_equal 42, p5.call(x: 42, y: "43")
252
253
  assert_equal 42, p5.call(x: 42)
@@ -255,7 +256,7 @@ class TestTypeContract < Minitest::Test
255
256
  assert_raises(TypeError) { p5.call(x: 42, y: 43, z: 44) }
256
257
  assert_raises(TypeError) { p5.call(3, x: 42, y: 43) }
257
258
  assert_raises(TypeError) { p5.call(3, x: 42) }
258
- t6 = @p.scan_str "(x: ?Fixnum, y: String) -> Fixnum"
259
+ t6 = @p.scan_str "(x: ?Integer, y: String) -> Integer"
259
260
  p6 = t6.to_contract.wrap(self) { |y:, **xs| 42 }
260
261
  assert_equal 42, p6.call(x: 43, y: "44")
261
262
  assert_equal 42, p6.call(y: "44")
@@ -263,7 +264,7 @@ class TestTypeContract < Minitest::Test
263
264
  assert_raises(TypeError) { p6.call(x: "43", y: "44") }
264
265
  assert_raises(TypeError) { p6.call(42, x: 43, y: "44") }
265
266
  assert_raises(TypeError) { p6.call(x: 43, y: "44", z: 45) }
266
- t7 = @p.scan_str "(x: ?Fixnum, y: ?String) -> Fixnum"
267
+ t7 = @p.scan_str "(x: ?Integer, y: ?String) -> Integer"
267
268
  p7 = t7.to_contract.wrap(self) { |**args| 42 }
268
269
  assert_equal 42, p7.call
269
270
  assert_equal 42, p7.call(x: 43)
@@ -272,7 +273,7 @@ class TestTypeContract < Minitest::Test
272
273
  assert_raises(TypeError) { p7.call(x: "43", y: "44") }
273
274
  assert_raises(TypeError) { p7.call(41, x: 43, y: "44") }
274
275
  assert_raises(TypeError) { p7.call(x: 43, y: "44", z: 45) }
275
- t8 = @p.scan_str "(?Fixnum, x: ?Symbol, y: ?String) -> Fixnum"
276
+ t8 = @p.scan_str "(?Integer, x: ?Symbol, y: ?String) -> Integer"
276
277
  p8 = t8.to_contract.wrap(self) { |*args| 42 }
277
278
  assert_equal 42, p8.call
278
279
  assert_equal 42, p8.call(43)
@@ -285,7 +286,7 @@ class TestTypeContract < Minitest::Test
285
286
  assert_raises(TypeError) { p8.call(43, 44, x: :foo, y: "foo") }
286
287
  assert_raises(TypeError) { p8.call(43, x: "foo", y: "foo") }
287
288
  assert_raises(TypeError) { p8.call(43, x: :foo, y: "foo", z: 44) }
288
- t9 = @p.scan_str "(Fixnum, x: String, y: Fixnum, **Float) -> Fixnum"
289
+ t9 = @p.scan_str "(Integer, x: String, y: Integer, **Float) -> Integer"
289
290
  p9 = t9.to_contract.wrap(self) { |*args| 42 }
290
291
  assert_raises(TypeError) { p9.call }
291
292
  assert_raises(TypeError) { p9.call(43) }