//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type //TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-cuda -compute -shaderobj -output-using-type interface IFoo { associatedtype Parameters : IDifferentiablePtrType; property DifferentialPtrPair parametersDual { get; } } extension T: IDifferentiablePtrType { typealias Differential = T; } struct Foo : IFoo { typealias Parameters = Array; property DifferentialPtrPair parametersDual { get { Parameters primal = {T(1)}; Parameters diff = {T(2)}; return DifferentialPtrPair(primal, diff); } } } //TEST_INPUT:ubuffer(data=[0 0], stride=4):out,name=output RWStructuredBuffer output; [shader("compute")] [numthreads(1, 1, 1)] void computeMain() { Foo foo; let res = foo.parametersDual; output[0] = res.p[0]; output[1] = res.d[0]; // CHECK: 1.0 // CHECK: 2.0 }