aboutsummaryrefslogtreecommitdiff
path: root/src/zencore/testutils.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-11-18 16:34:17 +0100
committerGitHub Enterprise <[email protected]>2025-11-18 16:34:17 +0100
commit2f9b8b2000b71650ff5a2b72dae3a5312e670465 (patch)
treec58814f89b7cddc94db237f630b018e4d7982733 /src/zencore/testutils.cpp
parentretain xmake state between runs (#656) (diff)
downloadzen-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.cpp43
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;