Files
swift-mirror/test/Interop/Cxx/stdlib/use-std-list-generic.swift
Nate CookandElsa Keirouz fbc2a41fe4 Enable BorrowingForLoop and BorrowingSequence flags by default (#90545)
This PR converts these two experimental feature flags to regular
language flags – includes #90017.

Co-authored-by: Elsa Keirouz <e_keirouz@apple.com>
2026-07-10 23:18:55 -05:00

67 lines
1.9 KiB
Swift

// RUN: %target-run-simple-swift(-I %S/Inputs -Xfrontend -enable-experimental-cxx-interop)
// Test iterating through a list using the borrowing iterators (currently behind a feature flag).
// REQUIRES: executable_test
import StdlibUnittest
import StdList
import CxxStdlib
var StdListTestSuite = TestSuite("StdList")
func getNumber(_ x: borrowing NonCopyable) -> Int32 {
return x.number
}
@available(SwiftStdlib 6.4, *)
func testIterable<I: Iterable>(
_ iterable: borrowing I,
_ getNumber: (borrowing I.Element) -> Int32
) where I.Element: ~Copyable, I: ~Copyable & ~Escapable, I.Failure == Never {
var iterator = iterable.makeBorrowingIterator()
var counter = 0
while true {
var span = iterator.nextSpan()
if (span.count == 0) { break }
for i in 0..<span.count {
counter += 1
expectEqual(getNumber(span[i]), Int32(counter))
}
}
expectEqual(counter, 3)
}
@available(SwiftStdlib 6.4, *)
func testCxxIterable<I: CxxIterable>(
_ iterable: borrowing I,
_ getNumber: (borrowing I.Element) -> Int32
) where I.Element: ~Copyable, I: ~Copyable & ~Escapable {
var iterator = iterable.makeBorrowingIterator()
var counter = 0
while true {
var span = iterator.nextSpan()
if (span.count == 0) { break }
for i in 0..<span.count {
counter += 1
expectEqual(getNumber(span[i]), Int32(counter))
}
}
expectEqual(counter, 3)
}
StdListTestSuite.test("ListOfInt conforms to CxxIterable") {
guard #available(SwiftStdlib 6.4, *) else { return }
let lst = makeListInt()
testIterable(lst, { $0 })
testCxxIterable(lst, { $0 })
}
StdListTestSuite.test("ListOfNonCopyable conforms to CxxIterable") {
guard #available(SwiftStdlib 6.4, *) else { return }
var lst = makeListOfNonCopyable()
testIterable(lst, getNumber)
testCxxIterable(lst, getNumber)
}
runAllTests()