Removed long-since defunct LLVM bootstrap code. Any LLVM strategy will have to be...
[cslatevm.git] / tests / range.slate
blob5df662d9e2b8b439e11b8150c5dc51607198ca26
1 UnitTests addPrototype: #Range derivedFrom: {TestCase}.
3 tc@(UnitTests Range traits) testInclusion1
4 "Verify that all elements of an Range are found in that Range."
5 [| range |
6   range: (25 to: 50 by: 1).
7   tc assert: (range allSatisfy: [| :item | range includes: item]).
8 ].
10 tc@(UnitTests Range traits) testInclusion2
11 "Same as testInclusion1, but for a downward Range."
12 [| range |
13   range:  (-1 to: -33 by: -1).
14   tc assert: (range allSatisfy: [| :item | range includes: item]).
17 tc@(UnitTests Range traits) testInclusion3
18 "Verify that elements that are in range2, but not in range, are detected as missing in
19 range."
20 [| range range2 found notFound |
21   range: (25 to: 50 by: 1).
22   range2: (0 to: 100).
23   found: (notFound: 0).
24   range2 do:
25     [| :idx | (range includes: idx)
26          ifTrue: [found: found + 1]
27          ifFalse: [notFound: notFound + 1]].
28   tc assert: found = range size.
29   tc assert: range2 size - range size = notFound.
32 tc@(UnitTests Range traits) testInclusion4
33 "This test additionally verifies that elements that are in range2, but not in range,
34 are detected as missing in range."
35 [| range range2 found notFound |
36   range: (-25 to: -50 by: -1).
37   range2: (0 to: -100 by: -1).
38   found: (notFound: 0).
39   range2 do:
40     [| :idx | (range includes: idx)
41          ifTrue: [found: found + 1]
42          ifFalse: [notFound: notFound + 1]].
43   tc assert: found = range size.
44   tc assert: range2 size - range size = notFound.
47 tc@(UnitTests Range traits) testIndex1
48 [| range array |
49   range: (25 to: 50 by: 1).
50   tc assert: (range allSatisfy: [| :item | (range at: (range indexOf: item)) = item]).
51   "Now we do it a second time (to avoid the use of Range at:) "
52   array: (range as: {}).
53   tc assert: (range allSatisfy: [| :item | (array at: (range indexOf: item)) = item]).
56 tc@(UnitTests Range traits) testIndex2
57 [| range array |
58   range: (-25 to: -50 by: -1).
59   tc assert: (range allSatisfy: [| :item | (range at: (range indexOf: item)) = item]).
60   "Now we do it a second time (to avoid the use of Range at:) "
61   array: (range as: {}).
62   tc assert: (range allSatisfy: [| :item | (array at: (range indexOf: item)) = item]).
65 tc@(UnitTests Range traits) testIndex3
66  "For suitably chosen displacements, a shifted range is disjunct from the unshifted one."
67 [| range |
68   range: (-25 to: -50 by: -5).
69   1 to: 4 do:
70    [| :shift | tc assert: (range + shift allSatisfy: [| :item | (range indexOf: item) = Nil])].
73 tc@(UnitTests Range traits) testInclusionFloat
74 [| start stop step candidate factor range1 range2 |
75   start: 1.
76   stop: 5.
77   step: 1.
78   factor: 100000000000000.
79   candidate: 2.5.
80   range1: (start to: stop by: 1).
81   range2: (start * factor to: stop * factor by: step * factor).
82   tc assert: (range1 includes: candidate) not.
83   tc assert: (range2 includes: candidate * factor) not.
86 tc@(UnitTests Range traits) testIndexFloat
87 "Complements testInclusionFloat."
88 [| start stop step candidate missingCandidate factor range1 range2 |
89   start: 1.
90   stop: 5.
91   step: 1.
92   factor: 100000000000000.
93   candidate: 2.
94   missingCandidate: 2.5.
95   range1: (start to: stop by: step).
96   range2: (start * factor to: stop * factor by: step * factor).
97   tc assert: (range1 indexOf: candidate) = 1.
98   tc assert: (range2 indexOf: candidate * factor) = 1.
99   tc assert: (range1 indexOf: missingCandidate) = Nil.
100   tc assert: (range2 indexOf: missingCandidate * factor) = Nil.
103 tc@(UnitTests Range traits) testInclusionNonFloat
104 "The example is similar to testInclusionFloat, but it avoids the use of a Float.
105 The elements of the Ranges are now Integers and Fractions."
106 [| start stop step candidate factor range1 range2 |
107   start: 1.
108   stop: 5.
109   step: 1.
110   factor: 100000000000000.
111   candidate: 5 / 2.
112   range1: (start to: stop by: 1).
113   range2: (start * factor to: stop * factor by: step * factor).
114   tc assert: (range1 includes: candidate) not.
115   tc assert: (range2 includes: candidate * factor) not.
118 t@(UnitTests Range traits) suite
119 [t suiteForSelectors: {
120   #testInclusionNonFloat.
121   #testIndexFloat.
122   #testInclusionFloat.
123   #testIndex3.
124   #testIndex2.
125   #testIndex1.
126   #testInclusion4.
127   #testInclusion3.
128   #testInclusion2.
129   #testInclusion1.