diff options
| author | Yong He <yonghe@outlook.com> | 2024-08-27 18:48:41 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-27 18:48:41 -0700 |
| commit | 4f6f827e26ffcb9b850ef8a8b7f7b4beb5addb7a (patch) | |
| tree | e8f20e798866df7e10067ce5b7ae22f9dc57ff84 /tests | |
| parent | fbaa444d890f58fabc5933b0c28048d2c5d862c0 (diff) | |
Add functor syntax support. (#4926)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/language-feature/ifunc/diff-functor.slang | 8 | ||||
| -rw-r--r-- | tests/language-feature/ifunc/functor.slang | 40 | ||||
| -rw-r--r-- | tests/language-feature/ifunc/ifunc.slang | 6 |
3 files changed, 47 insertions, 7 deletions
diff --git a/tests/language-feature/ifunc/diff-functor.slang b/tests/language-feature/ifunc/diff-functor.slang index 04b0be44f..117cce76b 100644 --- a/tests/language-feature/ifunc/diff-functor.slang +++ b/tests/language-feature/ifunc/diff-functor.slang @@ -6,7 +6,7 @@ struct DiffFunctor : IDifferentiableFunc<float, float> { [Differentiable] - float __call(float p) + float operator()(float p) { return p + 1; } @@ -14,19 +14,19 @@ struct DiffFunctor : IDifferentiableFunc<float, float> float apply(IMutatingFunc<float, float> f, float p) { - return f.__call(p); + return f(p); } [Differentiable] float applyDiff(IDifferentiableFunc<float, float> f, float p) { - return f.__call(p); + return f(p); } [Differentiable] TR applyDiffGen<TR : IDifferentiable, each TP : IDifferentiable>(IDifferentiableFunc<TR, TP> f, expand each TP p) { - return f.__call(expand each p); + return f(expand each p); } //TEST_INPUT:ubuffer(data=[0 3 2 2], stride=4):out,name=outputBuffer diff --git a/tests/language-feature/ifunc/functor.slang b/tests/language-feature/ifunc/functor.slang new file mode 100644 index 000000000..73987cbbf --- /dev/null +++ b/tests/language-feature/ifunc/functor.slang @@ -0,0 +1,40 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-dx12 -use-dxil -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK):-vk -shaderobj -output-using-type + +struct Functor : IMutatingFunc<float, float> +{ + int context; + + [mutating] + float operator()(float p) + { + context += (int)p; + return context; + } +} + +float apply<T:IMutatingFunc<float,float>>(inout T f, float p) +{ + return f(p); +} + +//TEST_INPUT:ubuffer(data=[0 3 2 2], stride=4):out,name=outputBuffer +RWStructuredBuffer<uint> outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(uint tid: SV_DispatchThreadID) +{ + Functor f; + f.context = 0; + + f(1.0f); + f.operator()(1.0f); // explicit operator () call should also work. + + apply(f, 2.0f); + apply(f, 3.0f); + + // CHECK: 7 + outputBuffer[0] = (uint)f.context; +} diff --git a/tests/language-feature/ifunc/ifunc.slang b/tests/language-feature/ifunc/ifunc.slang index f270299b3..6c946f4df 100644 --- a/tests/language-feature/ifunc/ifunc.slang +++ b/tests/language-feature/ifunc/ifunc.slang @@ -5,7 +5,7 @@ struct Functor : IFunc<int, int, bool> { - int __call(int p, bool t) + int operator()(int p, bool t) { return p + 1; } @@ -15,7 +15,7 @@ struct MutatingFunctor : IMutatingFunc<int, int, bool> { int data = 0; [mutating] - int __call(int p, bool t) + int operator()(int p, bool t) { data++; return p + 1; @@ -24,7 +24,7 @@ struct MutatingFunctor : IMutatingFunc<int, int, bool> int apply(IMutatingFunc<int, int, bool> f, int p) { - return f.__call(p, true); + return f(p, true); } //TEST_INPUT:ubuffer(data=[0 3 2 2], stride=4):out,name=outputBuffer |
