diff options
| author | Dan Engelbrecht <[email protected]> | 2025-11-18 16:34:17 +0100 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2025-11-18 16:34:17 +0100 |
| commit | 2f9b8b2000b71650ff5a2b72dae3a5312e670465 (patch) | |
| tree | c58814f89b7cddc94db237f630b018e4d7982733 /src/zencore/testutils.cpp | |
| parent | retain xmake state between runs (#656) (diff) | |
| download | zen-2f9b8b2000b71650ff5a2b72dae3a5312e670465.tar.xz zen-2f9b8b2000b71650ff5a2b72dae3a5312e670465.zip | |
loose chunk filtering bug when using wildcards (#654)
* fix filtering of loose chunks when downloading with a filter
add tests
* changelog
* move InlineRemoveUnusedHashes
* remove extra braces
Diffstat (limited to 'src/zencore/testutils.cpp')
| -rw-r--r-- | src/zencore/testutils.cpp | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/src/zencore/testutils.cpp b/src/zencore/testutils.cpp index 9f50de032..5bc2841ae 100644 --- a/src/zencore/testutils.cpp +++ b/src/zencore/testutils.cpp @@ -46,22 +46,41 @@ ScopedTemporaryDirectory::~ScopedTemporaryDirectory() IoBuffer CreateRandomBlob(uint64_t Size) { - static uint64_t Seed{0x7CEBF54E45B9F5D1}; - auto Next = [](uint64_t& seed) { - uint64_t z = (seed += UINT64_C(0x9E3779B97F4A7C15)); - z = (z ^ (z >> 30)) * UINT64_C(0xBF58476D1CE4E5B9); - z = (z ^ (z >> 27)) * UINT64_C(0x94D049BB133111EB); - return z ^ (z >> 31); - }; + static FastRandom Rand{.Seed = 0x7CEBF54E45B9F5D1}; + return CreateRandomBlob(Rand, Size); +}; + +IoBuffer +CreateSemiRandomBlob(uint64_t Size) +{ + IoBuffer Result(Size); + const size_t PartCount = (Size / (1u * 1024u * 64)) + 1; + const size_t PartSize = Size / PartCount; + auto Part = CreateRandomBlob(PartSize); + auto Remain = Result.GetMutableView().CopyFrom(Part.GetView()); + while (Remain.GetSize() >= PartSize) + { + Remain = Remain.CopyFrom(Part.GetView()); + } + if (Remain.GetSize() > 0) + { + auto RemainBuffer = CreateRandomBlob(Remain.GetSize()); + Remain.CopyFrom(RemainBuffer.GetView()); + } + return Result; +}; +IoBuffer +CreateRandomBlob(FastRandom& Rand, uint64_t Size) +{ IoBuffer Data(Size); uint64_t* DataPtr = reinterpret_cast<uint64_t*>(Data.MutableData()); while (Size > sizeof(uint64_t)) { - *DataPtr++ = Next(Seed); + *DataPtr++ = Rand.Next(); Size -= sizeof(uint64_t); } - uint64_t ByteNext = Next(Seed); + uint64_t ByteNext = Rand.Next(); uint8_t* ByteDataPtr = reinterpret_cast<uint8_t*>(DataPtr); while (Size > 0) { @@ -73,12 +92,12 @@ CreateRandomBlob(uint64_t Size) }; IoBuffer -CreateSemiRandomBlob(uint64_t Size) +CreateSemiRandomBlob(FastRandom& Rand, uint64_t Size) { IoBuffer Result(Size); const size_t PartCount = (Size / (1u * 1024u * 64)) + 1; const size_t PartSize = Size / PartCount; - auto Part = CreateRandomBlob(PartSize); + auto Part = CreateRandomBlob(Rand, PartSize); auto Remain = Result.GetMutableView().CopyFrom(Part.GetView()); while (Remain.GetSize() >= PartSize) { @@ -86,7 +105,7 @@ CreateSemiRandomBlob(uint64_t Size) } if (Remain.GetSize() > 0) { - auto RemainBuffer = CreateRandomBlob(Remain.GetSize()); + auto RemainBuffer = CreateRandomBlob(Rand, Remain.GetSize()); Remain.CopyFrom(RemainBuffer.GetView()); } return Result; |