cesium-native/CesiumIonClient/test/TestFillWithRandomBytes.cpp

35 lines
1.2 KiB
C++

#include "../src/fillWithRandomBytes.h"
#include <catch2/catch.hpp>
using namespace CesiumIonClient;
TEST_CASE("fillWithRandomBytes") {
std::vector<size_t> sizes = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
for (size_t i = 0; i < sizes.size(); ++i) {
size_t size = sizes[i];
// Allocate an extra byte to make sure we don't overflow the buffer
std::vector<uint8_t> buffer(size + 1);
gsl::span<uint8_t> bufferSpan(buffer.data(), size);
fillWithRandomBytes(bufferSpan);
// Make sure the rest are non-zeros
for (size_t j = 0; j < size; ++j) {
// In the unlikely event the value is zero, generate some new random
// values. Repeat this up to 10 times. The chances that the random value
// at a particular position is zero ten times in a row is vanishingly
// small. We don't care if previous positions get a zero on regeneration,
// we're just trying to test for the possibility of an off-by-one error
// making a particular position _always_ zero.
for (int k = 0; buffer[j] == 0 && k < 10; ++k)
fillWithRandomBytes(bufferSpan);
CHECK(buffer[j] != 0);
}
// Make sure the last byte was not overwritten
CHECK(buffer[size] == 0);
}
}