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,179 @@
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
+ if type_one=="BigDecimal"
14
+ y = gen_number(0.25,0.25,0.2,0,0,0.2,0,0.1)
15
+ type_two = y.class.to_s
16
+ elsif x.is_a?(Float)&&(x==Float::INFINITY|| x.nan?)
17
+ y = gen_number(0.25,0.25,0,0.1,0.1,0.2,0,0.1)
18
+ type_two = y.class.to_s
19
+ elsif x.is_a?(Complex)
20
+ y = gen_number(0.3,0.3,0,0,0,0.3,0,0.1)
21
+ type_two = y.class.to_s
22
+ else
23
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.2,0.1,0.1)
24
+ type_two = y.class.to_s
25
+ end
26
+ #puts "Arg1= #{x} and type = #{type_one}"
27
+ #puts "Arg2= #{y} and type = #{type_two}"
28
+ operation_type = query(type_one+'#quo',y)
29
+ expected_type = operation_type[operation_type.index('->')+3..-1]
30
+ w = x.quo(y)
31
+ #puts "here"
32
+ test_result = w.is_a?(Object.const_get(expected_type))
33
+ if !test_result
34
+ puts "Arg1= #{x} (type: #{type_one})"
35
+ puts "Arg2= #{y} (type: #{type_two})"
36
+ puts "Res= #{w}"
37
+ puts "Expected type: #{expected_type}"
38
+ puts "Received type: #{w.class}"
39
+ end
40
+ #puts test_result
41
+ return test_result
42
+ end
43
+
44
+ def gen_fixnum()
45
+ return Random.rand(MIN_FIXNUM..MAX_FIXNUM)
46
+ end
47
+
48
+ def gen_bignum()
49
+ r = Random.rand()
50
+ if r<0.5
51
+ return Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
52
+ else
53
+ return -1*Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
54
+ end
55
+ end
56
+
57
+ def gen_float()
58
+ r = Random.rand()
59
+ if r<0.5
60
+ return Float::MAX*Random.rand
61
+ else
62
+ return -1*Float::MAX*Random.rand
63
+ end
64
+ end
65
+
66
+ def gen_bigdec()
67
+ r = Random.rand()
68
+ if r<0.33
69
+ return BigDecimal.new(gen_fixnum())
70
+ elsif r<0.66
71
+ return BigDecimal.new(gen_bignum())
72
+ else
73
+ return BigDecimal.new(gen_float(),0)
74
+ end
75
+ end
76
+
77
+ def gen_complex()
78
+ x = gen_number(0.25,0.25,0.1,0.05,0.05,0.2,0,0.1)
79
+ #puts x
80
+ if x.is_a?(BigDecimal)
81
+ y = gen_number(0.25,0.25,0.2,0,0,0.2,0,0.1)
82
+ elsif x.is_a?(Rational)
83
+ y = gen_number(0.25,0.25,0.1,0.05,0,0.25,0,0.1)
84
+ elsif x.is_a?(Float)&&(x==Float::INFINITY|| x.nan?)
85
+ y = gen_number(0.25,0.25,0,0.1,0.1,0.2,0,0.1)
86
+ else
87
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
88
+ #puts y
89
+ end
90
+ return Complex(x,y)
91
+ end
92
+
93
+ def gen_rational()
94
+ x = gen_fixnum()
95
+ y = gen_fixnum()
96
+ return Rational(x,y)
97
+ end
98
+
99
+
100
+ def gen_number(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
101
+ r = Random.rand()
102
+ if r<probFixnum then
103
+ #Fixnum type
104
+ x = gen_fixnum()
105
+ elsif r<(probFixnum+probBignum)
106
+ x = gen_bignum()
107
+ elsif r<(probFixnum+probBignum+probBigDec)
108
+ #BigDecimal type
109
+ x = gen_bigdec()
110
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
111
+ x=Float::INFINITY
112
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
113
+ x=Float::NAN
114
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
115
+ #Random Float type
116
+ x = gen_float()
117
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
118
+ x= gen_complex()
119
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
120
+ x = gen_rational()
121
+ end
122
+ return x
123
+ end
124
+
125
+ def rounds(x)
126
+ counter = 0
127
+ for i in 0..x
128
+ b= test()
129
+ if (!b) then
130
+ counter=counter+1
131
+ end
132
+
133
+ end
134
+ return counter
135
+ end
136
+
137
+
138
+ def query(q,y)
139
+ $__rdl_contract_switch.off {
140
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
141
+ klass = nil
142
+ klass_pref = nil
143
+ meth = nil
144
+ if q =~ /(.+)#(.+)/
145
+ klass = $1
146
+ klass_pref = "#{klass}#"
147
+ meth = $2.to_sym
148
+ elsif q =~ /(.+)\.(.+)/
149
+ klass_pref = "#{$1}."
150
+ klass = RDL::Util.add_singleton_marker($1)
151
+ meth = $2.to_sym
152
+ else
153
+ klass = self.class.to_s
154
+ klass_pref = "#{klass}#"
155
+ meth = q.to_sym
156
+ end
157
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
158
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
159
+ typs.each { |t|
160
+ #puts "#{klass_pref}#{meth}: #{t}"
161
+ t_string = "#{t}"
162
+ t_string =~ /\((\w*)\)(.+)/
163
+
164
+ #puts y
165
+ if y.is_a?(Object.const_get($1))
166
+ return t_string
167
+ end
168
+ #return "#{t}"
169
+ }
170
+ nil
171
+ else
172
+ #puts "No type for #{klass_pref}#{meth}"
173
+ end
174
+ else
175
+ #puts "Not implemented"
176
+ end
177
+ }
178
+ end
179
+
@@ -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,0,0,0.2,0.2,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+'#rationalize',nil)
16
+ expected_type = operation_type[operation_type.index('->')+3..-1]
17
+ w = x.rationalize
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,0,0,0.2,0.2,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,0)
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
+
@@ -0,0 +1,198 @@
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,0,0,0.2,0.2,0.2)
12
+ type_one = x.class.to_s
13
+ if x.is_a?(Rational) || x.is_a?(Float) || x.is_a?(Complex)
14
+ y = gen_number(0.2,0.2,0,0,0,0.2,0.2,0.2)
15
+ else
16
+ y = gen_number2(0.2,0.2,0.1,0.05,0.05,0.2,0.1,0.1)
17
+ end
18
+ type_two = y.class.to_s
19
+ puts "Arg1= #{x} and type = #{type_one}"
20
+ puts "Arg2= #{y} and type = #{type_two}"
21
+ operation_type = query(type_one+'#rationalize',y)
22
+ expected_type = operation_type[operation_type.index('->')+3..-1]
23
+ w = x.rationalize(y)
24
+ puts 'here'
25
+ test_result = w.is_a?(Object.const_get(expected_type))
26
+ if !test_result
27
+ puts "Arg1= #{x} (type: #{type_one})"
28
+ puts "Arg2= #{y} (type: #{type_two})"
29
+ puts "Res= #{w}"
30
+ puts "Expected type: #{expected_type}"
31
+ puts "Received type: #{w.class}"
32
+ end
33
+ #puts test_result
34
+ return test_result
35
+ end
36
+
37
+ def gen_fixnum()
38
+ return Random.rand(MIN_FIXNUM..MAX_FIXNUM)
39
+ end
40
+
41
+ def gen_bignum()
42
+ r = Random.rand()
43
+ if r<0.5
44
+ return Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
45
+ else
46
+ return -1*Random.rand(MAX_FIXNUM+1..MAX_FIXNUM*1000)
47
+ end
48
+ end
49
+
50
+ def gen_float()
51
+ r = Random.rand()
52
+ if r<0.5
53
+ return Float::MAX*Random.rand
54
+ else
55
+ return -1*Float::MAX*Random.rand
56
+ end
57
+ end
58
+
59
+ def gen_bigdec()
60
+ r = Random.rand()
61
+ if r<0.33
62
+ return BigDecimal.new(gen_fixnum())
63
+ elsif r<0.66
64
+ return BigDecimal.new(gen_bignum())
65
+ else
66
+ return BigDecimal.new(gen_float(),0)
67
+ end
68
+ end
69
+
70
+ def gen_complex()
71
+ x = gen_number(0.2,0.2,0,0,0,0.2,0.2,0.1)
72
+ #puts x
73
+ #y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
74
+ #puts y
75
+ return Complex(x,0)
76
+ end
77
+
78
+ def gen_complex2()
79
+ x = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
80
+ #puts x
81
+ y = gen_number(0.2,0.2,0.1,0.05,0.05,0.3,0,0.1)
82
+ #puts y
83
+ return Complex(x,y)
84
+ end
85
+
86
+ def gen_rational()
87
+ x = gen_fixnum()
88
+ y = gen_fixnum()
89
+ return Rational(x,y)
90
+ end
91
+
92
+
93
+ def gen_number(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
94
+ r = Random.rand()
95
+ if r<probFixnum then
96
+ #Fixnum type
97
+ x = gen_fixnum()
98
+ elsif r<(probFixnum+probBignum)
99
+ x = gen_bignum()
100
+ elsif r<(probFixnum+probBignum+probBigDec)
101
+ #BigDecimal type
102
+ x = gen_bigdec()
103
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
104
+ x=Float::INFINITY
105
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
106
+ x=Float::NAN
107
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
108
+ #Random Float type
109
+ x = gen_float()
110
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
111
+ x= gen_complex()
112
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
113
+ x = gen_rational()
114
+ end
115
+ return x
116
+ end
117
+
118
+ def gen_number2(probFixnum,probBignum,probBigDec,probInf,probNAN,probFloat,probComplex,probRational)
119
+ r = Random.rand()
120
+ if r<probFixnum then
121
+ #Fixnum type
122
+ x = gen_fixnum()
123
+ elsif r<(probFixnum+probBignum)
124
+ x = gen_bignum()
125
+ elsif r<(probFixnum+probBignum+probBigDec)
126
+ #BigDecimal type
127
+ x = gen_bigdec()
128
+ elsif r<(probFixnum+probBignum+probBigDec+probInf)
129
+ x=Float::INFINITY
130
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN)
131
+ x=Float::NAN
132
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat)
133
+ #Random Float type
134
+ x = gen_float()
135
+ elsif r<(probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex)
136
+ x= gen_complex2()
137
+ elsif (probFixnum+probBignum+probBigDec+probInf+probNAN+probFloat+probComplex+probRational)
138
+ x = gen_rational()
139
+ end
140
+ return x
141
+ end
142
+
143
+ def rounds(x)
144
+ counter = 0
145
+ for i in 0..x
146
+ b= test()
147
+ if (!b) then
148
+ counter=counter+1
149
+ end
150
+
151
+ end
152
+ return counter
153
+ end
154
+
155
+
156
+ def query(q,y)
157
+ $__rdl_contract_switch.off {
158
+ if q =~ /^(\w+(#|\.))?(\w+(!|\?|=)?|!|~|\+|\*\*|-|\*|\/|%|<<|>>|&|\||\^|<|<=|=>|>|==|===|!=|=~|!~|<=>|\[\]|\[\]=)$/
159
+ klass = nil
160
+ klass_pref = nil
161
+ meth = nil
162
+ if q =~ /(.+)#(.+)/
163
+ klass = $1
164
+ klass_pref = "#{klass}#"
165
+ meth = $2.to_sym
166
+ elsif q =~ /(.+)\.(.+)/
167
+ klass_pref = "#{$1}."
168
+ klass = RDL::Util.add_singleton_marker($1)
169
+ meth = $2.to_sym
170
+ else
171
+ klass = self.class.to_s
172
+ klass_pref = "#{klass}#"
173
+ meth = q.to_sym
174
+ end
175
+ if RDL::Wrap.has_contracts?(klass, meth, :type)
176
+ typs = RDL::Wrap.get_contracts(klass, meth, :type)
177
+ typs.each { |t|
178
+ #puts "#{klass_pref}#{meth}: #{t}"
179
+ t_string = "#{t}"
180
+ t_string =~ /\((\w*)\)(.+)/
181
+ if $1!=""
182
+ #catch negative sign case
183
+ if y.is_a?(Object.const_get($1))
184
+ return t_string
185
+ end
186
+ end
187
+ #return "#{t}"
188
+ }
189
+
190
+ else
191
+ #puts "No type for #{klass_pref}#{meth}"
192
+ end
193
+ else
194
+ #puts "Not implemented"
195
+ end
196
+ }
197
+ end
198
+