diff options
Diffstat (limited to 'tests/language-feature/parameters')
| -rw-r--r-- | tests/language-feature/parameters/generic-func-param-default-arg.slang | 47 | ||||
| -rw-r--r-- | tests/language-feature/parameters/generic-func-param-default-arg.slang.expected.txt | 4 |
2 files changed, 51 insertions, 0 deletions
diff --git a/tests/language-feature/parameters/generic-func-param-default-arg.slang b/tests/language-feature/parameters/generic-func-param-default-arg.slang new file mode 100644 index 000000000..b7e8d6fa2 --- /dev/null +++ b/tests/language-feature/parameters/generic-func-param-default-arg.slang @@ -0,0 +1,47 @@ +// generic-func-param-default-arg.slang + +// Test that generic functions can have default argument values on their parameters. + +//TEST(compute):COMPARE_COMPUTE: -shaderobj +//TEST_DISABLED:SIMPLE:-target hlsl -entry computeMain -dump-ir + + +interface IValue +{ + __init(); + + This plusA(This other); + This plusB(int other); +} + +T sum<T : IValue>(T value, T other = T(), int extra = 0) +{ + return value.plusA(other).plusB(extra); +} + +struct Simple : IValue +{ + int val; + + __init() { val = 0; } + __init(int val) { this.val = val; } + + Simple plusA(Simple other) { return Simple(val + other.val); } + Simple plusB(int other) { return Simple(val + other); } +} + +int test(int val) +{ + let s = Simple(val); + return sum<Simple>(s).val + 16*sum(s).val; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=gBuffer +RWStructuredBuffer<int> gBuffer; + +[shader("compute")] +[numthreads(4)] +void computeMain(int tid : SV_DispatchThreadID) +{ + gBuffer[tid] = test(tid); +} diff --git a/tests/language-feature/parameters/generic-func-param-default-arg.slang.expected.txt b/tests/language-feature/parameters/generic-func-param-default-arg.slang.expected.txt new file mode 100644 index 000000000..d4cb1cc00 --- /dev/null +++ b/tests/language-feature/parameters/generic-func-param-default-arg.slang.expected.txt @@ -0,0 +1,4 @@ +0 +11 +22 +33 |
