#include "tests/BitArrayTests.h" #include "tests/Test.h" #include "utils/BitArray.h" static void testSetRead(Test& test) { BitArray<4, 3> bits; bits[0] = 1; bits[1] = 2; bits[2] = 3; bits[3] = 4; test.checkEqual(1, static_cast (bits[0]), "set and read correct value"); test.checkEqual(2, static_cast (bits[1]), "set and read correct value"); test.checkEqual(3, static_cast (bits[2]), "set and read correct value"); test.checkEqual(4, static_cast (bits[3]), "set and read correct value"); } static void testBigSetRead(Test& test) { BitArray<100, 13> bits; for(int i = 0; i < bits.getLength(); i++) { bits[i] = i; } for(int i = 0; i < bits.getLength(); i++) { test.checkEqual(i, static_cast (bits[i]), "set and read correct value over long array"); } } static void testRandomSetRead(Test& test) { const int length = 100; int data[length]; BitArray<100, 13> bits; int seed = 534; for(int k = 0; k < 20; k++) { for(int i = 0; i < bits.getLength(); i++) { seed = seed * 636455 + 53453; bits[i] = seed & (0x1FFF); data[i] = seed & (0x1FFF); } } for(int i = 0; i < bits.getLength(); i++) { test.checkEqual(data[i], static_cast (bits[i]), "set and read correct value with random input"); } } static void testReadOnly(Test& test) { BitArray<4, 3> bits; bits[0] = 1; bits[1] = 2; bits[2] = 3; bits[3] = 4; const BitArray<4, 3> bits2 = bits; test.checkEqual(1, bits2[0], "can read from const"); test.checkEqual(2, bits2[1], "can read from const"); test.checkEqual(3, bits2[2], "can read from const"); test.checkEqual(4, bits2[3], "can read from const"); } static void testChainedSet(Test& test) { BitArray<4, 3> bits; bits[0] = bits[2] = bits[3] = 2; bits[3] = bits[1] = 7; test.checkEqual(2, static_cast(bits[0]), "chained set sets correct value"); test.checkEqual(7, static_cast(bits[1]), "chained set sets correct value"); test.checkEqual(2, static_cast(bits[2]), "chained set sets correct value"); test.checkEqual(7, static_cast(bits[3]), "chained set sets correct value"); } void BitArrayTests::test() { Test test("BitArray"); testSetRead(test); testBigSetRead(test); testRandomSetRead(test); testReadOnly(test); testChainedSet(test); test.finalize(); }