fastruby 0.0.21 → 0.0.22

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/Rakefile +1 -1
  2. data/benchmarks/benchmark.rb +3 -0
  3. data/benchmarks/benchmark.rb~ +3 -12
  4. data/benchmarks/benchmark8.rb +48 -0
  5. data/benchmarks/benchmark8.rb~ +46 -0
  6. data/lib/fastruby.rb +2 -1
  7. data/lib/fastruby.rb~ +2 -1
  8. data/lib/fastruby/builder.rb +18 -1
  9. data/lib/fastruby/builder.rb~ +18 -5
  10. data/lib/fastruby/modules/lvar_type/lasgn.rb~ +41 -0
  11. data/lib/fastruby/modules/translator/block.rb +1 -1
  12. data/lib/fastruby/modules/translator/block.rb~ +128 -0
  13. data/lib/fastruby/modules/translator/call.rb +62 -139
  14. data/lib/fastruby/modules/translator/call.rb~ +61 -140
  15. data/lib/fastruby/modules/translator/defn.rb +49 -105
  16. data/lib/fastruby/modules/translator/defn.rb~ +211 -0
  17. data/lib/fastruby/modules/translator/exceptions.rb +1 -0
  18. data/lib/fastruby/modules/translator/exceptions.rb~ +120 -0
  19. data/lib/fastruby/modules/translator/iter.rb +13 -20
  20. data/lib/fastruby/modules/translator/iter.rb~ +738 -0
  21. data/lib/fastruby/modules/translator/literal.rb +8 -1
  22. data/lib/fastruby/modules/translator/literal.rb~ +157 -0
  23. data/lib/fastruby/modules/translator/nonlocal.rb +7 -0
  24. data/lib/fastruby/modules/translator/nonlocal.rb~ +304 -0
  25. data/lib/fastruby/modules/translator/static.rb +1 -0
  26. data/lib/fastruby/modules/translator/static.rb~ +290 -0
  27. data/lib/fastruby/modules/translator/variable.rb +24 -6
  28. data/lib/fastruby/modules/translator/variable.rb~ +298 -0
  29. data/lib/fastruby/translator/translator.rb +411 -284
  30. data/lib/fastruby/translator/translator.rb~ +1728 -0
  31. data/spec/fastruby_only/base_spec.rb~ +74 -0
  32. data/spec/ruby/base_spec.rb~ +1 -338
  33. data/spec/ruby/block/break_spec.rb~ +21 -0
  34. data/spec/ruby/block/callcc_spec.rb~ +236 -0
  35. data/spec/ruby/block/lambda_spec.rb~ +1 -178
  36. data/spec/ruby/block/next_spec.rb~ +85 -0
  37. data/spec/ruby/block/proc_spec.rb~ +22 -0
  38. data/spec/ruby/block/redo_spec.rb~ +133 -0
  39. data/spec/ruby/block/retry_spec.rb~ +135 -0
  40. data/spec/ruby/block_spec.rb~ +494 -2
  41. data/spec/ruby/call/base_call_spec.rb~ +60 -2
  42. data/spec/ruby/defn/default_args_spec.rb~ +303 -0
  43. data/spec/ruby/defn/multiple_args_spec.rb~ +317 -0
  44. data/spec/ruby/defn/replacement_spec.rb +29 -1
  45. data/spec/ruby/defn/replacement_spec.rb~ +52 -21
  46. data/spec/ruby/exception/internal_ex_spec.rb~ +2 -2
  47. data/spec/ruby/variable_spec.rb~ +46 -23
  48. data/spec/static/flow_spec.rb~ +48 -0
  49. metadata +34 -12
@@ -1,7 +1,36 @@
1
1
  require "fastruby"
2
2
 
3
3
  describe FastRuby, "fastruby" do
