Files
swift-mirror/test/stdlib/Experimental.swift
2016-09-01 16:51:43 -07:00

74 lines
1.5 KiB
Swift

// RUN: %target-run-simple-swift
// REQUIRES: executable_test
import SwiftExperimental
import StdlibUnittest
var ExperimentalTestSuite = TestSuite("Experimental")
ExperimentalTestSuite.test("ComposeOperator/SmokeTest") {
func incr(_ x: Int) -> Int { return x + 1 }
func twice(_ x: Int) -> Int { return x * 2 }
expectEqual(7, (incr twice)(3))
}
/*
FIXME: this test crashes SILGen.
<rdar://problem/19150374> Unimplemented: abstraction difference in l-value
ExperimentalTestSuite.test("ComposeOperator/Types") {
struct A {}
struct B {}
struct C {}
func a(_: A) -> B { return B() }
func b(_: B) -> C { return C() }
var result = b a
typealias Expected = A -> C
expectType(Expected.self, &result)
}
*/
ExperimentalTestSuite.test("ComposeOperator/CountCalls") {
struct A {}
struct B {}
struct C {}
var aCalled = 0
var bCalled = 0
func a(_: A) -> B { aCalled += 1; return B() }
func b(_: B) -> C { bCalled += 1; return C() }
var result = b a
expectEqual(0, aCalled)
expectEqual(0, bCalled)
result(A())
expectEqual(1, aCalled)
expectEqual(1, bCalled)
}
// A modified variant of the test above.
struct A {}
struct B {}
struct C {}
var aCalled = 0
var bCalled = 0
func a(_: A) -> B { aCalled += 1; return B() }
func b(_: B) -> C { bCalled += 1; return C() }
ExperimentalTestSuite.test("ComposeOperator/CountCalls/Workaround") {
var result = b a
expectEqual(0, aCalled)
expectEqual(0, bCalled)
result(A())
expectEqual(1, aCalled)
expectEqual(1, bCalled)
}
runAllTests()