rdl 1.0.0 → 1.0.1.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.
@@ -0,0 +1,108 @@
1
+ require 'minitest/autorun'
2
+ require_relative '../lib/rdl.rb'
3
+
4
+ class TestQuery < Minitest::Test
5
+ include RDL::Type
6
+
7
+ def setup
8
+ @p = Parser.new
9
+ @tfixnum = NominalType.new Fixnum
10
+ @tarray = NominalType.new Array
11
+ @qwild = WildQuery.new
12
+ @qwildopt = OptionalType.new @qwild
13
+ @qwildvararg = VarargType.new @qwild
14
+ @qwildx = AnnotatedArgType.new("x", @qwild)
15
+ @qdots = DotsQuery.new
16
+ end
17
+
18
+ def test_parse
19
+ q1 = @p.scan_str "#Q (.) -> ."
20
+ assert_equal (MethodType.new [@qwild], nil, @qwild), q1
21
+ q2 = @p.scan_str "#Q (., Fixnum) -> Fixnum"
22
+ assert_equal (MethodType.new [@qwild, @tfixnum], nil, @tfixnum), q2
23
+ q3 = @p.scan_str "#Q (Fixnum, ?.) -> Fixnum"
24
+ assert_equal (MethodType.new [@tfixnum, @qwildopt], nil, @tfixnum), q3
25
+ q4 = @p.scan_str "#Q (*.) -> Fixnum"
26
+ assert_equal (MethodType.new [@qwildvararg], nil, @tfixnum), q4
27
+ q5 = @p.scan_str "#Q (. or Fixnum) -> Fixnum"
28
+ assert_equal (MethodType.new [UnionType.new(@qwild, @tfixnum)], nil, @tfixnum), q5
29
+ q6 = @p.scan_str "#Q (. x, Fixnum) -> Fixnum"
30
+ assert_equal (MethodType.new [@qwildx, @tfixnum], nil, @tfixnum), q6
31
+ q7 = @p.scan_str "#Q (Array<.>) -> Fixnum"
32
+ assert_equal (MethodType.new [GenericType.new(@tarray, @qwild)], nil, @tfixnum), q7
33
+ # q8 = @p.scan_str "#Q (.<Fixnum>) -> Fixnum"
34
+ # assert_equal (MethodType.new [GenericType.new(@twild, @tfixnum)], nil, @tfixnum), q8
35
+ q9 = @p.scan_str "#Q ([Fixnum, .]) -> Fixnum"
36
+ assert_equal (MethodType.new [TupleType.new(@tfixnum, @qwild)], nil, @tfixnum), q9
37
+ q10 = @p.scan_str "#Q ([to_str: () -> .]) -> Fixnum"
38
+ assert_equal (MethodType.new [StructuralType.new(to_str: (MethodType.new [], nil, @qwild))], nil, @tfixnum), q10
39
+ q11 = @p.scan_str "#Q ({a: Fixnum, b: .}) -> Fixnum"
40
+ assert_equal (MethodType.new [FiniteHashType.new({a: @tfixnum, b: @qwild})], nil, @tfixnum), q11
41
+ q12 = @p.scan_str "#Q (Fixnum, x: .) -> Fixnum"
42
+ assert_equal (MethodType.new [@tfixnum, FiniteHashType.new(x: @qwild)], nil, @tfixnum), q12
43
+ q13 = @p.scan_str "#Q (Fixnum, ..., Fixnum) -> Fixnum"
44
+ assert_equal (MethodType.new [@tfixnum, @qdots, @tfixnum], nil, @tfixnum), q13
45
+ q14 = @p.scan_str "#Q (Fixnum, ...) -> Fixnum"
46
+ assert_equal (MethodType.new [@tfixnum, @qdots], nil, @tfixnum), q14
47
+ q15 = @p.scan_str "#Q (...) -> Fixnum"
48
+ assert_equal (MethodType.new [@qdots], nil, @tfixnum), q15
49
+ end
50
+
51
+ def test_match
52
+ t1 = @p.scan_str "(Fixnum, Fixnum) -> Fixnum"
53
+ assert (@p.scan_str "#Q (Fixnum, Fixnum) -> Fixnum").match(t1)
54
+ assert (@p.scan_str "#Q (., .) -> .").match(t1)
55
+ assert (@p.scan_str "#Q (..., Fixnum) -> Fixnum").match(t1)
56
+ assert (@p.scan_str "#Q (Fixnum, ...) -> Fixnum").match(t1)
57
+ assert (@p.scan_str "#Q (...) -> Fixnum").match(t1)
58
+ assert (not (@p.scan_str "#Q (Fixnum, String) -> Fixnum").match(t1))
59
+ assert (not (@p.scan_str "#Q (String, Fixnum) -> Fixnum").match(t1))
60
+ assert (not (@p.scan_str "#Q (Fixnum, String) -> String").match(t1))
61
+ assert (not (@p.scan_str "#Q (..., String) -> String").match(t1))
62
+ assert (not (@p.scan_str "#Q (String, ...) -> String").match(t1))
63
+ t2 = @p.scan_str "(String or Fixnum) -> Fixnum"
64
+ assert (@p.scan_str "#Q (String or Fixnum) -> Fixnum").match(t2)
65
+ assert (@p.scan_str "#Q (String or .) -> Fixnum").match(t2)
66
+ assert (@p.scan_str "#Q (. or Fixnum) -> Fixnum").match(t2)
67
+ assert (@p.scan_str "#Q (Fixnum or String) -> Fixnum").match(t2)
68
+ assert (@p.scan_str "#Q (Fixnum or .) -> Fixnum").match(t2)
69
+ assert (@p.scan_str "#Q (. or String) -> Fixnum").match(t2)
70
+ t3 = @p.scan_str "(Array<Fixnum>) -> Fixnum"
71
+ assert (@p.scan_str "#Q (Array<Fixnum>) -> Fixnum").match(t3)
72
+ assert (@p.scan_str "#Q (Array<.>) -> Fixnum").match(t3)
73
+ t4 = @p.scan_str "([Fixnum, String]) -> Fixnum"
74
+ assert (@p.scan_str "#Q ([Fixnum, String]) -> Fixnum").match(t4)
75
+ assert (@p.scan_str "#Q ([Fixnum, .]) -> Fixnum").match(t4)
76
+ assert (@p.scan_str "#Q ([., String]) -> Fixnum").match(t4)
77
+ t5 = @p.scan_str "([to_str: () -> Fixnum]) -> Fixnum"
78
+ assert (@p.scan_str "#Q ([to_str: () -> Fixnum]) -> Fixnum").match(t5)
79
+ assert (@p.scan_str "#Q ([to_str: () -> .]) -> Fixnum").match(t5)
80
+ t6 = @p.scan_str "(Fixnum, ?Fixnum) -> Fixnum"
81
+ assert (@p.scan_str "#Q (Fixnum, ?Fixnum) -> Fixnum").match(t6)
82
+ assert (@p.scan_str "#Q (Fixnum, ?.) -> Fixnum").match(t6)
83
+ assert (@p.scan_str "#Q (Fixnum, .) -> Fixnum").match(t6)
84
+ t7 = @p.scan_str "(*Fixnum) -> Fixnum"
85
+ assert (@p.scan_str "#Q (*Fixnum) -> Fixnum").match(t7)
86
+ assert (@p.scan_str "#Q (*.) -> Fixnum").match(t7)
87
+ assert (@p.scan_str "#Q (.) -> Fixnum").match(t7)
88
+ t8 = @p.scan_str "({a: Fixnum, b: String}) -> Fixnum"
89
+ assert (@p.scan_str "#Q ({a: Fixnum, b: String}) -> Fixnum").match(t8)
90
+ assert (@p.scan_str "#Q ({a: Fixnum, b: .}) -> Fixnum").match(t8)
91
+ assert (@p.scan_str "#Q ({a: ., b: String}) -> Fixnum").match(t8)
92
+ assert (@p.scan_str "#Q ({a: ., b: .}) -> Fixnum").match(t8)
93
+ assert (@p.scan_str "#Q ({b: String, a: Fixnum}) -> Fixnum").match(t8)
94
+ assert (@p.scan_str "#Q ({b: ., a: Fixnum}) -> Fixnum").match(t8)
95
+ assert (@p.scan_str "#Q ({b: String, a: .}) -> Fixnum").match(t8)
96
+ assert (@p.scan_str "#Q ({b: ., a: .}) -> Fixnum").match(t8)
97
+ assert (@p.scan_str "#Q (.) -> Fixnum").match(t8)
98
+ t9 = @p.scan_str "(Fixnum, x: String) -> Fixnum"
99
+ assert (@p.scan_str "#Q (Fixnum, x: String) -> Fixnum").match(t9)
100
+ assert (@p.scan_str "#Q (Fixnum, x: .) -> Fixnum").match(t9)
101
+ assert (@p.scan_str "#Q (Fixnum, .) -> Fixnum").match(t9)
102
+ t10 = @p.scan_str "(String x, Fixnum) -> Fixnum"
103
+ assert (@p.scan_str "#Q (String x, Fixnum) -> Fixnum").match(t10)
104
+ assert (@p.scan_str "#Q (. x, Fixnum) -> Fixnum").match(t10)
105
+ assert (@p.scan_str "#Q (String, Fixnum) -> Fixnum").match(t10)
106
+ assert (@p.scan_str "#Q (., Fixnum) -> Fixnum").match(t10)
107
+ end
108
+ end
data/test/test_rdl.rb CHANGED
@@ -31,7 +31,7 @@ class TestRDL < Minitest::Test
31
31
  ppos = RDL::Contract::FlatContract.new("Positive") { |x| x > 0 }
