summaryrefslogtreecommitdiff
path: root/tests/language-feature/parameters
diff options
context:
space:
mode:
Diffstat (limited to 'tests/language-feature/parameters')
-rw-r--r--tests/language-feature/parameters/generic-func-param-default-arg.slang47
-rw-r--r--tests/language-feature/parameters/generic-func-param-default-arg.slang.expected.txt4
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