/
niceSOFT
/
zstd
Обзор
Документация
Войти
/
niceSOFT
/
zstd
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
contrib/pzstd/utils/test/ThreadPoolTest.cpp
71 строка
2 KB
W. Felix Handte
Coalesce Almost All Copyright Notices to Standard Phrasing
20 дек 2022, 20:52
20 дек 2022, 20:52
5d693cc
Код
Авторство
О чём код?
/* * 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 <gtest/gtest.h> #include <atomic> #include <iostream> #include <thread> #include <vector> using namespace pzstd; TEST(ThreadPool, Ordering) { std::vector<int> 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<unsigned> numFinished{0}; std::atomic<bool> 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<bool> 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); } }