From 307315a7305e76529837fd1cdb677f534d5f539b Mon Sep 17 00:00:00 2001 From: Yong He Date: Sun, 20 Oct 2024 09:28:13 -0700 Subject: Properly check switch case. (#5341) --- tests/language-feature/enums/enum-cast.slang | 22 ++++++++++++++++ tests/language-feature/enums/enum-switch-2.slang | 30 ++++++++++++++++++++++ tests/language-feature/enums/enum-switch.slang | 31 +++++++++++++++++++++++ tests/language-feature/single-arg-ctor-call.slang | 19 ++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 tests/language-feature/enums/enum-cast.slang create mode 100644 tests/language-feature/enums/enum-switch-2.slang create mode 100644 tests/language-feature/enums/enum-switch.slang create mode 100644 tests/language-feature/single-arg-ctor-call.slang (limited to 'tests/language-feature') 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 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 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 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 outputBuffer; + +[numthreads(1, 1, 1)] +void computeMain(int3 dispatchThreadID: SV_DispatchThreadID) +{ + SSS s = SSS(0); + // CHECK: 1 + outputBuffer[0] = int(s.v.x + 1); +} -- cgit v1.2.3