summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'tests/language-feature/interfaces')
-rw-r--r--tests/language-feature/interfaces/generic-value-parameter-via-interface.slang44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/language-feature/interfaces/generic-value-parameter-via-interface.slang b/tests/language-feature/interfaces/generic-value-parameter-via-interface.slang
new file mode 100644
index 000000000..abc1131e8
--- /dev/null
+++ b/tests/language-feature/interfaces/generic-value-parameter-via-interface.slang
@@ -0,0 +1,44 @@
+//TEST:INTERPRET(filecheck=CHECK):
+
+interface IFoo
+{
+ void test();
+};
+
+struct Foo<let GenericValue : uint> : IFoo
+{
+ void test()
+ {
+ printf("GenericValue=%d, value=%d\n", GenericValue, value);
+ }
+
+ uint value;
+};
+
+void testInterfaceAsParameter(IFoo foo)
+{
+ foo.test();
+}
+
+void testInterfaceAsGeneric<T:IFoo>(T foo)
+{
+ foo.test();
+}
+
+void main()
+{
+ // CHECK-COUNT-2:GenericValue=0, value=0
+ Foo<0> foo0 = {0};
+ testInterfaceAsParameter(foo0);
+ testInterfaceAsGeneric(foo0);
+
+ // CHECK-COUNT-2:GenericValue=1, value=1
+ Foo<1> foo1 = {1};
+ testInterfaceAsParameter(foo1);
+ testInterfaceAsGeneric(foo1);
+
+ // CHECK-COUNT-2:GenericValue=2, value=2
+ Foo<2> foo2 = {2};
+ testInterfaceAsParameter(foo2);
+ testInterfaceAsGeneric(foo2);
+}