From 1f3130055956dbe441f7fc6849b189624a05f7df Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 1 Sep 2022 10:01:36 -0700 Subject: Public interface for arithmetic types in stdlib. (#2389) --- .../language-feature/generics/arithmetic-ops.slang | 44 ++++++++++++++++++++++ .../generics/arithmetic-ops.slang.expected.txt | 5 +++ 2 files changed, 49 insertions(+) create mode 100644 tests/language-feature/generics/arithmetic-ops.slang create mode 100644 tests/language-feature/generics/arithmetic-ops.slang.expected.txt (limited to 'tests') diff --git a/tests/language-feature/generics/arithmetic-ops.slang b/tests/language-feature/generics/arithmetic-ops.slang new file mode 100644 index 000000000..d2f1af47f --- /dev/null +++ b/tests/language-feature/generics/arithmetic-ops.slang @@ -0,0 +1,44 @@ +//TEST(compute):COMPARE_COMPUTE: -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE: -vk -shaderobj -output-using-type +T simpleTest(T v0, T v1) +{ + if (v0 > T(0)) + { + return v0 + v1; + } + else + { + return -v0 * v1; + } +} + +interface IMyInterface : IArithmetic +{ + int myMethod(); +} + +extension float : IMyInterface +{ + int myMethod() { return 4; } +} + +extension double : IMyInterface +{ + int myMethod() { return 8; } +} + +int genTest(T v0, T v1) +{ + vector v = vector(v0, v1); + return (v.x + v.y).myMethod(); +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + outputBuffer[tid] = int(simpleTest(1.0f, 2.0f)) + genTest(1.0f, 2.0f); +} diff --git a/tests/language-feature/generics/arithmetic-ops.slang.expected.txt b/tests/language-feature/generics/arithmetic-ops.slang.expected.txt new file mode 100644 index 000000000..5c4343b55 --- /dev/null +++ b/tests/language-feature/generics/arithmetic-ops.slang.expected.txt @@ -0,0 +1,5 @@ +type: int32_t +7 +7 +7 +7 -- cgit v1.2.3