diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2014-04-14 20:24:01 +0200 |
|---|---|---|
| committer | Pierre Bourdon <delroth@gmail.com> | 2014-04-14 20:24:01 +0200 |
| commit | fc71494742dbdacd20f1cbfd78f327bc0edc4690 (patch) | |
| tree | c9e50817dd5f6cc1e3eb89456b909c48efe58391 /Source/UnitTests/Common/BitFieldTest.cpp | |
| parent | c614a707ab1344c9adb56a5b29a805dfd982649f (diff) | |
| parent | 774a394808d6855ccd64574f5e93c1c2a3188f58 (diff) | |
Merge pull request #270 from neobrain/bitfield_fixes
Bitfield fixes
Diffstat (limited to 'Source/UnitTests/Common/BitFieldTest.cpp')
| -rw-r--r-- | Source/UnitTests/Common/BitFieldTest.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/Source/UnitTests/Common/BitFieldTest.cpp b/Source/UnitTests/Common/BitFieldTest.cpp index 16efd29d19..800bb84360 100644 --- a/Source/UnitTests/Common/BitFieldTest.cpp +++ b/Source/UnitTests/Common/BitFieldTest.cpp @@ -125,3 +125,45 @@ TEST(BitField, Assignment) EXPECT_EQ(object.regular_field_unsigned, object.at_dword_boundary); } } + +// Test class behavior on oddly aligned structures. +TEST(BitField, Alignment) +{ + #pragma pack(1) + struct OddlyAlignedTestStruct + { + u8 padding; + TestUnion obj; + }; + #pragma pack() + + GC_ALIGNED16(OddlyAlignedTestStruct test_struct); + TestUnion& object = test_struct.obj; + static_assert(alignof(test_struct.obj.signed_1bit) == 1, "Incorrect variable alignment"); + + for (u64 val : table) + { + // Assignments with fixed values + object.full_u64 = val; + EXPECT_EQ(val, object.full_u64); + + object.full_s64 = (s64)val; + EXPECT_EQ((s64)val, object.full_u64); + + object.regular_field_unsigned = val; + EXPECT_EQ(val & 0x7, object.regular_field_unsigned); + + object.at_dword_boundary = val; + EXPECT_EQ(((s64)(val << 60)) >> 60, object.at_dword_boundary); + + object.signed_1bit = val; + EXPECT_EQ((val & 1) ? -1 : 0, object.signed_1bit); + + object.regular_field_signed = val; + EXPECT_EQ(((s64)(object.hex << 61)) >> 61, object.regular_field_signed); + + // Assignment from other BitField + object.at_dword_boundary = object.regular_field_unsigned; + EXPECT_EQ(object.regular_field_unsigned, object.at_dword_boundary); + } +} |
