This repository was archived by the owner on May 25, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathQuickSmash.st
More file actions
67 lines (46 loc) · 1.55 KB
/
QuickSmash.st
File metadata and controls
67 lines (46 loc) · 1.55 KB
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
Object subclass: QuickSmash [
| version |
version := '0.0.1'.
QuickSmash class >> version [ ^version ]
QuickSmash class >> genInteger: a upTo: b [
"Answers a random integer.
Thin wrapper around SequenceableCollection atRandom."
^(a to: b) atRandom.
]
QuickSmash class >> genBool [
"Answers a random boolean."
^(self genInteger: 0 upTo: 1) = 1.
]
QuickSmash class >> genByte [
"Answers a random byte."
^self genInteger: 0 upTo: 255.
]
QuickSmash class >> genChar [
"Answers a random character."
^(self genInteger: 0 upTo: 127) asCharacter.
]
QuickSmash class >> genArray: generator [
"Answers an array of random length populated by a generator closure."
^0 to: (self genInteger: 0 upTo: 100) collect: [ :i |
generator value.
].
]
QuickSmash class >> genString [
"Answers a string of random length."
^(self genArray: [ self genChar. ]) asString.
]
QuickSmash class >> testProperty: property withGenerators: generators [
"Tests property closure with random arguments created by generator closures."
1 to: 100 do: [ :i |
| args |
args := generators collect: [ :g | g value. ].
(property valueWithArguments: args) ifFalse: [
Transcript show: '*** Failed! '.
args printNl.
^false
].
].
Transcript show: '+++ OK, passed 100 tests.'; cr.
^true
]
]