diff --git a/src/tests/async/override/override.cs b/src/tests/async/override/override.cs index d55d961880ad30..2d886f01d60d64 100644 --- a/src/tests/async/override/override.cs +++ b/src/tests/async/override/override.cs @@ -15,6 +15,12 @@ public virtual async Task M1() await Task.Yield(); return 1; } + + public virtual async Task M2(T first, T second) + { + await Task.Yield(); + return default(T); + } } class Derived1 : Base @@ -25,6 +31,12 @@ public override async Task M1() await Task.Yield(); return 2; } + + public override async Task M2(T first, T second) + { + await Task.Yield(); + return first; + } } class Derived2 : Derived1 @@ -34,6 +46,12 @@ public override async Task M1() await Task.Yield(); return 3; } + + public override async Task M2(T first, T second) + { + await Task.Yield(); + return second; + } } @@ -45,6 +63,12 @@ public virtual async Task M1() await Task.Yield(); return 11; } + + public virtual async Task M2(T first, T second) + { + await Task.Yield(); + return default(T); + } } class Derived11 : Base1 @@ -54,6 +78,12 @@ public override async Task M1() await Task.Yield(); return 12; } + + public override async Task M2(T first, T second) + { + await Task.Yield(); + return first; + } } class Derived12 : Derived11 @@ -64,30 +94,61 @@ public override async Task M1() await Task.Yield(); return 13; } + + public override async Task M2(T first, T second) + { + await Task.Yield(); + return second; + } } + [MethodImpl(MethodImplOptions.NoInlining)] + static async Task AwaitBaseM1(Base b) => await b.M1(); + + [MethodImpl(MethodImplOptions.NoInlining)] + static async Task AwaitBaseM1(Base1 b) => await b.M1(); + + [MethodImpl(MethodImplOptions.NoInlining)] + static async Task AwaitBaseM2(Base b, T first, T second) => await b.M2(first, second); + + [MethodImpl(MethodImplOptions.NoInlining)] + static async Task AwaitBaseM2(Base1 b, T first, T second) => await b.M2(first, second); [Fact] public static void TestEntryPoint() { Base b = new Derived1(); Assert.Equal(2, b.M1().Result); + Assert.Equal(2, AwaitBaseM1(b).Result); + Assert.Equal(2, b.M2(2, 3).Result); + Assert.Equal(2, AwaitBaseM2(b, 2, 3).Result); b = new Derived2(); Assert.Equal(3, b.M1().Result); + Assert.Equal(3, AwaitBaseM1(b).Result); + Assert.Equal(3, b.M2(2, 3).Result); + Assert.Equal(3, AwaitBaseM2(b, 2, 3).Result); Derived1 d = new Derived2(); Assert.Equal(3, d.M1().Result); + Assert.Equal(3, d.M2(2, 3).Result); Base1 b1 = new Derived11(); Assert.Equal(12, b1.M1().Result); + Assert.Equal(12, AwaitBaseM1(b1).Result); + Assert.Equal(12, b1.M2(12, 13).Result); + Assert.Equal(12, AwaitBaseM2(b1, 12, 13).Result); b1 = new Derived12(); Assert.Equal(13, b1.M1().Result); + Assert.Equal(13, AwaitBaseM1(b1).Result); + Assert.Equal(13, b1.M2(12, 13).Result); + Assert.Equal(13, AwaitBaseM2(b1, 12, 13).Result); Derived11 d1 = new Derived12(); Assert.Equal(13, d1.M1().Result); + Assert.Equal(13, d1.M2(12, 13).Result); } }