summaryrefslogtreecommitdiff
path: root/tests/language-feature/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'tests/language-feature/extensions')
-rw-r--r--tests/language-feature/extensions/generic-extension-2.slang2
-rw-r--r--tests/language-feature/extensions/generic-extension-5.slang52
2 files changed, 54 insertions, 0 deletions
diff --git a/tests/language-feature/extensions/generic-extension-2.slang b/tests/language-feature/extensions/generic-extension-2.slang
index 2728a73d6..d56455e3d 100644
--- a/tests/language-feature/extensions/generic-extension-2.slang
+++ b/tests/language-feature/extensions/generic-extension-2.slang
@@ -1,4 +1,6 @@
//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj
+
+#pragma warning(disable:30856)
interface IFoo<T>
{
T getFirst();
diff --git a/tests/language-feature/extensions/generic-extension-5.slang b/tests/language-feature/extensions/generic-extension-5.slang
new file mode 100644
index 000000000..e6466d614
--- /dev/null
+++ b/tests/language-feature/extensions/generic-extension-5.slang
@@ -0,0 +1,52 @@
+//TEST:INTERPRET(filecheck=CHECK):
+interface IGen<A>
+{
+ associatedtype TB;
+ TB getVal();
+}
+
+struct Foo1<A> : IGen<A>
+{
+ typealias TB = int;
+ int val = 0;
+ TB getVal()
+ {
+ return val;
+ }
+}
+
+struct Foo2<A> : IGen<A>
+{
+ typealias TB = int;
+ int val = 0;
+ TB getVal()
+ {
+ return val;
+ }
+}
+
+struct Logic<A1, C1 : IGen<A1>, C2 : IGen<A1>>
+{
+ int val = 0;
+}
+
+extension<A, C1, C2> Logic<A, C1, C2>
+ where C1 : IGen<A>
+ where C2 : IGen<A>
+ where C1.TB == C2.TB
+{
+ [mutating]
+ void setVal(int dataIn)
+ {
+ val = dataIn;
+ }
+}
+
+void main()
+{
+ Logic<int, Foo1<int>, Foo2<int>> logic;
+ logic.setVal(42);
+ int result = logic.val;
+ printf("Result: %d\n", result);
+ // CHECK: Result: 42
+} \ No newline at end of file