1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-17 23:56:05 +02:00

Improved function binding to virtual methods

This commit is contained in:
Brian Fiete 2021-07-05 14:36:39 -07:00
parent ee06457b2f
commit 46cc3d088b
5 changed files with 75 additions and 22 deletions

View file

@ -8,19 +8,32 @@ namespace Tests
{
class ClassA
{
int mA = 123;
public int mA = 123;
public int GetA(float f)
{
return mA + (int)f;
}
public virtual int GetB(float f)
{
return mA + (int)f + 1000;
}
public int GetT<T>(T val) where T : var
{
return mA + (int)val;
}
}
class ClassB : ClassA
{
public override int GetB(float f)
{
return mA + (int)f + 2000;
}
}
struct StructA
{
int mA = 123;
@ -159,7 +172,9 @@ namespace Tests
[Test]
public static void TestBasics()
{
ClassA ca = scope .();
ClassA ca = scope ClassA();
ClassA ca2 = scope ClassB();
StructA sa = .();
StructB sb = .();
@ -169,6 +184,17 @@ namespace Tests
func0 = => ca.GetT<float>;
Test.Assert(func0(ca, 100.0f) == 223);
func0 = => ca.GetB;
Test.Assert(func0(ca, 100.0f) == 1223);
func0 = => ca2.GetB;
Test.Assert(func0(ca, 100.0f) == 2223);
func0 = => ClassA.GetB;
Test.Assert(func0(ca, 100.0f) == 1223);
func0 = => ClassB.GetB;
Test.Assert(func0(ca, 100.0f) == 2223);
func0 = => ca.GetA;
function int (StructA this, float f) func1 = => sa.GetA;
var func1b = func1;
Test.Assert(func1(sa, 100.0f) == 23623);