blob: ba69eea19f93f802e6649eda2bc656e1da3fd9d5 [file] [log] [blame]
// RUN: %target-run-simple-swift
// REQUIRES: executable_test
import StdlibUnittest
import DifferentiationUnittest
var ExistentialTests = TestSuite("Existential")
protocol A {
@differentiable(wrt: x)
func a(_ x: Tracked<Float>) -> Tracked<Float>
}
func b(g: A) -> Tracked<Float> { return (3.0 as Tracked<Float>).gradient() { x in g.a(x) } }
struct B : A {
@differentiable(wrt: x)
func a(_ x: Tracked<Float>) -> Tracked<Float> { return x * 5.0 }
}
ExistentialTests.testWithLeakChecking("vjp/adjoint constructed with existentials.") {
expectEqual(5.0, b(g: B()))
}
runAllTests()