From 801aa3b44254341018a1acbe754f2ce3b0900e2a Mon Sep 17 00:00:00 2001 From: Yong He Date: Wed, 16 Nov 2022 12:17:49 -0800 Subject: Clean up type checking of higher order expressions. (#2519) * Clean up type checking of higher order expressions. * Replace `goto` with `break` to pacify clang. * Fix. * Fixes. * Fix more tests. * Fix lowerWitnessTable parameter error. * Exclude attributes from ast printing. Co-authored-by: Yong He --- tests/autodiff/high-order-diff-operator.slang | 35 ++++++++++++++++++++++ .../high-order-diff-operator.slang.expected.txt | 5 ++++ 2 files changed, 40 insertions(+) create mode 100644 tests/autodiff/high-order-diff-operator.slang create mode 100644 tests/autodiff/high-order-diff-operator.slang.expected.txt (limited to 'tests/autodiff') diff --git a/tests/autodiff/high-order-diff-operator.slang b/tests/autodiff/high-order-diff-operator.slang new file mode 100644 index 000000000..dca67e9f3 --- /dev/null +++ b/tests/autodiff/high-order-diff-operator.slang @@ -0,0 +1,35 @@ +//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute -shaderobj -output-using-type +//TEST(compute, vulkan):COMPARE_COMPUTE_EX:-vk -compute -shaderobj -output-using-type + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[ForwardDifferentiable] +float mySqr(float x) +{ + return x * x; +} + +[ForwardDifferentiable] +float f(float x) +{ + return mySqr(x * x); +} + +[numthreads(1, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + // Given f(x) = x^4, + // f''(x) = 12 * x^2 + // Expect f''(4) = 192 + float.Differential t = 2; + outputBuffer[0] = __fwd_diff(__fwd_diff(f))( + DifferentialPair>( + DifferentialPair(4.0, 1.0), DifferentialPair(1.0, 0.0))).d.d; + + // sin''(x) = cos'(x) = -sin(x). + // Expect sin''(Pi/2) = -1. + outputBuffer[1] = __fwd_diff(__fwd_diff(sin))( + DifferentialPair>( + DifferentialPair(float.getPi()/2, 1.0), DifferentialPair(1.0, 0.0))).d.d; +} diff --git a/tests/autodiff/high-order-diff-operator.slang.expected.txt b/tests/autodiff/high-order-diff-operator.slang.expected.txt new file mode 100644 index 000000000..305a8e111 --- /dev/null +++ b/tests/autodiff/high-order-diff-operator.slang.expected.txt @@ -0,0 +1,5 @@ +type: float +192.000000 +-1.000000 +0.000000 +0.000000 -- cgit v1.2.3