mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
57 lines
1.2 KiB
Swift
57 lines
1.2 KiB
Swift
// RUN: %target-run-stdlib-swift
|
|
// REQUIRES: executable_test
|
|
|
|
import StdlibUnittest
|
|
import StdlibCollectionUnittest
|
|
|
|
|
|
var tests = TestSuite("Iterator")
|
|
|
|
// Check to make sure we are actually getting Optionals out of this
|
|
// IteratorProtocol
|
|
tests.test("Range") {
|
|
var w = (1..<2).makeIterator()
|
|
var maybe_one = w.next()
|
|
expectType(Optional<Int>.self, &maybe_one)
|
|
expectEqual(1, maybe_one)
|
|
expectEmpty(w.next())
|
|
}
|
|
|
|
tests.test("RangeIteratorConformsToSequence") {
|
|
for x in (1..<2).makeIterator() {
|
|
expectEqual(1, x)
|
|
}
|
|
}
|
|
|
|
// Test round-trip IteratorProtocol/IteratorProtocol adaptation
|
|
tests.test("IteratorSequence") {
|
|
var r = 1..<7
|
|
var x = MinimalIterator(Array(r))
|
|
var rangeIndex = r.lowerBound
|
|
for a in IteratorSequence(x) {
|
|
expectEqual(rangeIndex, a)
|
|
rangeIndex = r.index(after: rangeIndex)
|
|
}
|
|
expectEqual(rangeIndex, r.upperBound)
|
|
}
|
|
|
|
struct MyIterator : IteratorProtocol {
|
|
var i = 0
|
|
mutating func next() -> Int? {
|
|
if i >= 10 { return nil }
|
|
i += 1
|
|
return i-1
|
|
}
|
|
}
|
|
|
|
extension MyIterator : Sequence {}
|
|
tests.test("IteratorsModelSequenceByDeclaration") {
|
|
var n = 0
|
|
for i in MyIterator() {
|
|
expectEqual(n, i)
|
|
n += 1
|
|
}
|
|
}
|
|
|
|
runAllTests()
|