Files
swift-mirror/test/AutoDiff/stdlib/collection_higher_order_functions.swift

35 lines
1.1 KiB
Swift

// RUN: %target-run-simple-swift
// REQUIRES: executable_test
// REQUIRES: rdar83890579
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()