forked from sl4m/gnu_smalltalk_koans
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TestBoolean.st
72 lines (54 loc) · 2.06 KB
/
TestBoolean.st
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
Koan subclass: TestBoolean [
<comment: 'A collection of boolean tests.'>
truthValue: condition [
condition ifTrue: [ ^#trueStuff ].
condition ifFalse: [ ^#falseStuff ].
]
testTrueIsTreatedAsTrue [
self expect: (self fillMeIn) toEqual: (self truthValue: true).
]
testFalseIsTreatedAsFalse [
self expect: (self fillMeIn) toEqual: (self truthValue: false).
]
testNilIsNotTreatedAsABoolean [
self expect: [ self truthValue: nil ] toRaise: (self fillMeIn).
]
testIfTrueAndIfFalseOnlyRespondsToBooleans [
self expect: [ self truthValue: 1 ] toRaise: (self fillMeIn).
self expect: [ self truthValue: 0 ] toRaise: (self fillMeIn).
self expect: [ self truthValue: #() ] toRaise: (self fillMeIn).
self expect: [ self truthValue: 'String' ] toRaise: (self fillMeIn).
self expect: [ self truthValue: '' ] toRaise: (self fillMeIn).
]
testAndShortCircuit [
| x y z |
x := 4. y := 10. z := 0.
self expect: (self fillMeIn) toEqual: (x < 5 and: [ z := 1. y < 11 ]).
self expect: (self fillMeIn) toEqual: z.
z := 0.
self expect: (self fillMeIn) toEqual: (x < 4 and: [ z := 1. y < 11 ]).
self expect: (self fillMeIn) toEqual: z.
"How is this different from '&'?"
]
testOrShortCircuit [
| x y z |
x := 4. y := 10. z := 0.
self expect: (self fillMeIn) toEqual: (x > 5 or: [ z := 1. y > 9]).
self expect: (self fillMeIn) toEqual: z.
z := 0.
self expect: (self fillMeIn) toEqual: (x > 9 sqrt or: [ z := 1. y > 9]).
self expect: (self fillMeIn) toEqual: z.
]
testEqv [
self expect: (self fillMeIn) toEqual: (true eqv: true).
self expect: (self fillMeIn) toEqual: (true eqv: false).
self expect: (self fillMeIn) toEqual: (false eqv: true).
self expect: (self fillMeIn) toEqual: (false eqv: false).
]
testXor [
self expect: (self fillMeIn) toEqual: (true xor: true).
self expect: (self fillMeIn) toEqual: (true xor: false).
self expect: (self fillMeIn) toEqual: (false xor: true).
self expect: (self fillMeIn) toEqual: (false xor: false).
]
]