80 lines · 2.2 KB · C++
RawDownload
//// 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 <SharedLogging.h> #include <test-utils/QTestExtensions.h>#include <QtCore/QDebug>#include <StreamUtils.h>#include <glm/glm.hpp>#include <BitVectorHelpers.h> QTEST_MAIN(BitVectorHelperTests) void BitVectorHelperTests::sizeTest() {    std::vector<int> 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<bool>& src) {     int numBits = (int)src.size();    int numBytes = calcBitVectorSize(numBits);    uint8_t* bytes = new uint8_t[numBytes];    memset(bytes, 0, numBytes);    int numBytesWritten = writeBitVector(bytes, numBits, [&](int i) {        return src[i];    });    QCOMPARE(numBytesWritten, numBytes);     std::vector<bool> 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);    }     delete[] bytes;} void BitVectorHelperTests::readWriteTest() {    std::vector<int> sizes = {0, 6, 7, 8, 30, 31, 32, 33, 87, 88, 89, 90, 90, 91, 92, 93};     for (auto& size : sizes) {        std::vector<bool> allTrue(size, true);        std::vector<bool> allFalse(size, false);        std::vector<bool> evenSet;        evenSet.reserve(size);        std::vector<bool> 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);    }}