mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-26 19:48:01 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
115
IDEHelper/Tests/src/Append.bf
Normal file
115
IDEHelper/Tests/src/Append.bf
Normal file
|
@ -0,0 +1,115 @@
|
|||
#pragma warning disable 168
|
||||
|
||||
using System;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
class Append
|
||||
{
|
||||
class ClassA
|
||||
{
|
||||
int32 mA = 0x11223344;
|
||||
|
||||
[AllowAppend]
|
||||
public this()
|
||||
{
|
||||
uint8* ptr = append uint8[3]*;
|
||||
ptr[0] = 0x55;
|
||||
ptr[1] = 0x66;
|
||||
ptr[2] = 0x77;
|
||||
}
|
||||
}
|
||||
|
||||
class ClassB
|
||||
{
|
||||
[AllowAppend]
|
||||
public this(int16 i, int32 j)
|
||||
{
|
||||
uint8* ptr = append uint8[i]*;
|
||||
for (int k < i)
|
||||
ptr[k] = (uint8)(0xA0 | k);
|
||||
}
|
||||
}
|
||||
|
||||
class ClassC : ClassB
|
||||
{
|
||||
public static int sCallCount;
|
||||
|
||||
static int GetIntVal()
|
||||
{
|
||||
sCallCount++;
|
||||
return 123;
|
||||
}
|
||||
|
||||
[AllowAppend]
|
||||
public this(int16 i) : base(i, (int32)GetIntVal())
|
||||
{
|
||||
uint32* val = append uint32[2]*;
|
||||
val[0] = 0x11223344;
|
||||
val[1] = 0x55667788;
|
||||
}
|
||||
}
|
||||
|
||||
class ClassD
|
||||
{
|
||||
int16 mA = 0x1122;
|
||||
|
||||
[AllowAppend]
|
||||
public this()
|
||||
{
|
||||
uint32* val = append uint32[1]*;
|
||||
uint8* val2 = append uint8[1]*;
|
||||
val[0] = 0x33445566;
|
||||
//Foof();
|
||||
|
||||
val2[0] = 0xBB;
|
||||
}
|
||||
}
|
||||
|
||||
class ClassE : ClassD
|
||||
{
|
||||
[AllowAppend]
|
||||
public this()
|
||||
{
|
||||
uint64* val = append uint64[1]*;
|
||||
val[0] = 0x1020304050607080L;
|
||||
}
|
||||
}
|
||||
|
||||
static void CheckData(Object obj, int lastAllocSize, uint8[] data)
|
||||
{
|
||||
int objSize = typeof(Object).InstanceSize;
|
||||
Test.Assert(lastAllocSize == data.Count + objSize);
|
||||
uint8* ptr = (uint8*)Internal.UnsafeCastToPtr(obj) + objSize;
|
||||
for (int i < data.Count)
|
||||
Test.Assert(ptr[i] == data[i]);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public static void Test()
|
||||
{
|
||||
TrackedAlloc trackedAlloc = scope .();
|
||||
|
||||
int objSize = typeof(Object).InstanceSize;
|
||||
|
||||
let ca = new:trackedAlloc ClassA();
|
||||
CheckData(ca, trackedAlloc.mLastAllocSize, scope .(
|
||||
0x44, 0x33, 0x22, 0x11, 0x55, 0x66, 0x77));
|
||||
delete:trackedAlloc ca;
|
||||
|
||||
let cc = new:trackedAlloc ClassC(10);
|
||||
Test.Assert(ClassC.sCallCount == 1); // This ensures we had a constant evaluation of the size
|
||||
CheckData(cc, trackedAlloc.mLastAllocSize, scope .(
|
||||
0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0x00, 0x00, 0x44, 0x33, 0x22, 0x11,
|
||||
0x88, 0x77, 0x66, 0x55));
|
||||
delete:trackedAlloc cc;
|
||||
|
||||
let ce = new:trackedAlloc ClassE();
|
||||
CheckData(cc, trackedAlloc.mLastAllocSize, scope .(
|
||||
0x22, 0x11, 0x00, 0x00, 0x66, 0x55, 0x44, 0x33, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x10
|
||||
));
|
||||
delete:trackedAlloc ce;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue