Skip to content

Commit 2943d63

Browse files
committed
Update tests not to use Tracked<T> for now. Also XFAIL SIMD tests
1 parent 7024755 commit 2943d63

File tree

9 files changed

+679
-79
lines changed

9 files changed

+679
-79
lines changed

test/AutoDiff/stdlib/simd.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
// REQUIRES: executable_test
33

44
// Would fail due to unavailability of swift_autoDiffCreateLinearMapContext.
5+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
6+
We cannot use `SIMD` :( */
7+
// XFAIL: *
58

69
import _Differentiation
710
import StdlibUnittest

test/AutoDiff/validation-test/class_differentiation.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
// NOTE: Verify whether forward-mode differentiation crashes. It currently does.
33
// RUN: not --crash %target-swift-frontend -enable-experimental-forward-mode-differentiation -emit-sil %s
44
// REQUIRES: executable_test
5+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
6+
We cannot use `Tracked<T>` :( */
7+
// XFAIL: *
58

69
import StdlibUnittest
710
import DifferentiationUnittest

test/AutoDiff/validation-test/differentiable_property.swift

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,144 @@ import DifferentiationUnittest
99

1010
var E2EDifferentiablePropertyTests = TestSuite("E2EDifferentiableProperty")
1111

12+
struct TangentSpace : AdditiveArithmetic {
13+
let x, y: Float
14+
}
15+
16+
extension TangentSpace : Differentiable {
17+
typealias TangentVector = TangentSpace
18+
}
19+
20+
struct Space {
21+
/// `x` is a computed property with a custom vjp.
22+
var x: Float {
23+
@differentiable(reverse)
24+
get { storedX }
25+
set { storedX = newValue }
26+
}
27+
28+
@derivative(of: x)
29+
func vjpX() -> (value: Float, pullback: (Float) -> TangentSpace) {
30+
return (x, { v in TangentSpace(x: v, y: 0) } )
31+
}
32+
33+
private var storedX: Float
34+
35+
@differentiable(reverse)
36+
var y: Float
37+
38+
init(x: Float, y: Float) {
39+
self.storedX = x
40+
self.y = y
41+
}
42+
}
43+
44+
extension Space : Differentiable {
45+
typealias TangentVector = TangentSpace
46+
mutating func move(by offset: TangentSpace) {
47+
x.move(by: offset.x)
48+
y.move(by: offset.y)
49+
}
50+
}
51+
52+
E2EDifferentiablePropertyTests.test("computed property") {
53+
let actualGrad = gradient(at: Space(x: 0, y: 0)) { (point: Space) -> Float in
54+
return 2 * point.x
55+
}
56+
let expectedGrad = TangentSpace(x: 2, y: 0)
57+
expectEqual(expectedGrad, actualGrad)
58+
}
59+
60+
E2EDifferentiablePropertyTests.test("stored property") {
61+
let actualGrad = gradient(at: Space(x: 0, y: 0)) { (point: Space) -> Float in
62+
return 3 * point.y
63+
}
64+
let expectedGrad = TangentSpace(x: 0, y: 3)
65+
expectEqual(expectedGrad, actualGrad)
66+
}
67+
68+
struct GenericMemberWrapper<T : Differentiable> : Differentiable {
69+
// Stored property.
70+
@differentiable(reverse)
71+
var x: T
72+
73+
func vjpX() -> (T, (T.TangentVector) -> GenericMemberWrapper.TangentVector) {
74+
return (x, { TangentVector(x: $0) })
75+
}
76+
}
77+
78+
E2EDifferentiablePropertyTests.test("generic stored property") {
79+
let actualGrad = gradient(at: GenericMemberWrapper<Float>(x: 1)) { point in
80+
return 2 * point.x
81+
}
82+
let expectedGrad = GenericMemberWrapper<Float>.TangentVector(x: 2)
83+
expectEqual(expectedGrad, actualGrad)
84+
}
85+
86+
struct ProductSpaceSelfTangent : AdditiveArithmetic {
87+
let x, y: Float
88+
}
89+
90+
extension ProductSpaceSelfTangent : Differentiable {
91+
typealias TangentVector = ProductSpaceSelfTangent
92+
}
93+
94+
E2EDifferentiablePropertyTests.test("fieldwise product space, self tangent") {
95+
let actualGrad = gradient(at: ProductSpaceSelfTangent(x: 0, y: 0)) { (point: ProductSpaceSelfTangent) -> Float in
96+
return 5 * point.y
97+
}
98+
let expectedGrad = ProductSpaceSelfTangent(x: 0, y: 5)
99+
expectEqual(expectedGrad, actualGrad)
100+
}
101+
102+
struct ProductSpaceOtherTangentTangentSpace : AdditiveArithmetic {
103+
let x, y: Float
104+
}
105+
106+
extension ProductSpaceOtherTangentTangentSpace : Differentiable {
107+
typealias TangentVector = ProductSpaceOtherTangentTangentSpace
108+
}
109+
110+
struct ProductSpaceOtherTangent {
111+
var x, y: Float
112+
}
113+
114+
extension ProductSpaceOtherTangent : Differentiable {
115+
typealias TangentVector = ProductSpaceOtherTangentTangentSpace
116+
mutating func move(by offset: ProductSpaceOtherTangentTangentSpace) {
117+
x.move(by: offset.x)
118+
y.move(by: offset.y)
119+
}
120+
}
121+
122+
E2EDifferentiablePropertyTests.test("fieldwise product space, other tangent") {
123+
let actualGrad = gradient(
124+
at: ProductSpaceOtherTangent(x: 0, y: 0)
125+
) { (point: ProductSpaceOtherTangent) -> Float in
126+
return 7 * point.y
127+
}
128+
let expectedGrad = ProductSpaceOtherTangentTangentSpace(x: 0, y: 7)
129+
expectEqual(expectedGrad, actualGrad)
130+
}
131+
132+
E2EDifferentiablePropertyTests.test("computed property") {
133+
struct TF_544 : Differentiable {
134+
var value: Float
135+
@differentiable(reverse)
136+
var computed: Float {
137+
get { value }
138+
set { value = newValue }
139+
}
140+
}
141+
let actualGrad = gradient(at: TF_544(value: 2.4)) { x in
142+
return x.computed * x.computed
143+
}
144+
let expectedGrad = TF_544.TangentVector(value: 4.8)
145+
expectEqual(expectedGrad, actualGrad)
146+
}
147+
148+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
149+
We cannot use `Tracked<T>` :(
12150
struct TangentSpace : AdditiveArithmetic {
13151
let x, y: Tracked<Float>
14152
}
@@ -144,5 +282,6 @@ E2EDifferentiablePropertyTests.testWithLeakChecking("computed property") {
144282
let expectedGrad = TF_544.TangentVector(value: 4.8)
145283
expectEqual(expectedGrad, actualGrad)
146284
}
285+
*/
147286

148287
runAllTests()

test/AutoDiff/validation-test/existential.swift

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,39 @@ var ExistentialTests = TestSuite("Existential")
88

99
protocol A {
1010
@differentiable(reverse, wrt: x)
11-
func a(_ x: Tracked<Float>) -> Tracked<Float>
11+
func a(_ x: Float) -> Float
1212
}
13-
func b(g: A) -> Tracked<Float> {
13+
func b(g: A) -> Float {
1414
return gradient(at: 3) { x in g.a(x) }
1515
}
1616

1717
struct B : A {
1818
@differentiable(reverse, wrt: x)
19-
func a(_ x: Tracked<Float>) -> Tracked<Float> { return x * 5 }
19+
func a(_ x: Float) -> Float { return x * 5 }
2020
}
2121

22-
ExistentialTests.testWithLeakChecking("Existential method VJP") {
22+
ExistentialTests.test("Existential method VJP-Tracked") {
2323
expectEqual(5.0, b(g: B()))
2424
}
2525

26+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
27+
We cannot use `Tracked<T>` :(
28+
protocol ATracked {
29+
@differentiable(reverse, wrt: x)
30+
func a(_ x: Tracked<Float>) -> Tracked<Float>
31+
}
32+
func b(g: ATracked) -> Tracked<Float> {
33+
return gradient(at: 3) { x in g.a(x) }
34+
}
35+
36+
struct BTracked : ATracked {
37+
@differentiable(reverse, wrt: x)
38+
func a(_ x: Tracked<Float>) -> Tracked<Float> { return x * 5 }
39+
}
40+
41+
ExistentialTests.testWithLeakChecking("Existential method VJP-Tracked") {
42+
expectEqual(5.0, b(g: BTracked()))
43+
}
44+
*/
45+
2646
runAllTests()

test/AutoDiff/validation-test/forward_mode_simd.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// RUN: %target-run-simple-swift(-Xfrontend -enable-experimental-forward-mode-differentiation)
22
// REQUIRES: executable_test
3+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
4+
We cannot use `SIMD` :( */
5+
// XFAIL: *
36

47
import StdlibUnittest
58
import DifferentiationUnittest

test/AutoDiff/validation-test/forward_mode_simple.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// RUN: %target-run-simple-swift(-Xfrontend -enable-experimental-forward-mode-differentiation)
22
// REQUIRES: executable_test
3+
/* Temporary disabled until https://github.com/swiftlang/swift/issues/84840 is fixed
4+
We cannot use `Tracked<T>` :( */
5+
// XFAIL: *
36

47
import StdlibUnittest
58
import DifferentiationUnittest

0 commit comments

Comments
 (0)