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:
parent
ee06457b2f
commit
46cc3d088b
5 changed files with 75 additions and 22 deletions
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue