1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
- // SPDX-License-Identifier: MIT
- #include "UnitTestFramework.h"
- #include <Jolt/Physics/Collision/Shape/SubShapeID.h>
- TEST_SUITE("SubShapeIDTest")
- {
- struct SSPair
- {
- uint32 mValue;
- uint mNumBits;
- };
- using SSPairs = Array<SSPair>;
- // Helper function that pushes sub shape ID's on the creator and checks that they come out again
- static void TestPushPop(const SSPairs &inPairs)
- {
- // Push all id's on the creator
- SubShapeIDCreator creator;
- int total_bits = 0;
- for (const SSPair &p : inPairs)
- {
- creator = creator.PushID(p.mValue, p.mNumBits);
- total_bits += p.mNumBits;
- }
- CHECK(creator.GetNumBitsWritten() == total_bits);
- // Now pop all parts
- SubShapeID id = creator.GetID();
- for (const SSPair &p : inPairs)
- {
- // There should be data (note there is a possibility of a false positive if the bit pattern is all 1's)
- CHECK(!id.IsEmpty());
- // Pop the part
- SubShapeID remainder;
- uint32 value = id.PopID(p.mNumBits, remainder);
- // Check value
- CHECK(value == p.mValue);
- // Continue with the remainder
- id = remainder;
- }
- CHECK(id.IsEmpty());
- }
- TEST_CASE("SubShapeIDTest")
- {
- // Test storing some values
- TestPushPop({ { 0b110101010, 9 }, { 0b0101010101, 10 }, { 0b10110101010, 11 } });
- // Test storing some values with a different pattern
- TestPushPop({ { 0b001010101, 9 }, { 0b1010101010, 10 }, { 0b01001010101, 11 } });
- // Test storing up to 32 bits
- TestPushPop({ { 0b10, 2 }, { 0b1110101010, 10 }, { 0b0101010101, 10 }, { 0b1010101010, 10 } });
- // Test storing up to 32 bits with a different pattern
- TestPushPop({ { 0b0001010101, 10 }, { 0b1010101010, 10 }, { 0b0101010101, 10 }, { 0b01, 2 } });
- // Test storing 0 bits
- TestPushPop({ { 0b10, 2 }, { 0b1110101010, 10 }, { 0, 0 }, { 0b0101010101, 10 }, { 0, 0 }, { 0b1010101010, 10 } });
- // Test 32 bits at once
- TestPushPop({ { 0b10101010101010101010101010101010, 32 } });
- // Test 32 bits at once with a different pattern
- TestPushPop({ { 0b01010101010101010101010101010101, 32 } });
- }
- }
|