mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
75 lines
1.2 KiB
Beef
75 lines
1.2 KiB
Beef
using System;
|
|
|
|
namespace Tests
|
|
{
|
|
class Unions
|
|
{
|
|
// Not really a union
|
|
[Union]
|
|
struct UnionA
|
|
{
|
|
public int32 mInt32;
|
|
}
|
|
|
|
[Union]
|
|
struct UnionB
|
|
{
|
|
public int32 mInt32;
|
|
public float mFloat;
|
|
}
|
|
|
|
[Union]
|
|
struct UnionC
|
|
{
|
|
public int32 mInt32 = 0;
|
|
public float mFloat;
|
|
|
|
public this()
|
|
{
|
|
}
|
|
}
|
|
|
|
[Union]
|
|
struct UnionD : UnionC
|
|
{
|
|
public int16 mInt16;
|
|
}
|
|
|
|
[Union]
|
|
public struct UnionE
|
|
{
|
|
public uint32 values;
|
|
|
|
public int r
|
|
{
|
|
get { return uint8((this.values & 0xFF000000) >> 24); }
|
|
set mut { this.values = (this.values & 0x00FFFFFF) | ((uint32(value) & 0x000000FF) << 24); }
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
static void TestBasics()
|
|
{
|
|
UnionA ua = .();
|
|
ua.mInt32 = 123;
|
|
Test.Assert(sizeof(UnionA) == 4);
|
|
|
|
UnionB ub = .();
|
|
ub.mInt32 = 123;
|
|
*((float*)&ub.mInt32) = 1.2f;
|
|
Test.Assert(ub.mFloat == 1.2f);
|
|
Test.Assert(sizeof(UnionB) == 4);
|
|
|
|
UnionD ud = .();
|
|
ud.mInt32 = 123;
|
|
ud.mInt16 = 234;
|
|
Test.Assert(sizeof(UnionD) == 6);
|
|
Test.Assert(alignof(UnionD) == 4);
|
|
Test.Assert(((int16*)&ud)[2] == 234);
|
|
|
|
UnionE ue = .();
|
|
ue.r = 123;
|
|
Test.Assert(ue.r == 123);
|
|
}
|
|
}
|
|
}
|