diff options
| author | Yong He <yonghe@outlook.com> | 2025-06-16 20:37:27 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-06-16 20:37:27 -0700 |
| commit | a4345725a083651c16795d27fedd769f2d7e55ae (patch) | |
| tree | 763c27f687e25e081a87cd266ca1442f5f6624ad /tests/language-feature/interfaces/override-default-method.slang | |
| parent | 07f79b943c3041dd18137d72893af260b75ddcf9 (diff) | |
Require `override` keyword for overriding default interface methods. (#7458)
* Require `override` keyword for overriding default interface methods.
* Update doc.
* Fix test.
Diffstat (limited to 'tests/language-feature/interfaces/override-default-method.slang')
| -rw-r--r-- | tests/language-feature/interfaces/override-default-method.slang | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/language-feature/interfaces/override-default-method.slang b/tests/language-feature/interfaces/override-default-method.slang new file mode 100644 index 000000000..22ae48311 --- /dev/null +++ b/tests/language-feature/interfaces/override-default-method.slang @@ -0,0 +1,40 @@ +//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type + +// Test that a generic interface method can have a body providing default implementation. + +interface IFoo +{ + int getVal(); + int getGreaterVal<int x>() + { + return getVal() + x; + } +} + +struct Impl : IFoo +{ + int getVal() + { + return 42; + } + + // override default implementation for getGreaterVal. + override int getGreaterVal<int x>() + { + return getVal() + x + 1; // Adding 1 to differentiate from the default implementation. + } +} + +int test<T:IFoo>(T v) { return v.getGreaterVal<1>(); } + +//TEST_INPUT: set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4) +RWStructuredBuffer<int> resultBuffer; + +[numthreads(1,1,1)] +void computeMain() +{ + Impl impl = {}; + int result = test(impl); + resultBuffer[0] = result; + // CHECK: 44 +}
\ No newline at end of file |
