diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/language-feature/extensions/interface-extension.slang | 50 | ||||
| -rw-r--r-- | tests/language-feature/extensions/interface-extension.slang.expected.txt | 4 |
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/language-feature/extensions/interface-extension.slang b/tests/language-feature/extensions/interface-extension.slang new file mode 100644 index 000000000..824aa3450 --- /dev/null +++ b/tests/language-feature/extensions/interface-extension.slang @@ -0,0 +1,50 @@ +// interface-extension.slang + +// Test that an `extension` applied to an interface type works as users expect + +//TEST(compute):COMPARE_COMPUTE: + +interface ICounter +{ + [mutating] void add(int value); +} + +struct MyCounter : ICounter +{ + int _state = 0; + + [mutating] void add(int value) { _state += value; } +} + +extension ICounter +{ + [mutating] void increment() + { + this.add(1); + } +} + +void helper<T : ICounter>(in out T counter) +{ + counter.increment(); +} + +int test(int value) +{ + MyCounter counter = { value }; + counter.increment(); + helper(counter); + return counter._state; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID) +{ + uint tid = dispatchThreadID.x; + int inVal = tid; + int outVal = test(inVal); + outputBuffer[tid] = outVal; +} diff --git a/tests/language-feature/extensions/interface-extension.slang.expected.txt b/tests/language-feature/extensions/interface-extension.slang.expected.txt new file mode 100644 index 000000000..f8affbc14 --- /dev/null +++ b/tests/language-feature/extensions/interface-extension.slang.expected.txt @@ -0,0 +1,4 @@ +2 +3 +4 +5 |