32
32
  assert_equal ["TestRDL", :m1, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", TestRDL, :m1, ppos)
33
33
  assert_equal ["TestRDL", :m1, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", TestRDL, "m1", ppos)
34
- assert_equal ["[singleton]TestRDL", :m1, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", TestRDL, "self.m1", ppos)
34
+ assert_equal ["#{RDL::Util::SINGLETON_MARKER}TestRDL", :m1, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", TestRDL, "self.m1", ppos)
35
35
  assert_equal ["TestRDL", :m1, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", :m1, ppos)
36
36
  assert_equal ["TestRDL", nil, ppos], RDL::Wrap.process_pre_post_args(self.class, "C", ppos)
37
37
  klass1, meth1, c1 = RDL::Wrap.process_pre_post_args(self.class, "C", TestRDL, :m1) { |x| x > 0 }
@@ -45,7 +45,7 @@ class TestRDL < Minitest::Test
45
45
  klass3, meth3, c3 = RDL::Wrap.process_pre_post_args(self.class, "C") { |x| x > 0 }
46
46
  assert_equal ["TestRDL", nil], [klass3, meth3]
47
47
  assert (c3.is_a? RDL::Contract::FlatContract)
48
-
48
+
49
49
  assert_raises(ArgumentError) { RDL::Wrap.process_pre_post_args(self.class, "C") }
50
50
  assert_raises(ArgumentError) { RDL::Wrap.process_pre_post_args(self.class, "C", 42) }
51
51
  assert_raises(ArgumentError) { RDL::Wrap.process_pre_post_args(self.class, "C", 42) { |x| x > 0} }
@@ -297,5 +297,5 @@ RUBY
297
297
  }
298
298
  assert_equal 3, m23(3)
299
299
  end
300
-
301
- end
300
+
301
+ end
@@ -77,6 +77,8 @@ class File
77
77
  type :truncate, '(Fixnum) -> 0'
78
78
 
79
79
  class Stat
80
+ rdl_nowrap
81
+
80
82
  type 'self.new', '(String file) -> File::Stat'
81
83
  type :<=>, '(File::Stat other) -> -1 or 0 or 1 or nil'
82
84
  type :atime, '() -> Time'
@@ -89,7 +91,7 @@ class File
89
91
  type :dev, '() -> Fixnum'
90
92
  type :dev_major, '() -> Fixnum'
91
93
  type :dev_minor, '() -> Fixnum'
92
- type :directory?, '(String file) -> %bool'
94
+ type :directory?, '() -> %bool'
93
95
  type :executable?, '() -> %bool'
94
96
  type :executable_real?, '() -> %bool'
95
97
  type :file?, '() -> %bool'
@@ -1,6 +1,6 @@
1
1
  module FileUtils
2
2
  rdl_nowrap
3
3
 
4
- type('self.cp_r', '(String or Pathname, String or Pathname, ?Hash<:preserve or :noop or :verbose or :dereference_root or :remove_destination, %bool>) -> Array<String>')
5
- type('self.mkdir_p', '(String or Pathname, ?Hash<:mode or :noop or :verbose, %bool>) -> Array<String>')
4
+ type 'self.cp_r', '(String or Pathname, String or Pathname, ?Hash<:preserve or :noop or :verbose or :dereference_root or :remove_destination, %bool>) -> Array<String>'
5
+ type 'self.mkdir_p', '(String or Pathname, ?Hash<:mode or :noop or :verbose, %bool>) -> Array<String>'
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdl
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeffrey S. Foster
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2015-12-18 00:00:00.000000000 Z
14
+ date: 2016-01-01 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: require_all
@@ -41,7 +41,8 @@ description: |
41
41
  when the method is called and when it returns, respectively.
42
42
  email:
43
43
  - rdl-users@googlegroups.com
44
- executables: []
44
+ executables:
45
+ - rdl_query
45
46
  extensions: []
46
47
  extra_rdoc_files: []
47
48
  files:
@@ -50,6 +51,7 @@ files:
50
51
  - LICENSE
51
52
  - README.md
52
53
  - Rakefile
54
+ - bin/rdl_query
53
55
  - gemfiles/Gemfile.travis
54
56
  - lib/rails_types.rb
55
57
  - lib/rdl.rb
@@ -59,8 +61,10 @@ files:
59
61
  - lib/rdl/contracts/flat.rb
60
62
  - lib/rdl/contracts/or.rb
61
63
  - lib/rdl/contracts/proc.rb
64
+ - lib/rdl/query.rb
62
65
  - lib/rdl/switch.rb
63
66
  - lib/rdl/types/annotated_arg.rb
67
+ - lib/rdl/types/dots_query.rb
64
68
  - lib/rdl/types/finitehash.rb
65
69
  - lib/rdl/types/generic.rb
66
70
  - lib/rdl/types/intersection.rb
@@ -78,9 +82,11 @@ files:
78
82
  - lib/rdl/types/tuple.rb
79
83
  - lib/rdl/types/type.rb
80
84
  - lib/rdl/types/type_inferencer.rb
85
+ - lib/rdl/types/type_query.rb
81
86
  - lib/rdl/types/union.rb
82
87
  - lib/rdl/types/var.rb
83
88
  - lib/rdl/types/vararg.rb
89
+ - lib/rdl/types/wild_query.rb
84
90
  - lib/rdl/util.rb
85
91
  - lib/rdl/wrap.rb
86
92
  - lib/rdl_types.rb
@@ -96,6 +102,7 @@ files:
96
102
  - test/test_lib_types.rb
97
103
  - test/test_member.rb
98
104
  - test/test_parser.rb
105
+ - test/test_query.rb
99
106
  - test/test_rdl.rb
100
107
  - test/test_rdl_type.rb
101
108
  - test/test_type_contract.rb
@@ -166,12 +173,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
166
173
  version: '0'
167
174
  required_rubygems_version: !ruby/object:Gem::Requirement
168
175
  requirements:
169
- - - ">="
176
+ - - ">"
170
177
  - !ruby/object:Gem::Version
171
- version: '0'
178
+ version: 1.3.1
172
179
  requirements: []
173
180
  rubyforge_project:
174
- rubygems_version: 2.4.5.1
181
+ rubygems_version: 2.5.1
175
182
  signing_key:
176
183
  specification_version: 4
177
184
  summary: Ruby type and contract system