summaryrefslogtreecommitdiffstats
path: root/tests/language-feature
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2024-10-20 09:28:13 -0700
committerGitHub <noreply@github.com>2024-10-20 09:28:13 -0700
commit307315a7305e76529837fd1cdb677f534d5f539b (patch)
treeba39e96ba2e9b3d62d1213aab2f1cc54febe451a /tests/language-feature
parent9936178dd3efb026bfa142512a2bf061d7a75ab5 (diff)
Properly check switch case. (#5341)
Diffstat (limited to 'tests/language-feature')
-rw-r--r--tests/language-feature/enums/enum-cast.slang22
-rw-r--r--tests/language-feature/enums/enum-switch-2.slang30
-rw-r--r--tests/language-feature/enums/enum-switch.slang31
-rw-r--r--tests/language-feature/single-arg-ctor-call.slang19
4 files changed, 102 insertions, 0 deletions
diff --git a/tests/language-feature/enums/enum-cast.slang b/tests/language-feature/enums/enum-cast.slang
new file mode 100644
index 000000000..fe82c5a5c
--- /dev/null
+++ b/tests/language-feature/enums/enum-cast.slang
@@ -0,0 +1,22 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
+
+enum MyFlags
+{
+ A,B,C
+}
+
+bool test(MyFlags f1)
+{
+ return f1 == MyFlags(uint(1));
+}
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[numthreads(1, 1, 1)]
+void computeMain(int3 dispatchThreadID: SV_DispatchThreadID)
+{
+ int outVal = test(MyFlags.B) ? 1 : 0;
+ // CHECK: 1
+ outputBuffer[0] = outVal;
+}
diff --git a/tests/language-feature/enums/enum-switch-2.slang b/tests/language-feature/enums/enum-switch-2.slang
new file mode 100644
index 000000000..f5266f35d
--- /dev/null
+++ b/tests/language-feature/enums/enum-switch-2.slang
@@ -0,0 +1,30 @@
+//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-slang -compute -shaderobj -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type
+
+enum class E : uint32_t
+{
+ A,
+ B,
+ C
+}
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+[NumThreads(1,1,1)]
+void computeMain(int i : SV_DispatchThreadID)
+{
+ switch (i)
+ {
+ case int(E::A):
+ outputBuffer[0] = 1;
+ break;
+ case int(E::B):
+ outputBuffer[0] = 2;
+ break;
+ case int(E::C):
+ outputBuffer[0] = 3;
+ break;
+ }
+ // CHECK: 1
+}
diff --git a/tests/language-feature/enums/enum-switch.slang b/tests/language-feature/enums/enum-switch.slang
new file mode 100644
index 000000000..600c2e31e
--- /dev/null
+++ b/tests/language-feature/enums/enum-switch.slang
@@ -0,0 +1,31 @@
+//TEST(compute):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-slang -compute -shaderobj -output-using-type
+//TEST(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=CHECK):-vk -compute -shaderobj -output-using-type
+
+enum class E : uint32_t
+{
+ A,
+ B,
+ C
+}
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<uint> outputBuffer;
+
+[NumThreads(1,1,1)]
+void computeMain(int i : SV_DispatchThreadID)
+{
+ E e = E(i);
+ switch (e)
+ {
+ case E::A:
+ outputBuffer[0] = 1;
+ break;
+ case E::B:
+ outputBuffer[0] = 2;
+ break;
+ case E::C:
+ outputBuffer[0] = 3;
+ break;
+ }
+ // CHECK: 1
+} \ No newline at end of file
diff --git a/tests/language-feature/single-arg-ctor-call.slang b/tests/language-feature/single-arg-ctor-call.slang
new file mode 100644
index 000000000..a4c55c2ed
--- /dev/null
+++ b/tests/language-feature/single-arg-ctor-call.slang
@@ -0,0 +1,19 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -vk -shaderobj
+
+struct SSS
+{
+ float3 v;
+ __init(float3 a) { v= a; }
+}
+
+//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer
+RWStructuredBuffer<int> outputBuffer;
+
+[numthreads(1, 1, 1)]
+void computeMain(int3 dispatchThreadID: SV_DispatchThreadID)
+{
+ SSS s = SSS(0);
+ // CHECK: 1
+ outputBuffer[0] = int(s.v.x + 1);
+}