@@ -15,6 +15,8 @@ struct SubscriptGetTest {
15
15
/// The values that should be expected by slicing the UBP, or `nil` if the
16
16
/// test is expected to crash.
17
17
let expectedValues: [Int]?
18
+ /// Same as `expectedValues`, but for closed ranges. `nil` if no difference.
19
+ let expectedClosedValues: [Int]?
18
20
let loc: SourceLoc
19
21
20
22
static var elementCount = (end - start)
@@ -35,10 +37,12 @@ struct SubscriptGetTest {
35
37
36
38
init(
37
39
rangeSelection: RangeSelection, expectedValues: [Int]? = nil,
40
+ expectedClosedValues: [Int]? = nil,
38
41
file: String = #file, line: UInt = #line
39
42
) {
40
43
self.rangeSelection = rangeSelection
41
44
self.expectedValues = expectedValues
45
+ self.expectedClosedValues = expectedClosedValues ?? expectedValues
42
46
self.loc = SourceLoc(file, line, comment: "test data")
43
47
}
44
48
}
@@ -48,8 +52,12 @@ let subscriptGetTests : [SubscriptGetTest] = [
48
52
SubscriptGetTest(rangeSelection: .emptyRange, expectedValues: []),
49
53
50
54
// Valid, edges.
51
- SubscriptGetTest(rangeSelection: .leftEdge, expectedValues: [0]),
52
- SubscriptGetTest(rangeSelection: .rightEdge, expectedValues: [19]),
55
+ SubscriptGetTest(rangeSelection: .leftEdge,
56
+ expectedValues: [],
57
+ expectedClosedValues: [0]),
58
+ SubscriptGetTest(rangeSelection: .rightEdge,
59
+ expectedValues: [],
60
+ expectedClosedValues: [19]),
53
61
54
62
// Valid, internal.
55
63
SubscriptGetTest(rangeSelection: .leftHalf,
@@ -60,6 +68,12 @@ let subscriptGetTests : [SubscriptGetTest] = [
60
68
expectedValues: [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),
61
69
SubscriptGetTest(rangeSelection: .full,
62
70
expectedValues: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),
71
+ SubscriptGetTest(rangeSelection: .offsets(2, 4),
72
+ expectedValues: [2, 3],
73
+ expectedClosedValues: [2, 3, 4]),
74
+ SubscriptGetTest(rangeSelection: .offsets(16, 19),
75
+ expectedValues: [16, 17, 18],
76
+ expectedClosedValues: [16, 17, 18, 19]),
63
77
64
78
// Invalid, bottom out of bounds.
65
79
SubscriptGetTest(rangeSelection: .offsets(-1, -1)),
@@ -181,13 +195,17 @@ ${SelfName}TestSuite.test("badNilCount")
181
195
}
182
196
183
197
% for RangeName in ['range', 'countableRange', 'closedRange', 'countableClosedRange']:
184
- ${SelfName}TestSuite.test("subscript/get").forEach(in: subscriptGetTests) {
198
+ ${SelfName}TestSuite.test("subscript/${RangeName}/ get").forEach(in: subscriptGetTests) {
185
199
(test) in
186
200
201
+ let expectedValues: [Int]?
187
202
% if 'closed' in RangeName.lower():
188
203
if test.rangeSelection.isEmpty {
189
204
return
190
205
}
206
+ expectedValues = test.expectedClosedValues
207
+ % else:
208
+ expectedValues = test.expectedValues
191
209
% end
192
210
193
211
let elementCount = SubscriptGetTest.elementCount
@@ -198,10 +216,10 @@ ${SelfName}TestSuite.test("subscript/get").forEach(in: subscriptGetTests) {
198
216
199
217
let range = test.rangeSelection.${RangeName}(in: buffer)
200
218
201
- if test. expectedValues == nil { expectCrashLater() }
219
+ if expectedValues == nil { expectCrashLater() }
202
220
let slice = buffer[range]
203
221
expectEqual(
204
- test. expectedValues!,
222
+ expectedValues!,
205
223
slice.map { $0.value },
206
224
stackTrace: SourceLocStack().with(test.loc)
207
225
)
0 commit comments