summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/diagnostics/interface-requirement-not-satisfied.slang.expected1
-rw-r--r--tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected1
-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
4 files changed, 53 insertions, 0 deletions
diff --git a/tests/diagnostics/interface-requirement-not-satisfied.slang.expected b/tests/diagnostics/interface-requirement-not-satisfied.slang.expected
index d7614186b..464ffde25 100644
--- a/tests/diagnostics/interface-requirement-not-satisfied.slang.expected
+++ b/tests/diagnostics/interface-requirement-not-satisfied.slang.expected
@@ -3,6 +3,7 @@ standard error = {
tests/diagnostics/interface-requirement-not-satisfied.slang(10): error 38100: type 'T' does not provide required interface member 'bar'
struct T : IFoo
^~~~
+tests/diagnostics/interface-requirement-not-satisfied.slang(7): note: see declaration of 'bar'
}
standard output = {
}
diff --git a/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected
index 3c9ef58d5..cc4f310ad 100644
--- a/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected
+++ b/tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang.expected
@@ -3,6 +3,7 @@ standard error = {
tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang(10): error 38100: type 'Counter' does not provide required interface member 'processValue'
struct Counter : IThing
^~~~~~
+tests/diagnostics/interfaces/mutating-impl-of-non-mutating-req.slang(7): note: see declaration of 'processValue'
}
standard output = {
}
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