diff options
| author | Yong He <yonghe@outlook.com> | 2024-10-20 09:28:13 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-20 09:28:13 -0700 |
| commit | 307315a7305e76529837fd1cdb677f534d5f539b (patch) | |
| tree | ba39e96ba2e9b3d62d1213aab2f1cc54febe451a /tests/language-feature | |
| parent | 9936178dd3efb026bfa142512a2bf061d7a75ab5 (diff) | |
Properly check switch case. (#5341)
Diffstat (limited to 'tests/language-feature')
| -rw-r--r-- | tests/language-feature/enums/enum-cast.slang | 22 | ||||
| -rw-r--r-- | tests/language-feature/enums/enum-switch-2.slang | 30 | ||||
| -rw-r--r-- | tests/language-feature/enums/enum-switch.slang | 31 | ||||
| -rw-r--r-- | tests/language-feature/single-arg-ctor-call.slang | 19 |
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); +} |
