blob: 4b374dabc1a313ddb6940e7d74e1f480d19f9f4a [file] [log] [blame]
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
import StdlibUnittest
#if os(macOS)
import Darwin.C
#else
import Glibc
#endif
// Test suite for differentiable higher order functions for collections
// such as `differentiableMap(_:)` and `differentiableReduce(_:)`.
var CollectionHOFTests = TestSuite("CollectionHOF")
let xx: [Float] = [1, 2, 3, 4, 5]
CollectionHOFTests.test("differentiableMap(_:)") {
func double(_ xx: [Float]) -> [Float] {
xx.differentiableMap { $0 * $0 }
}
expectEqual([], pullback(at: xx, in: double)([]))
expectEqual([0], pullback(at: xx, in: double)([0]))
expectEqual([2], pullback(at: xx, in: double)([1]))
expectEqual([2, 4, 6, 8, 10], pullback(at: xx, in: double)([1, 1, 1, 1, 1]))
}
CollectionHOFTests.test("differentiableReduce(_:)") {
func product(_ xx: [Float]) -> Float {
xx.differentiableReduce(1) { $0 * $1 }
}
expectEqual([1], gradient(at: [0], in: product))
expectEqual([1], gradient(at: [1], in: product))
expectEqual([120, 60, 40, 30, 24], gradient(at: xx, in: product))
}
runAllTests()