rdl 1.1.0 → 1.1.1.rc1

Sign up to get free protection for your applications and to get access to all the features.
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
+