summaryrefslogtreecommitdiff
path: root/tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs')
-rw-r--r--tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs68
1 files changed, 68 insertions, 0 deletions
diff --git a/tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs b/tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs
new file mode 100644
index 0000000000..93b214dfb7
--- /dev/null
+++ b/tests/src/Loader/classloader/DefaultInterfaceMethods/sharedgenerics/sharedgenerics.cs
@@ -0,0 +1,68 @@
+using System;
+
+interface IFoo<T>
+{
+ Type Foo(T a);
+}
+
+interface IBar<in T>
+{
+ Type Bar(T b);
+}
+
+class FooBar<T, U> : IFoo<T>, IBar<U>
+{
+ public Type Foo(T a)
+ {
+ Console.WriteLine("At IFoo.Foo:Arg={0}, TypeOf(T)={1}", a.ToString(), typeof(T));
+ return typeof(T);
+ }
+
+ public Type Bar(U b)
+ {
+ Console.WriteLine("At IBar.Bar:Arg={0}, TypeOf(T)={1}", b.ToString(), typeof(U));
+ return typeof(U);
+ }
+}
+
+class Program
+{
+ public static int Main()
+ {
+ FooBar<string, object> fooBar = new FooBar<string, object>();
+ IFoo<string> foo = (IFoo<string>) fooBar;
+ IBar<string[]> bar = (IBar<string[]>) fooBar;
+
+ Console.WriteLine("Calling IFoo<string>.Foo on FooBar<string, object> - expecting default method IFoo<string>.Foo");
+ Test.Assert(foo.Foo("ABC") == typeof(string), "Calling IFoo<string>.Foo on FooBar<string, object>");
+
+ Console.WriteLine("Calling IBar<string[]>.Foo on FooBar<string, object> - expecting default method IBar<object>.Foo");
+ Test.Assert(bar.Bar(new string[] { "ABC" }) == typeof(object), "Calling IBar<object>.Bar on FooBar<string, object>");
+
+ return Test.Ret();
+ }
+}
+
+class Test
+{
+ private static bool Pass = true;
+
+ public static int Ret()
+ {
+ return Pass? 100 : 101;
+ }
+
+ public static void Assert(bool cond, string msg)
+ {
+ if (cond)
+ {
+ Console.WriteLine("PASS");
+ }
+ else
+ {
+ Console.WriteLine("FAIL: " + msg);
+ Pass = false;
+ }
+ }
+}
+