4
-
4
+ def self.test_arguments(x)
5
+ it "should allow #{x} arguments calling to cfunc" do
6
+
7
+ arguments = (0..x).map(&:to_s).join(",")
8
+
9
+ fastruby "
10
+ class ::CYR#{x}
11
+ def foo
12
+ a = []
13
+ a.infer(Array).push(#{arguments})
14
+ a
15
+ end
16
+ end
17
+ "
18
+
19
+ eval("::CYR#{x}").new.foo.should be == eval("[#{arguments}]")
20
+ end
21
+ end
22
+
23
+ #test_arguments(10)
24
+ #test_arguments(15)
25
+ #test_arguments(20)
26
+
27
+ (23..27).each do |i|
28
+ # test_arguments(i)
29
+ end
30
+
31
+ #test_arguments(20)
32
+
33
+
5
34
  def self.test_fastruby_arguments(argnum)
6
35
  it "should allow #{argnum} arguments calling fastruby" do
7
36
 
@@ -21,5 +50,34 @@ describe FastRuby, "fastruby" do
21
50
  eval("::CYR1_#{argnum}").new.foo(*array).should be == array
22
51
  end
23
52
  end
24
- test_fastruby_arguments(1024)
53
+
54
+ #(8..12).each do |i|
55
+ # test_fastruby_arguments(i)
56
+ #end
57
+
58
+ def self.test_invalid_fastruby_arguments(argnum)
59
+ it "should allow #{argnum} arguments calling fastruby" do
60
+
61
+ arguments_name = (0..argnum-1).map{|x| "a"+x.to_s}.join(",")
62
+ arguments = (0..argnum-1).map(&:to_s).join(",")
63
+
64
+ fastruby "
65
+ class ::CYR1_#{argnum}
66
+ def foo(#{arguments_name})
67
+ [#{arguments_name}]
68
+ end
69
+ end
70
+ "
71
+
72
+ array = eval("[#{arguments}]")
73
+
74
+ lambda {
75
+ eval("::CYR1_#{argnum}").new.foo(*array).should be == array
76
+ }.should raise_error(ArgumentError)
77
+ end
78
+ end
79
+
80
+ #test_invalid_fastruby_arguments(15)
81
+
82
+ test_fastruby_arguments(1000)
25
83
  end
@@ -0,0 +1,303 @@
1
+ require "fastruby"
2
+
3
+ describe FastRuby, "fastruby" do
4
+ it "should allow one optional argument" do
5
+ fastruby "
6
+ class CFX1
7
+ def foo(a=0)
8
+ a
9
+ end
10
+ end
11
+ "
12
+ end
13
+
14
+ it "should allow one optional argument and should return the default when no specified" do
15
+ fastruby "
16
+ class CFX2
17
+ def foo(a=0)
18
+ a
19
+ end
20
+ end
21
+ "
22
+
23
+ CFX2.new.foo.should be == 0
24
+ end
25
+
26
+ it "should allow one optional argument and should return the passed value when specified" do
27
+ fastruby "
28
+ class CFX3
29
+ def foo(a=0)
30
+ a
31
+ end
32
+ end
33
+ "
34
+
35
+ CFX3.new.foo(99).should be == 99
36
+ end
37
+
38
+ fastruby "
39
+ class CFX4
40
+ def foo(a=7,b=4)
41
+ [a,b]
42
+ end
43
+ end
44
+ "
45
+
46
+ it "should allow two optional argument and should return the passed value when no arguments is passed" do
47
+ cfx4 = CFX4.new
48
+ cfx4.foo().should be == [7,4]
49
+ end
50
+
51
+ it "should allow two optional argument and should return the passed value when one argument is passed" do
52
+ cfx4 = CFX4.new
53
+ cfx4.foo(99).should be == [99,4]
54
+ end
55
+
56
+ it "should allow two optional argument and should return the passed value when two arguments are passed" do
57
+ cfx4 = CFX4.new
58
+ cfx4.foo(99,88).should be == [99,88]
59
+ end
60
+
61
+ fastruby "
62
+ class CFX5
63
+ def foo(a,b=4)
64
+ [a,b]
65
+ end
66
+ end
67
+ "
68
+
69
+ it "should allow one mandatory and one optional argument and should return the passed value when one argument is passed" do
70
+ cfx5 = CFX5.new
71
+ cfx5.foo(99).should be == [99,4]
72
+ end
73
+
74
+ it "should allow one mandatory and one optional argument and should return the passed value when two arguments are passed" do
75
+ cfx5 = CFX5.new
76
+ cfx5.foo(99,88).should be == [99,88]
77
+ end
78
+
79
+ it "should raise ArgumentError when no arguments are passed" do
80
+ lambda {
81
+ cfx5 = CFX5.new
82
+ cfx5.foo
83
+ }.should raise_error(ArgumentError)
84
+ end
85
+
86
+ it "should raise ArgumentError when three arguments are passed" do
87
+ lambda {
88
+ cfx5 = CFX5.new
89
+ cfx5.foo(1,2,3)
90
+ }.should raise_error(ArgumentError)
91
+ end
92
+
93
+ it "should allow splat arguments with default arguments " do
94
+ fastruby "
95
+ class CFX6
96
+ def foo(x=44,*y)
97
+ end
98
+ end
99
+ "
100
+ end
101
+
102
+ fastruby "
103
+ class CFX7
104
+ def foo(x=44,*y)
105
+ x
106
+ end
107
+ end
108
+ "
109
+
110
+ it "should allow splat arguments with default arguments accepting no arguments " do
111
+ CFX7.new.foo.should be == 44
112
+ end
113
+
114
+ it "should allow splat arguments with default arguments accepting one argument" do
115
+ CFX7.new.foo(55).should be == 55
116
+ end
117
+
118
+ fastruby "
119
+ class CFX8
120
+ def foo(x=44,*y)
121
+ y
122
+ end
123
+ end
124
+ "
125
+
126
+ it "should allow splat arguments with default arguments accepting no arguments" do
127
+ CFX8.new.foo.should be == []
128
+ end
129
+
130
+ it "should allow splat arguments with default arguments accepting one arguments" do
131
+ CFX8.new.foo(55).should be == []
132
+ end
133
+
134
+ it "should allow splat arguments with default arguments accepting two arguments" do
135
+ CFX8.new.foo(55,66).should be == [66]
136
+ end
137
+
138
+ it "should allow splat arguments with default arguments accepting three arguments" do
139
+ CFX8.new.foo(55,66,67,68).should be == [66,67,68]
140
+ end
141
+
142
+ fastruby "
143
+ class CFX9
144
+ def foo(a,x=44,*y)
145
+ a
146
+ end
147
+ end
148
+ "
149
+
150
+ it "should allow splat arguments with default arguments accepting one argument" do
151
+ CFX9.new.foo(55).should be == 55
152
+ end
153
+
154
+ it "should allow splat arguments with default arguments accepting two argument" do
155
+ CFX9.new.foo(55,66).should be == 55
156
+ end
157
+
158
+ it "should allow splat arguments with default arguments accepting three argument" do
159
+ CFX9.new.foo(55,66,77).should be == 55
160
+ end
161
+
162
+ fastruby "
163
+ class CFX10
164
+ def foo(a,x=44,*y)
165
+ x
166
+ end
167
+ end
168
+ "
169
+ it "should allow splat arguments with default arguments accepting one argument" do
170
+ CFX10.new.foo(55).should be == 44
171
+ end
172
+
173
+ it "should allow splat arguments with default arguments accepting two argument" do
174
+ CFX10.new.foo(55,66).should be == 66
175
+ end
176
+
177
+ it "should allow splat arguments with default arguments accepting three argument" do
178
+ CFX10.new.foo(55,66,77).should be == 66
179
+ end
180
+
181
+ fastruby "
182
+ class CFX11
183
+ def foo(a,x=44,*y)
184
+ y
185
+ end
186
+ end
187
+ "
188
+
189
+ it "should raise ArgumentError with splat arguments with default arguments when no arguments are passed" do
190
+ lambda {
191
+ CFX11.new.foo
192
+ }.should raise_error(ArgumentError)
193
+ end
194
+
195
+ it "should allow splat arguments with default arguments accepting one argument" do
196
+ CFX11.new.foo(55).should be == []
197
+ end
198
+
199
+ it "should allow splat arguments with default arguments accepting two argument" do
200
+ CFX11.new.foo(55,66).should be == []
201
+ end
202
+
203
+ it "should allow splat arguments with default arguments accepting three argument" do
204
+ CFX11.new.foo(55,66,77).should be == [77]
205
+ end
206
+
207
+ fastruby "
208
+ class CFX12
209
+ def foo(a=0,&block)
210
+ a
211
+ end
212
+ end
213
+ "
214
+
215
+ it "should allow splat arguments with default with block arguments accepting no argument" do
216
+ CFX12.new.foo() {
217
+
218
+ }.should be == 0
219
+ end
220
+
221
+ it "should allow splat arguments with default with block arguments accepting one argument" do
222
+ CFX12.new.foo(44) {
223
+
224
+ }.should be == 44
225
+ end
226
+
227
+ fastruby "
228
+ class CFX13
229
+ def foo(a=0,&block)
230
+ block.call
231
+ end
232
+ end
233
+ "
234
+
235
+ it "should allow splat arguments with default with block arguments accepting no argument" do
236
+ CFX13.new.foo() {
237
+ 66
238
+ }.should be == 66
239
+ end
240
+
241
+ it "should allow splat arguments with default with block arguments accepting one argument" do
242
+ CFX13.new.foo(44) {
243
+ 77
244
+ }.should be == 77
245
+ end
246
+
247
+ fastruby "
248
+ class CFX14
249
+ def foo
250
+ 55
251
+ end
252
+ end
253
+ "
254
+
255
+ fastruby "
256
+ class CFX15
257
+ def foo(cfx14,b = cfx14.foo)
258
+ end
259
+ end
260
+ "
261
+
262
+ it "should execute default blocks when no argument is passed" do
263
+ cfx14 = CFX14.new
264
+ cfx15 = CFX15.new
265
+
266
+ cfx14.should_receive :foo
267
+
268
+ cfx15.foo(cfx14)
269
+ end
270
+
271
+ it "should not execute default blocks when argument is passed" do
272
+ cfx14 = CFX14.new
273
+ cfx15 = CFX15.new
274
+
275
+ cfx14.should_not_receive :foo
276
+
277
+ cfx15.foo(cfx14,99)
278
+ end
279
+
280
+ it "should allow if on default argument" do
281
+ fastruby "
282
+ class ::CFX16
283
+ def foo(a, b = if a
284
+ 87
285
+ else
286
+ 55
287
+ end
288
+ )
289
+ b
290
+ end
291
+ end
292
+ "
293
+
294
+
295
+ cfx16 = ::CFX16.new
296
+
297
+ cfx16.foo(false).should be == 55
298
+ cfx16.foo(true).should be == 87
299
+ cfx16.foo(true,99).should be == 99
300
+ cfx16.foo(false,99).should be == 99
301
+ end
302
+
303
+ end
@@ -0,0 +1,317 @@
1
+ require "fastruby"
2
+
3
+ describe FastRuby, "fastruby" do
4
+ it "should allow define method with array arguments" do
5
+ lambda {
6
+ fastruby "
7
+ class CF1
8
+ def foo(*x)
9
+ end
10
+ end
11
+ "
12
+ }.should_not raise_error
13
+ end
14
+
15
+ it "should allow define method with array arguments and call with no arguments" do
16
+ lambda {
17
+ fastruby "
18
+ class ::CF2
19
+ def foo(*x)
20
+ x
21
+ end
22
+ end
23
+ "
24
+
25
+ ::CF2.new.foo().should be == []
26
+ }.should_not raise_error
27
+ end
28
+
29
+ it "should allow define method with array arguments and call with one argument" do
30
+ lambda {
31
+ fastruby "
32
+ class ::CF3
33
+ def foo(*x)
34
+ x
35
+ end
36
+ end
37
+ "
38
+
39
+ ::CF3.new.foo(1).should be == [1]
40
+ }.should_not raise_error
41
+ end
42
+
43
+ it "should allow define method with array arguments and call with two arguments" do
44
+ lambda {
45
+ fastruby "
46
+ class ::CF4
47
+ def foo(*x)
48
+ x
49
+ end
50
+ end
51
+ "
52
+
53
+ ::CF4.new.foo(1,2).should be == [1,2]
54
+ }.should_not raise_error
55
+ end
56
+
57
+ it "should allow define method with normal argument plus array arguments and call with one argument" do
58
+ lambda {
59
+ fastruby "
60
+ class ::CF5
61
+ def foo(a, *x)
62
+ x
63
+ end
64
+ end
65
+ "
66
+
67
+ ::CF5.new.foo(1).should be == []
68
+ }.should_not raise_error
69
+ end
70
+
71
+ it "should allow define method with normal argument plus array arguments and call with two arguments" do
72
+ lambda {
73
+ fastruby "
74
+ class ::CF6
75
+ def foo(a, *x)
76
+ x
77
+ end
78
+ end
79
+ "
80
+
81
+ ::CF6.new.foo(1,2).should be == [2]
82
+ }.should_not raise_error
83
+ end
84
+
85
+ it "should allow define method with normal argument plus array arguments and call with one argument" do
86
+ lambda {
87
+ fastruby "
88
+ class ::CF7
89
+ def foo(a, *x)
90
+ a
91
+ end
92
+ end
93
+ "
94
+
95
+ ::CF7.new.foo(1).should be == 1
96
+ }.should_not raise_error
97
+ end
98
+
99
+ it "should allow define method with normal argument plus array arguments and call with two arguments" do
100
+ lambda {
101
+ fastruby "
102
+ class ::CF8
103
+ def foo(a, *x)
104
+ a
105
+ end
106
+ end
107
+ "
108
+
109
+ ::CF8.new.foo(1,2).should be == 1
110
+ }.should_not raise_error
111
+ end
112
+
113
+ it "should allow define method with array arguments and call with no arguments from fastruby" do
114
+ lambda {
115
+ fastruby "
116
+ class ::CF9
117
+ def foo(*x)
118
+ x
119
+ end
120
+
121
+ def bar
122
+ foo
123
+ end
124
+ end
125
+ "
126
+
127
+ ::CF9.new.bar.should be == []
128
+ }.should_not raise_error
129
+ end
130
+
131
+ it "should allow define method with array arguments and call with one argument from fastruby" do
132
+ lambda {
133
+ fastruby "
134
+ class ::CF10
135
+ def foo(*x)
136
+ x
137
+ end
138
+
139
+ def bar
140
+ foo(1)
141
+ end
142
+ end
143
+ "
144
+
145
+ ::CF10.new.bar.should be == [1]
146
+ }.should_not raise_error
147
+ end
148
+
149
+ it "should allow define method with array arguments and call with two arguments from fastruby" do
150
+ lambda {
151
+ fastruby "
152
+ class ::CF11
153
+ def foo(*x)
154
+ x
155
+ end
156
+
157
+ def bar
158
+ foo(1,2)
159
+ end
160
+ end
161
+ "
162
+
163
+ ::CF11.new.bar.should be == [1,2]
164
+ }.should_not raise_error
165
+ end
166
+
167
+ it "should allow define method with normal argument plus array arguments and call with one argument from fastruby" do
168
+ lambda {
169
+ fastruby "
170
+ class ::CF12
171
+ def foo(a, *x)
172
+ x
173
+ end
174
+
175
+ def bar
176
+ foo(1)
177
+ end
178
+ end
179
+ "
180
+
181
+ ::CF12.new.bar.should be == []
182
+ }.should_not raise_error
183
+ end
184
+
185
+ it "should allow define method with normal argument plus array arguments and call with two arguments from fastruby" do
186
+ lambda {
187
+ fastruby "
188
+ class ::CF13
189
+ def foo(a, *x)
190
+ x
191
+ end
192
+
193
+ def bar
194
+ foo(1,2)
195
+ end
196
+ end
197
+ "
198
+
199
+ ::CF13.new.bar.should be == [2]
200
+ }.should_not raise_error
201
+ end
202
+
203
+ it "should allow define method with normal argument plus array arguments and call with one argument from fastruby" do
204
+ lambda {
205
+ fastruby "
206
+ class ::CF14
207
+ def foo(a, *x)
208
+ a
209
+ end
210
+
211
+ def bar
212
+ foo(1)
213
+ end
214
+ end
215
+ "
216
+
217
+ ::CF14.new.bar.should be == 1
218
+ }.should_not raise_error
219
+ end
220
+
221
+ it "should allow define method with normal argument plus array arguments and call with two arguments from fastruby" do
222
+ lambda {
223
+ fastruby "
224
+ class ::CF15
225
+ def foo(a, *x)
226
+ a
227
+ end
228
+
229
+ def bar
230
+ foo(1.2)
231
+ end
232
+ end
233
+ "
234
+
235
+ ::CF15.new.foo(1,2).should be == 1
236
+ }.should_not raise_error
237
+ end
238
+
239
+ it "should raise ArgumentError when trying to call with too few arguments" do
240
+ lambda {
241
+ fastruby "
242
+ class ::CF16
243
+ def foo(a, *x)
244
+ a
245
+ end
246
+ end
247
+ "
248
+
249
+ ::CF16.new.foo
250
+ }.should raise_error(ArgumentError)
251
+ end
252
+
253
+ it "should raise ArgumentError when trying to call with too few arguments from fastruby" do
254
+ lambda {
255
+ fastruby "
256
+ class ::CF17
257
+ def foo(a, *x)
258
+ a
259
+ end
260
+
261
+ def bar
262
+ foo
263
+ end
264
+ end
265
+ "
266
+
267
+ ::CF17.new.bar
268
+ }.should raise_error(ArgumentError)
269
+ end
270
+
271
+ it "should call Array#to_s when infering array type for splat argument" do
272
+ fastruby "
273
+ class ::CF18
274
+ def foo(*x)
275
+ x
276
+ end
277
+ end
278
+ "
279
+
280
+ ::CF18.new.foo(1,2,3,4,5).should be == [1,2,3,4,5]
281
+ end
282
+
283
+
284
+ class ::CFF
285
+
286
+ end
287
+ it "should allow define splat arguments on singleton method" do
288
+ fastruby "
289
+ class ::CF19
290
+ def bar(x)
291
+ def x.foo(*y)
292
+ end
293
+ end
294
+ end
295
+ "
296
+
297
+ x = ::CFF.new
298
+ ::CF19.new.bar(x)
299
+ x.foo(1,2,3,4,5)
300
+ end
301
+
302
+ it "should read splat arguments on singleton method" do
303
+ fastruby "
304
+ class ::CF20
305
+ def bar(x)
306
+ def x.foo(*y)
307
+ y
308
+ end
309
+ end
310
+ end
311
+ "
312
+
313
+ x = ::CFF.new
314
+ ::CF20.new.bar(x)
315
+ x.foo(1,2,3,4,5).should be == [1,2,3,4,5]
316
+ end
317
+ end