rdl 1.1.0 → 1.1.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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/CHANGES.md +25 -0
  4. data/README.md +104 -64
  5. data/extras/type_tests/%.rb +171 -0
  6. data/extras/type_tests/&.rb +159 -0
  7. data/extras/type_tests/**.rb +222 -0
  8. data/extras/type_tests/*.rb +177 -0
  9. data/extras/type_tests/+.rb +170 -0
  10. data/extras/type_tests/-.rb +171 -0
  11. data/extras/type_tests/1scomp.rb +157 -0
  12. data/extras/type_tests/<.rb +170 -0
  13. data/extras/type_tests/<<.rb +159 -0
  14. data/extras/type_tests/>>.rb +159 -0
  15. data/extras/type_tests/[].rb +163 -0
  16. data/extras/type_tests/^.rb +159 -0
  17. data/extras/type_tests/abs.rb +155 -0
  18. data/extras/type_tests/abs2.rb +164 -0
  19. data/extras/type_tests/angle.rb +157 -0
  20. data/extras/type_tests/arg.rb +157 -0
  21. data/extras/type_tests/bit_length.rb +157 -0
  22. data/extras/type_tests/ceil.rb +157 -0
  23. data/extras/type_tests/ceilRational.rb +160 -0
  24. data/extras/type_tests/conj.rb +158 -0
  25. data/extras/type_tests/defwhere.rb +86 -0
  26. data/extras/type_tests/denominator.rb +157 -0
  27. data/extras/type_tests/div.rb +172 -0
  28. data/extras/type_tests/divslash.rb +179 -0
  29. data/extras/type_tests/even?.rb +157 -0
  30. data/extras/type_tests/fdiv.rb +244 -0
  31. data/extras/type_tests/finite?.rb +157 -0
  32. data/extras/type_tests/floor.rb +157 -0
  33. data/extras/type_tests/floorRational.rb +161 -0
  34. data/extras/type_tests/hash.rb +157 -0
  35. data/extras/type_tests/imag.rb +158 -0
  36. data/extras/type_tests/infinite?.rb +157 -0
  37. data/extras/type_tests/modulo.rb +171 -0
  38. data/extras/type_tests/nan?.rb +157 -0
  39. data/extras/type_tests/neg.rb +155 -0
  40. data/extras/type_tests/next.rb +157 -0
  41. data/extras/type_tests/next_float.rb +157 -0
  42. data/extras/type_tests/numerator.rb +157 -0
  43. data/extras/type_tests/phase.rb +157 -0
  44. data/extras/type_tests/prev_float.rb +157 -0
  45. data/extras/type_tests/quo.rb +179 -0
  46. data/extras/type_tests/rationalize.rb +157 -0
  47. data/extras/type_tests/rationalizeArg.rb +198 -0
  48. data/extras/type_tests/real.rb +157 -0
  49. data/extras/type_tests/real?.rb +157 -0
  50. data/extras/type_tests/round.rb +157 -0
  51. data/extras/type_tests/roundArg.rb +169 -0
  52. data/extras/type_tests/size.rb +157 -0
  53. data/extras/type_tests/to_c.rb +157 -0
  54. data/extras/type_tests/to_f.rb +155 -0
  55. data/extras/type_tests/to_i.rb +157 -0
  56. data/extras/type_tests/to_r.rb +157 -0
  57. data/extras/type_tests/to_s.rb +157 -0
  58. data/extras/type_tests/truncate.rb +157 -0
  59. data/extras/type_tests/truncateArg.rb +166 -0
  60. data/extras/type_tests/type tests +1 -0
  61. data/extras/type_tests/zero?.rb +155 -0
  62. data/extras/type_tests/|.rb +159 -0
  63. data/lib/rdl/contracts/and.rb +1 -1
  64. data/lib/rdl/contracts/flat.rb +2 -2
  65. data/lib/rdl/contracts/proc.rb +2 -1
  66. data/lib/rdl/types/.#lexer.rex +1 -0
  67. data/lib/rdl/types/dependent_arg.rb +47 -0
  68. data/lib/rdl/types/finitehash.rb +5 -5
  69. data/lib/rdl/types/generic.rb +3 -3
  70. data/lib/rdl/types/lexer.rex +5 -2
  71. data/lib/rdl/types/lexer.rex.rb +3 -0
  72. data/lib/rdl/types/method.rb +144 -15
  73. data/lib/rdl/types/nominal.rb +1 -1
  74. data/lib/rdl/types/parser.racc +6 -1
  75. data/lib/rdl/types/parser.tab.rb +272 -245
  76. data/lib/rdl/types/tuple.rb +1 -1
  77. data/lib/rdl/types/type_inferencer.rb +7 -7
  78. data/lib/rdl/wrap.rb +16 -11
  79. data/rdl.gemspec +3 -3
  80. data/test/test_dsl.rb +4 -5
  81. data/test/test_le.rb +5 -5
  82. data/test/test_lib_types.rb +34 -34
  83. data/test/test_member.rb +3 -3
  84. data/test/test_type_contract.rb +63 -1
  85. data/test/test_types.rb +2 -0
  86. data/types/ruby-2.x/_aliases.rb +2 -2
  87. data/types/ruby-2.x/bigdecimal.rb +246 -12
  88. data/types/ruby-2.x/bignum.rb +253 -0
  89. data/types/ruby-2.x/complex.rb +111 -22
  90. data/types/ruby-2.x/fixnum.rb +238 -31
  91. data/types/ruby-2.x/float.rb +217 -35
  92. data/types/ruby-2.x/integer.rb +17 -16
  93. data/types/ruby-2.x/numeric.rb +31 -21
  94. data/types/ruby-2.x/rational.rb +196 -18
  95. metadata +67 -4
@@ -0,0 +1,160 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bigdecimal'
4
+ require 'rdl'
5
+ require 'rdl_types'
6
+
7
+ MAX_FIXNUM = 2**(0.size*8-2)-1 #Largest fixnum. -2 since 1 bit used for sign, 1 bit used as int marker.
8
+ MIN_FIXNUM = -(2**(0.size*8-2)) #Smallest fixnum.
9
+
10
+ def test()
11
+ x = gen_number(0,0,0,0,0,0,0,1)
12
+ type_one = x.class.to_s
13
+ y = gen_number(0.5,0.5,0,0,0,0,0,0)
14
+ type_two = y.class.to_s
15
+ #puts "Arg1= #{x} and type = #{type_one}"
16
+ #puts "Arg2= #{y} and type = #{type_two}"
17
+ operation_type = query(type_one+'#ceil',y)
18
+ expected_type = operation_type[operation_type.index('->')+3..-1]
19
+ w = x.ceil(y)
20
+ test_result = w.is_a?(Object.const_get(expected_type))
21
+ if !test_result
22
+ puts "Arg1= #{x} (type: #{type_one})"
23
+ puts "Arg2= #{y} (type: #{type_two})"
24
+ puts "Res= #{w}"
25
+ puts "Expected type: #{expected_type}"
26
+ puts "Received type: #{w.class}"
27
+ end
28
+ #puts test_result
29
+ return test_result
30
+ end
31
+
32
+ def gen_fixnum()
33
+ return Random.rand(MIN_FIXNUM..MAX_FIXNUM)
34
+ end
35
+
36
+ def gen_bignum()
37
+ r = Random.rand()
38
+ if r<0.5
39
+ return Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
40
+ else
41
+ return -1*Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
42
+ end
43
+ end
44
+
45
+ def gen_float()
46
+ r = Random.rand()
47
+ if r<0.5
48
+ return Float::MAX*Random.rand
49
+ else
50
+ return -1*Float::MAX*Random.rand
51
+ end
52
+ end
53
+
54
+ def gen_bigdec()
55
+ r = Random.rand()
56
+ if r<0.33
57
+ return BigDecimal.new(gen_fixnum())
58
+ elsif r<0.66
59
+ return BigDecimal.new(gen_bignum())
60
+ else
61
+ return BigDecimal.new(gen_float(),0)
62
+ end
63
+ end
64
+
65
+ def gen_complex()
66
+ x = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
67
+ #puts x
68
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
69
+ #puts y
70
+ return Complex(x,y)
71
+ end
72
+
73
+ def gen_rational()
74
+ x = gen_fixnum()
75
+ y = gen_fixnum()
76
+ return Rational(x,y)
77
+ end
78
+
79
+
80
+ def gen_number(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
81
+ r = Random.rand()
82
+ if r<probFixnum then
83
+ #Fixnum type
84
+ x = gen_fixnum()
85
+ elsif r<(probFixnum+probBignum)
86
+ x = gen_bignum()
87
+ elsif r<(probFixnum+probBignum+probBigDec)
88
+ #BigDecimal type
89
+ x = gen_bigdec()
90
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
91
+ x=Float::INFINITY
92
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
93
+ x=Float::NAN
94
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
95
+ #Random Float type
96
+ x = gen_float()
97
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
98
+ x= gen_complex()
99
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
100
+ x = gen_rational()
101
+ end
102
+ return x
103
+ end
104
+
105
+ def rounds(x)
106
+ counter = 0
107
+ for i in 0..x
108
+ b= test()
109
+ if (!b) then
110
+ counter=counter+1
111
+ end
112
+
113
+ end
114
+ return counter
115
+ end
116
+
117
+
118
+ def query(q,y)
119
+ $__rdl_contract_switch.off {
120
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
121
+ klass = nil
122
+ klass_pref = nil
123
+ meth = nil
124
+ if q =~ /(.+)#(.+)/
125
+ klass = $1
126
+ klass_pref = "#{klass}#"
127
+ meth = $2.to_sym
128
+ elsif q =~ /(.+)\.(.+)/
129
+ klass_pref = "#{$1}."
130
+ klass = RDL::Util.add_singleton_marker($1)
131
+ meth = $2.to_sym
132
+ else
133
+ klass = self.class.to_s
134
+ klass_pref = "#{klass}#"
135
+ meth = q.to_sym
136
+ end
137
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
138
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
139
+ typs.each { |t|
140
+ #puts "#{klass_pref}#{meth}: #{t}"
141
+ t_string = "#{t}"
142
+ t_string =~ /\((\w*)\)(.+)/
143
+ if $1!=""
144
+ #catch negative sign case
145
+ if y.is_a?(Object.const_get($1))
146
+ return t_string
147
+ end
148
+ end
149
+ #return "#{t}"
150
+ }
151
+
152
+ else
153
+ #puts "No type for #{klass_pref}#{meth}"
154
+ end
155
+ else
156
+ #puts "Not implemented"
157
+ end
158
+ }
159
+ end
160
+
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bigdecimal'
4
+ require 'rdl'
5
+ require 'rdl_types'
6
+
7
+ MAX_FIXNUM = 2**(0.size*8-2)-1 #Largest fixnum. -2 since 1 bit used for sign, 1 bit used as int marker.
8
+ MIN_FIXNUM = -(2**(0.size*8-2)) #Smallest fixnum.
9
+
10
+ def test()
11
+ x = gen_number(0.2,0.2,0.1,0.05,0.05,0.2,0.1,0.1)
12
+ type_one = x.class.to_s
13
+ puts "Arg1= #{x} and type = #{type_one}"
14
+ operation_type = query(type_one+'#conj',nil)
15
+ expected_type = operation_type[operation_type.index('->')+3..-1]
16
+ w = x.conj
17
+ puts "here"
18
+ #puts expected_type
19
+ test_result = w.is_a?(Object.const_get(expected_type))
20
+ #puts "here2"
21
+ if !test_result
22
+ puts "Arg1= #{x} (type: #{type_one})"
23
+ puts "Arg2= #{y} (type: #{type_two})"
24
+ puts "Res= #{w}"
25
+ puts "Expected type: #{expected_type}"
26
+ puts "Received type: #{w.class}"
27
+ end
28
+ #puts test_result
29
+ return test_result
30
+ end
31
+
32
+ def gen_fixnum()
33
+ return Random.rand(MIN_FIXNUM..MAX_FIXNUM)
34
+ end
35
+
36
+ def gen_bignum()
37
+ r = Random.rand()
38
+ if r<0.5
39
+ return Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
40
+ else
41
+ return -1*Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
42
+ end
43
+ end
44
+
45
+ def gen_float()
46
+ r = Random.rand()
47
+ if r<0.5
48
+ return Float::MAX*Random.rand
49
+ else
50
+ return -1*Float::MAX*Random.rand
51
+ end
52
+ end
53
+
54
+ def gen_bigdec()
55
+ r = Random.rand()
56
+ if r<0.33
57
+ return BigDecimal.new(gen_fixnum())
58
+ elsif r<0.66
59
+ return BigDecimal.new(gen_bignum())
60
+ else
61
+ return BigDecimal.new(gen_float(),0)
62
+ end
63
+ end
64
+
65
+ def gen_complex()
66
+ x = gen_number(0.25,0.25,0.1,0.05,0.05,0.2,0,0.1)
67
+ #puts x
68
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
69
+ #puts y
70
+ return Complex(x,y)
71
+ end
72
+
73
+ def gen_rational()
74
+ x = gen_fixnum()
75
+ y = gen_fixnum()
76
+ return Rational(x,y)
77
+ end
78
+
79
+
80
+ def gen_number(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
81
+ r = Random.rand()
82
+ if r<probFixnum then
83
+ #Fixnum type
84
+ x = gen_fixnum()
85
+ elsif r<(probFixnum+probBignum)
86
+ x = gen_bignum()
87
+ elsif r<(probFixnum+probBignum+probBigDec)
88
+ #BigDecimal type
89
+ x = gen_bigdec()
90
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
91
+ x=Float::INFINITY
92
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
93
+ x=Float::NAN
94
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
95
+ #Random Float type
96
+ x = gen_float()
97
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
98
+ x= gen_complex()
99
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
100
+ x = gen_rational()
101
+ end
102
+ return x
103
+ end
104
+
105
+ def rounds(x)
106
+ counter = 0
107
+ for i in 0..x
108
+ b= test()
109
+ if (!b) then
110
+ counter=counter+1
111
+ end
112
+
113
+ end
114
+ return counter
115
+ end
116
+
117
+
118
+ def query(q,y)
119
+ $__rdl_contract_switch.off {
120
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
121
+ klass = nil
122
+ klass_pref = nil
123
+ meth = nil
124
+ if q =~ /(.+)#(.+)/
125
+ klass = $1
126
+ klass_pref = "#{klass}#"
127
+ meth = $2.to_sym
128
+ elsif q =~ /(.+)\.(.+)/
129
+ klass_pref = "#{$1}."
130
+ klass = RDL::Util.add_singleton_marker($1)
131
+ meth = $2.to_sym
132
+ else
133
+ klass = self.class.to_s
134
+ klass_pref = "#{klass}#"
135
+ meth = q.to_sym
136
+ end
137
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
138
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
139
+ typs.each { |t|
140
+ #puts "#{klass_pref}#{meth}: #{t}"
141
+ t_string = "#{t}"
142
+ #puts t_string
143
+ t_string =~ /\((\w*)\)(.+)/
144
+ if $1==""
145
+ return t_string
146
+ end
147
+ #return "#{t}"
148
+ }
149
+
150
+ else
151
+ #puts "No type for #{klass_pref}#{meth}"
152
+ end
153
+ else
154
+ #puts "Not implemented"
155
+ end
156
+ }
157
+ end
158
+
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rdl'
4
+ require 'rdl_types'
5
+
6
+ #array = Fixnum.instance_methods(false)
7
+
8
+ def check_one(cl) #checks class for missing methods
9
+ array_one = cl.instance_methods(false)
10
+ array_one.each{ |t|
11
+ if query(cl.to_s+'#'+t.to_s)==nil
12
+ puts t end}
13
+ end
14
+
15
+ def check_two(cl) #checks class for methods which are actually inherited
16
+ array_one = cl.instance_methods(false)
17
+ array_two = class_query(cl)
18
+ array_two.each{ |t|
19
+ if !array_one.include?(t) then puts t end}
20
+ end
21
+
22
+ def class_query(q)
23
+ klass = q.to_s
24
+ return nil unless $__rdl_contracts.has_key? klass
25
+ cls_meths = []
26
+ cls_klass = RDL::Util.add_singleton_marker(klass)
27
+ if $__rdl_contracts.has_key? cls_klass then
28
+ $__rdl_contracts[cls_klass].each { |meth, kinds|
29
+ if kinds.has_key? :type then
30
+ kinds[:type].each { |t| cls_meths << meth }
31
+ end
32
+ }
33
+ end
34
+ inst_meths = []
35
+ if $__rdl_contracts.has_key? klass then
36
+ $__rdl_contracts[klass].each { |meth, kinds|
37
+ if kinds.has_key? :type then
38
+ kinds[:type].each { |t| inst_meths << meth }
39
+ end
40
+ }
41
+ end
42
+ cls_meths.sort! { |p1, p2| p1[0] <=> p2[0] }
43
+ cls_meths.each { |m, t| m.insert(0, "self.") }
44
+ inst_meths.sort! { |p1, p2| p1[0] <=> p2[0] }
45
+ return cls_meths + inst_meths
46
+ end
47
+
48
+ def query(q)
49
+ $__rdl_contract_switch.off {
50
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
51
+ klass = nil
52
+ klass_pref = nil
53
+ meth = nil
54
+ if q =~ /(.+)#(.+)/
55
+ klass = $1
56
+ klass_pref = "#{klass}#"
57
+ meth = $2.to_sym
58
+ elsif q =~ /(.+)\.(.+)/
59
+ klass_pref = "#{$1}."
60
+ klass = RDL::Util.add_singleton_marker($1)
61
+ meth = $2.to_sym
62
+ else
63
+ klass = self.class.to_s
64
+ klass_pref = "#{klass}#"
65
+ meth = q.to_sym
66
+ end
67
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
68
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
69
+ typs.each { |t|
70
+ #puts "#{klass_pref}#{meth}: #{t}"
71
+ t_string = "#{t}"
72
+ t_string =~ /\((\w*)\)(.+)/
73
+
74
+ #puts y
75
+ return t_string
76
+ #return "#{t}"
77
+ }
78
+ nil
79
+ else
80
+ nil
81
+ end
82
+ else
83
+ nil
84
+ end
85
+ }
86
+ end
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bigdecimal'
4
+ require 'rdl'
5
+ require 'rdl_types'
6
+
7
+ MAX_FIXNUM = 2**(0.size*8-2)-1 #Largest fixnum. -2 since 1 bit used for sign, 1 bit used as int marker.
8
+ MIN_FIXNUM = -(2**(0.size*8-2)) #Smallest fixnum.
9
+
10
+ def test()
11
+ x = gen_number(0.2,0.2,0.1,0,0,0.2,0.1,0.2)
12
+ type_one = x.class.to_s
13
+ #puts "Arg1= #{x} and type = #{type_one}"
14
+ #puts "Arg2= #{y} and type = #{type_two}"
15
+ operation_type = query(type_one+'#denominator',nil)
16
+ expected_type = operation_type[operation_type.index('->')+3..-1]
17
+ w = x.denominator
18
+ #puts "here1"
19
+ test_result = w.is_a?(Object.const_get(expected_type))
20
+ if !test_result
21
+ puts "Arg1= #{x} (type: #{type_one})"
22
+ #puts "Arg2= #{y} (type: #{type_two})"
23
+ puts "Res= #{w}"
24
+ puts "Expected type: #{expected_type}"
25
+ puts "Received type: #{w.class}"
26
+ end
27
+ #puts test_result
28
+ return test_result
29
+ end
30
+
31
+ def gen_fixnum()
32
+ return Random.rand(MIN_FIXNUM..MAX_FIXNUM)
33
+ end
34
+
35
+ def gen_bignum()
36
+ r = Random.rand()
37
+ if r<0.5
38
+ return Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
39
+ else
40
+ return -1*Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
41
+ end
42
+ end
43
+
44
+ def gen_float()
45
+ r = Random.rand()
46
+ if r<0.5
47
+ return Float::MAX*Random.rand
48
+ else
49
+ return -1*Float::MAX*Random.rand
50
+ end
51
+ end
52
+
53
+ def gen_bigdec()
54
+ r = Random.rand()
55
+ if r<0.33
56
+ return BigDecimal.new(gen_fixnum())
57
+ elsif r<0.66
58
+ return BigDecimal.new(gen_bignum())
59
+ else
60
+ return BigDecimal.new(gen_float(),0)
61
+ end
62
+ end
63
+
64
+ def gen_complex()
65
+ x = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
66
+ #puts x
67
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
68
+ #puts y
69
+ return Complex(x,y)
70
+ end
71
+
72
+ def gen_rational()
73
+ x = gen_fixnum()
74
+ y = gen_fixnum()
75
+ return Rational(x,y)
76
+ end
77
+
78
+
79
+ def gen_number(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
80
+ r = Random.rand()
81
+ if r<probFixnum then
82
+ #Fixnum type
83
+ x = gen_fixnum()
84
+ elsif r<(probFixnum+probBignum)
85
+ x = gen_bignum()
86
+ elsif r<(probFixnum+probBignum+probBigDec)
87
+ #BigDecimal type
88
+ x = gen_bigdec()
89
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
90
+ x=Float::INFINITY
91
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
92
+ x=Float::NAN
93
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
94
+ #Random Float type
95
+ x = gen_float()
96
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
97
+ x= gen_complex()
98
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
99
+ x = gen_rational()
100
+ end
101
+ return x
102
+ end
103
+
104
+ def rounds(x)
105
+ counter = 0
106
+ for i in 0..x
107
+ b= test()
108
+ if (!b) then
109
+ counter=counter+1
110
+ end
111
+
112
+ end
113
+ return counter
114
+ end
115
+
116
+
117
+ def query(q,y)
118
+ $__rdl_contract_switch.off {
119
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
120
+ klass = nil
121
+ klass_pref = nil
122
+ meth = nil
123
+ if q =~ /(.+)#(.+)/
124
+ klass = $1
125
+ klass_pref = "#{klass}#"
126
+ meth = $2.to_sym
127
+ elsif q =~ /(.+)\.(.+)/
128
+ klass_pref = "#{$1}."
129
+ klass = RDL::Util.add_singleton_marker($1)
130
+ meth = $2.to_sym
131
+ else
132
+ klass = self.class.to_s
133
+ klass_pref = "#{klass}#"
134
+ meth = q.to_sym
135
+ end
136
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
137
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
138
+ typs.each { |t|
139
+ #puts "#{klass_pref}#{meth}: #{t}"
140
+ t_string = "#{t}"
141
+ #puts t_string
142
+ t_string =~ /\((\w*)\)(.+)/
143
+ if $1==""
144
+ return t_string
145
+ end
146
+ #return "#{t}"
147
+ }
148
+
149
+ else
150
+ #puts "No type for #{klass_pref}#{meth}"
151
+ end
152
+ else
153
+ #puts "Not implemented"
154
+ end
155
+ }
156
+ end
157
+