diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/language-feature/generics/partial-generic-argument-inference.slang | 49 | ||||
| -rw-r--r-- | tests/language-feature/generics/partial-generic-argument-inference.slang.expected.txt | 5 |
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/language-feature/generics/partial-generic-argument-inference.slang b/tests/language-feature/generics/partial-generic-argument-inference.slang new file mode 100644 index 000000000..4ee50b88d --- /dev/null +++ b/tests/language-feature/generics/partial-generic-argument-inference.slang @@ -0,0 +1,49 @@ +//TEST(compute):COMPARE_COMPUTE: -shaderobj -output-using-type +//TEST(compute):COMPARE_COMPUTE: -vk -shaderobj -output-using-type + +// This test confirms that we can provide a subset of the required generic +// arguments to a generic function, and have the rest be inferred from the +// types of the value arguments. + +interface IConvertible +{ + __init( int value ); + + property value : int { get; } +} + +ToType convert< ToType : IConvertible, FromType : IConvertible >( FromType fromVal ) +{ + return ToType( fromVal.value*0x10 ); +} + +struct A : IConvertible +{ + int value; + __init(int v) { this.value = v; } +} + +struct B : IConvertible +{ + int value; + __init(int v) { this.value = v; } +} + + +int test( int value ) +{ + A a = A(value); + B b = convert<B>(a); + + return a.value + b.value; +} + +//TEST_INPUT:ubuffer(data=[0 0 0 0], stride=4):out,name=outputBuffer +RWStructuredBuffer<int> outputBuffer; + +[numthreads(4, 1, 1)] +void computeMain(int3 dispatchThreadID : SV_DispatchThreadID) +{ + int tid = dispatchThreadID.x; + outputBuffer[tid] = test(tid); +} diff --git a/tests/language-feature/generics/partial-generic-argument-inference.slang.expected.txt b/tests/language-feature/generics/partial-generic-argument-inference.slang.expected.txt new file mode 100644 index 000000000..d7be6af66 --- /dev/null +++ b/tests/language-feature/generics/partial-generic-argument-inference.slang.expected.txt @@ -0,0 +1,5 @@ +type: int32_t +0 +17 +34 +51 |
