summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/language-feature/interfaces/is-as-dynamic.slang2
-rw-r--r--tests/language-feature/types/optional.slang53
-rw-r--r--tests/language-feature/types/optional.slang.expected.txt2
3 files changed, 57 insertions, 0 deletions
diff --git a/tests/language-feature/interfaces/is-as-dynamic.slang b/tests/language-feature/interfaces/is-as-dynamic.slang
index 4499db53a..1b163361a 100644
--- a/tests/language-feature/interfaces/is-as-dynamic.slang
+++ b/tests/language-feature/interfaces/is-as-dynamic.slang
@@ -3,6 +3,8 @@
// Test that `is` and `as` operators works as intended in dynamic dispatch.
//TEST(compute):COMPARE_COMPUTE: -shaderobj
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -vk -compute
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -cpu -compute
//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
RWStructuredBuffer<int> outputBuffer;
diff --git a/tests/language-feature/types/optional.slang b/tests/language-feature/types/optional.slang
new file mode 100644
index 000000000..ae1711cd7
--- /dev/null
+++ b/tests/language-feature/types/optional.slang
@@ -0,0 +1,53 @@
+// optional.slang
+
+// Test that `Optional` construction and conversion works.
+
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -compute
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -vk -compute
+//TEST(compute):COMPARE_COMPUTE_EX:-slang -cpu -compute
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[anyValueSize(8)]
+interface IFoo
+{
+ int method();
+}
+
+//TEST_INPUT: type_conformance Impl1:IFoo = 0
+struct Impl1 : IFoo
+{
+ int data;
+ int method() { return data; }
+}
+
+Optional<Impl1> getVal(bool shouldHaveVal)
+{
+ if (shouldHaveVal)
+ {
+ Impl1 val;
+ val.data = 1;
+ return val;
+ }
+ return none;
+}
+
+[numthreads(1, 1, 1)]
+void computeMain(uint3 dispatchThreadID: SV_DispatchThreadID)
+{
+ let v1 = getVal(true);
+ let v2 = getVal(false);
+ int result = 0;
+ if (v1.hasValue)
+ result += v1.value.data;
+ if (v2.hasValue)
+ result += v2.value.data;
+ outputBuffer[0] = result;
+ if (v1 != none)
+ result += v1.value.data;
+ if (!(v2 == none))
+ result += v2.value.data;
+ outputBuffer[1] = result;
+
+}
diff --git a/tests/language-feature/types/optional.slang.expected.txt b/tests/language-feature/types/optional.slang.expected.txt
new file mode 100644
index 000000000..1191247b6
--- /dev/null
+++ b/tests/language-feature/types/optional.slang.expected.txt
@@ -0,0 +1,2 @@
+1
+2