Skip to content

Commit cba18c3

Browse files
authored
asyncLazySequence: harmonize unit tests nomenclature (#190)
1 parent c0fdfdb commit cba18c3

File tree

1 file changed

+57
-49
lines changed

1 file changed

+57
-49
lines changed

Tests/AsyncAlgorithmsTests/TestLazy.swift

+57-49
Original file line numberDiff line numberDiff line change
@@ -13,97 +13,102 @@
1313
import AsyncAlgorithms
1414

1515
final class TestLazy: XCTestCase {
16-
func test_array() async {
17-
let source = [1, 2, 3, 4]
18-
let expected = source
19-
let sequence = source.async
20-
21-
var actual = [Int]()
16+
func test_lazy_outputs_elements_and_finishes_when_source_is_array() async {
17+
let expected = [1, 2, 3, 4]
18+
let sequence = expected.async
19+
20+
var collected = [Int]()
2221
for await item in sequence {
23-
actual.append(item)
22+
collected.append(item)
2423
}
2524

26-
XCTAssertEqual(expected, actual)
25+
XCTAssertEqual(expected, collected)
2726
}
2827

29-
func test_set() async {
30-
let source: Set = [1, 2, 3, 4]
31-
let expected = source
32-
let sequence = source.async
28+
func test_lazy_outputs_elements_and_finishes_when_source_is_set() async {
29+
let expected: Set = [1, 2, 3, 4]
30+
let sequence = expected.async
3331

34-
var actual = Set<Int>()
32+
var collected = Set<Int>()
3533
for await item in sequence {
36-
actual.insert(item)
34+
collected.insert(item)
3735
}
3836

39-
XCTAssertEqual(expected, actual)
37+
XCTAssertEqual(expected, collected)
4038
}
4139

42-
func test_empty() async {
43-
let source = EmptyCollection<Int>()
40+
func test_lazy_finishes_without_elements_when_source_is_empty() async {
4441
let expected = [Int]()
45-
let sequence = source.async
42+
let sequence = expected.async
4643

47-
var actual = [Int]()
44+
var collected = [Int]()
4845
for await item in sequence {
49-
actual.append(item)
46+
collected.append(item)
5047
}
5148

52-
XCTAssertEqual(expected, actual)
49+
XCTAssertEqual(expected, collected)
5350
}
5451

55-
func test_iteration() async {
56-
let source = ReportingSequence([1, 2, 3])
52+
func test_lazy_triggers_expected_iterator_events_when_source_is_iterated() async {
53+
let expected = [1, 2, 3]
54+
let expectedEvents = [
55+
ReportingSequence<Int>.Event.makeIterator,
56+
.next,
57+
.next,
58+
.next,
59+
.next
60+
]
61+
let source = ReportingSequence(expected)
5762
let sequence = source.async
63+
5864
XCTAssertEqual(source.events, [])
65+
5966
var collected = [Int]()
6067
for await item in sequence {
6168
collected.append(item)
6269
}
63-
XCTAssertEqual(collected, [1, 2, 3])
64-
XCTAssertEqual(source.events, [
65-
.makeIterator,
70+
71+
XCTAssertEqual(expected, collected)
72+
XCTAssertEqual(expectedEvents, source.events)
73+
}
74+
75+
func test_lazy_stops_triggering_iterator_events_when_source_is_pastEnd() async {
76+
let expected = [1, 2, 3]
77+
let expectedEvents = [
78+
ReportingSequence<Int>.Event.makeIterator,
6679
.next,
6780
.next,
6881
.next,
6982
.next
70-
])
71-
}
72-
73-
func test_manual_iteration() async {
74-
let source = ReportingSequence([1, 2, 3])
83+
]
84+
let source = ReportingSequence(expected)
7585
let sequence = source.async
86+
7687
XCTAssertEqual(source.events, [])
88+
7789
var collected = [Int]()
7890
var iterator = sequence.makeAsyncIterator()
7991
while let item = await iterator.next() {
8092
collected.append(item)
8193
}
82-
XCTAssertEqual(collected, [1, 2, 3])
83-
XCTAssertEqual(source.events, [
84-
.makeIterator,
85-
.next,
86-
.next,
87-
.next,
88-
.next
89-
])
94+
95+
XCTAssertEqual(expected, collected)
96+
XCTAssertEqual(expectedEvents, source.events)
97+
9098
let pastEnd = await iterator.next()
99+
91100
XCTAssertEqual(pastEnd, nil)
92101
// ensure that iterating past the end does not invoke next again
93-
XCTAssertEqual(source.events, [
94-
.makeIterator,
95-
.next,
96-
.next,
97-
.next,
98-
.next
99-
])
102+
XCTAssertEqual(expectedEvents, source.events)
100103
}
101104

102-
func test_cancellation() async {
103-
let source = Indefinite(value: "test")
104-
let sequence = source.async
105+
func test_lazy_finishes_when_task_is_cancelled() async {
105106
let finished = expectation(description: "finished")
106107
let iterated = expectation(description: "iterated")
108+
109+
let source = Indefinite(value: "test")
110+
let sequence = source.async
111+
107112
let task = Task {
108113
var firstIteration = false
109114
for await _ in sequence {
@@ -114,11 +119,14 @@ final class TestLazy: XCTestCase {
114119
}
115120
finished.fulfill()
116121
}
122+
117123
// ensure the other task actually starts
118124
wait(for: [iterated], timeout: 1.0)
125+
119126
// cancellation should ensure the loop finishes
120127
// without regards to the remaining underlying sequence
121128
task.cancel()
129+
122130
wait(for: [finished], timeout: 1.0)
123131
}
124132
}

0 commit comments

Comments
 (0)