-
-
Notifications
You must be signed in to change notification settings - Fork 921
/
testLoops.rb
79 lines (62 loc) · 1.14 KB
/
testLoops.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
require 'test/minirunit'
test_check "Test Loops:"
i = 0
j = 0
a = []
while (i < 10)
break if (i == 6)
j = j + 1
a.push i
redo if (j < 2)
j = 0
i = i + 1
end
test_ok([0,0,1,1,2,2,3,3,4,4,5,5] == a)
# Make sure do while works
t = 0
loop_count = 0
begin
t = t > 0 ? 0 : 1
loop_count = loop_count + 1
end while t > 0
test_ok(2, t)
# make sure until and while don't fire before condition checking
x = 1
until true do; x = 2; end
while false; x = 2; end
test_equal(1, x)
class C
def initialize(list)
@list = list
end
def each(*args, &block)
@list.each(*args, &block)
end
end
def l( y, z )
x = ":"
for a in y
for b in z
x.concat b
x.concat a
end
end
test_equal("c", a)
test_equal("3", b)
x
end
test_equal(":1a2a3a1b2b3b1c2c3c", l(C.new(["a", "b", "c"]), C.new(["1","2","3"])))
a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5]
1.times do
i = 0
begin
ch = a.shift
test_equal(b[i], ch)
i = i + 1
end until ch.nil?
end
# Had to disable these because compiler doesn't handle this syntax at the moment
#test_equal(nil, while false; end)
#
#test_equal(:foo, while true; break :foo; end)