// // BitVectorHelperTests.cpp // tests/shared/src // // Copyright 2018 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "BitVectorHelperTests.h" #include #include "../QTestExtensions.h" #include #include #include #include QTEST_MAIN(BitVectorHelperTests) const int BITS_IN_BYTE = 8; void BitVectorHelperTests::sizeTest() { std::vector sizes = {0, 6, 7, 8, 30, 31, 32, 33, 87, 88, 89, 90, 90, 91, 92, 93}; for (auto& size : sizes) { const int oldWay = (int)ceil((float)size / (float)BITS_IN_BYTE); const int newWay = (int)calcBitVectorSize(size); QCOMPARE(oldWay, newWay); } } static void readWriteHelper(const std::vector& src) { int numBits = (int)src.size(); int numBytes = calcBitVectorSize(numBits); uint8_t* bytes = new uint8_t[numBytes]; memset(bytes, numBytes, sizeof(uint8_t)); int numBytesWritten = writeBitVector(bytes, numBits, [&](int i) { return src[i]; }); QCOMPARE(numBytesWritten, numBytes); std::vector dst; int numBytesRead = readBitVector(bytes, numBits, [&](int i, bool value) { dst.push_back(value); }); QCOMPARE(numBytesRead, numBytes); QCOMPARE(numBits, (int)src.size()); QCOMPARE(numBits, (int)dst.size()); for (int i = 0; i < numBits; i++) { bool a = src[i]; bool b = dst[i]; QCOMPARE(a, b); } } void BitVectorHelperTests::readWriteTest() { std::vector sizes = {0, 6, 7, 8, 30, 31, 32, 33, 87, 88, 89, 90, 90, 91, 92, 93}; for (auto& size : sizes) { std::vector allTrue(size, true); std::vector allFalse(size, false); std::vector evenSet; evenSet.reserve(size); std::vector oddSet; oddSet.reserve(size); for (int i = 0; i < size; i++) { bool isOdd = (i & 0x1) > 0; evenSet.push_back(!isOdd); oddSet.push_back(isOdd); } readWriteHelper(allTrue); readWriteHelper(allFalse); readWriteHelper(evenSet); readWriteHelper(oddSet); } }