mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The SIL type lowering logic for AutoDiff gets the substituted generic signature mixed up with the invocation generic signature, so it tries to ask questions about DependentMemberTypes in a signature with no requirements. This triggers assertions when the requirement machine is enabled. Disable the requirement machine until this is fixed.
34 lines
1.1 KiB
Swift
34 lines
1.1 KiB
Swift
// RUN: %target-run-simple-swift(-Xfrontend -requirement-machine=off)
|
|
// REQUIRES: executable_test
|
|
|
|
import _Differentiation
|
|
import StdlibUnittest
|
|
|
|
// Test differentiable collection higher order functions:
|
|
// `differentiableMap(_:)` and `differentiableReduce(_:_:)`.
|
|
|
|
var CollectionHOFTests = TestSuite("CollectionHigherOrderFunctions")
|
|
|
|
let array: [Float] = [1, 2, 3, 4, 5]
|
|
|
|
CollectionHOFTests.test("differentiableMap(_:)") {
|
|
func double(_ array: [Float]) -> [Float] {
|
|
array.differentiableMap { $0 * $0 }
|
|
}
|
|
expectEqual([], pullback(at: array, of: double)([]))
|
|
expectEqual([0], pullback(at: array, of: double)([0]))
|
|
expectEqual([2], pullback(at: array, of: double)([1]))
|
|
expectEqual([2, 4, 6, 8, 10], pullback(at: array, of: double)([1, 1, 1, 1, 1]))
|
|
}
|
|
|
|
CollectionHOFTests.test("differentiableReduce(_:_:)") {
|
|
func product(_ array: [Float]) -> Float {
|
|
array.differentiableReduce(1) { $0 * $1 }
|
|
}
|
|
expectEqual([1], gradient(at: [0], of: product))
|
|
expectEqual([1], gradient(at: [1], of: product))
|
|
expectEqual([120, 60, 40, 30, 24], gradient(at: array, of: product))
|
|
}
|
|
|
|
runAllTests()
|