summaryrefslogtreecommitdiffstats
path: root/tests/language-feature/interfaces/default-method.slang
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2025-06-13 22:13:00 -0700
committerGitHub <noreply@github.com>2025-06-13 22:13:00 -0700
commit6a23949f07f4eba38086b656e7073ce3bf8cd2fe (patch)
tree132bbe330b6027d323c74175686d006605e4da6d /tests/language-feature/interfaces/default-method.slang
parente72b3325663ab6d4bb791742574b031f0df6328a (diff)
Allow interface methods to have default implementations. (#7439)
Diffstat (limited to 'tests/language-feature/interfaces/default-method.slang')
-rw-r--r--tests/language-feature/interfaces/default-method.slang45
1 files changed, 45 insertions, 0 deletions
diff --git a/tests/language-feature/interfaces/default-method.slang b/tests/language-feature/interfaces/default-method.slang
new file mode 100644
index 000000000..98bebc1e3
--- /dev/null
+++ b/tests/language-feature/interfaces/default-method.slang
@@ -0,0 +1,45 @@
+//TEST(compute):COMPARE_COMPUTE(filecheck-buffer=CHECK): -shaderobj -output-using-type
+
+// Test that interface method can have a body providing default implementation.
+
+interface IFoo
+{
+ int getVal();
+ int getGreaterVal()
+ {
+ return getVal() + 1;
+ }
+ static int getStaticVal()
+ {
+ return 100;
+ }
+}
+
+struct Impl : IFoo
+{
+ int getVal()
+ {
+ return 42;
+ }
+
+ // Using the default implementation for getGreaterVal.
+}
+
+int test<T:IFoo>(T v) { return v.getGreaterVal(); }
+
+int test2<T:IFoo>() { return T.getStaticVal();}
+
+//TEST_INPUT: set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<int> resultBuffer;
+
+[numthreads(1,1,1)]
+void computeMain()
+{
+ Impl impl = {};
+ int result = test(impl);
+ resultBuffer[0] = result;
+ // CHECK: 43
+
+ resultBuffer[1] = test2<Impl>();
+ // CHECK: 100
+} \ No newline at end of file