From 05e69b43e9770e16c4bf1c6ca3e585e64c3f6ff9 Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Mon, 11 Dec 2023 10:48:02 +1100 Subject: Added Zstandard support for zip archives and CHDs. (#11827) * 3rdparty/zstd: Added Zstandard compression library version 1.5.5. * util/unzip.cpp: Added support for Zstandard compression (method 93). * util/chdcodec.cpp: Added support for Zstandard compression. * 3rdparty/flac: Always define NDEBUG to avoid log spam. --- .../contrib/pzstd/utils/test/ThreadPoolTest.cpp | 71 ++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 3rdparty/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp (limited to '3rdparty/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp') diff --git a/3rdparty/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp b/3rdparty/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp new file mode 100644 index 00000000000..a01052e605f --- /dev/null +++ b/3rdparty/zstd/contrib/pzstd/utils/test/ThreadPoolTest.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * All rights reserved. + * + * This source code is licensed under both the BSD-style license (found in the + * LICENSE file in the root directory of this source tree) and the GPLv2 (found + * in the COPYING file in the root directory of this source tree). + */ +#include "utils/ThreadPool.h" + +#include +#include +#include +#include +#include + +using namespace pzstd; + +TEST(ThreadPool, Ordering) { + std::vector results; + + { + ThreadPool executor(1); + for (int i = 0; i < 10; ++i) { + executor.add([ &results, i ] { results.push_back(i); }); + } + } + + for (int i = 0; i < 10; ++i) { + EXPECT_EQ(i, results[i]); + } +} + +TEST(ThreadPool, AllJobsFinished) { + std::atomic numFinished{0}; + std::atomic start{false}; + { + std::cerr << "Creating executor" << std::endl; + ThreadPool executor(5); + for (int i = 0; i < 10; ++i) { + executor.add([ &numFinished, &start ] { + while (!start.load()) { + std::this_thread::yield(); + } + ++numFinished; + }); + } + std::cerr << "Starting" << std::endl; + start.store(true); + std::cerr << "Finishing" << std::endl; + } + EXPECT_EQ(10, numFinished.load()); +} + +TEST(ThreadPool, AddJobWhileJoining) { + std::atomic done{false}; + { + ThreadPool executor(1); + executor.add([&executor, &done] { + while (!done.load()) { + std::this_thread::yield(); + } + // Sleep for a second to be sure that we are joining + std::this_thread::sleep_for(std::chrono::seconds(1)); + executor.add([] { + EXPECT_TRUE(false); + }); + }); + done.store(true); + } +} -- cgit v1.2.3-70-g09d2