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,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
+