|
6 | 6 | //
|
7 | 7 | //===----------------------------------------------------------------------===//
|
8 | 8 |
|
| 9 | +#include "../thread_safety/ThreadUtils.h" |
9 | 10 | #include <detail/compression.hpp>
|
10 | 11 | #include <sycl/sycl.hpp>
|
11 | 12 |
|
@@ -79,3 +80,36 @@ TEST(CompressionTest, EmptyInputTest) {
|
79 | 80 | std::string decompressedStr((char *)decompressedData.get(), decompressedSize);
|
80 | 81 | ASSERT_EQ(input, decompressedStr);
|
81 | 82 | }
|
| 83 | + |
| 84 | +// Test to check for concurrent compression and decompression. |
| 85 | +TEST(CompressionTest, ConcurrentCompressionDecompression) { |
| 86 | + std::string data = "Concurrent compression and decompression test!"; |
| 87 | + |
| 88 | + constexpr size_t ThreadCount = 20; |
| 89 | + |
| 90 | + Barrier b(ThreadCount); |
| 91 | + { |
| 92 | + auto testCompressDecompress = [&](size_t threadId) { |
| 93 | + b.wait(); |
| 94 | + size_t compressedDataSize = 0; |
| 95 | + auto compressedData = ZSTDCompressor::CompressBlob( |
| 96 | + data.c_str(), data.size(), compressedDataSize, 3); |
| 97 | + |
| 98 | + ASSERT_NE(compressedData, nullptr); |
| 99 | + ASSERT_GT(compressedDataSize, (size_t)0); |
| 100 | + |
| 101 | + size_t decompressedSize = 0; |
| 102 | + auto decompressedData = ZSTDCompressor::DecompressBlob( |
| 103 | + compressedData.get(), compressedDataSize, decompressedSize); |
| 104 | + |
| 105 | + ASSERT_NE(decompressedData, nullptr); |
| 106 | + ASSERT_GT(decompressedSize, (size_t)0); |
| 107 | + |
| 108 | + std::string decompressedStr((char *)decompressedData.get(), |
| 109 | + decompressedSize); |
| 110 | + ASSERT_EQ(data, decompressedStr); |
| 111 | + }; |
| 112 | + |
| 113 | + ::ThreadPool MPool(ThreadCount, testCompressDecompress); |
| 114 | + } |
| 115 | +} |
0 commit comments