mirror of
https://github.com/ArthurSonzogni/FTXUI.git
synced 2025-12-16 01:48:56 +08:00
Remove pthread dependency
Some checks are pending
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (cl, cl, windows-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, ubuntu-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (cl, Windows MSVC, windows-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (gcc, Linux GCC, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Waiting to run
Build / Test modules (llvm, ubuntu-latest) (push) Waiting to run
Documentation / documentation (push) Waiting to run
Some checks are pending
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (cl, cl, windows-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (clang, clang++, ubuntu-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, macos-latest) (push) Waiting to run
Build / Bazel, ${{ matrix.cxx }}, ${{ matrix.os }} (gcc, g++, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (cl, Windows MSVC, windows-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (gcc, Linux GCC, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, Linux Clang, ubuntu-latest) (push) Waiting to run
Build / CMake, ${{ matrix.compiler }}, ${{ matrix.os }} (llvm, llvm-cov gcov, MacOS clang, macos-latest) (push) Waiting to run
Build / Test modules (llvm, ubuntu-latest) (push) Waiting to run
Documentation / documentation (push) Waiting to run
This commit is contained in:
94
src/ftxui/component/task_test.cpp
Normal file
94
src/ftxui/component/task_test.cpp
Normal file
@@ -0,0 +1,94 @@
|
||||
// Copyright 2024 Arthur Sonzogni. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be found in
|
||||
// the LICENSE file.
|
||||
// Copyright 2024 Arthur Sonzogni. All rights reserved.
|
||||
// Use of this source code is governed by the MIT license that can be found in
|
||||
// the LICENSE file.
|
||||
#include "ftxui/component/task_internal.hpp"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
#include <thread> // for sleep_for
|
||||
#include "ftxui/component/task_runner.hpp"
|
||||
|
||||
namespace ftxui::task {
|
||||
|
||||
TEST(TaskTest, Basic) {
|
||||
std::vector<int> values;
|
||||
|
||||
auto task_1 = [&values] { values.push_back(1); };
|
||||
auto task_2 = [&values] { values.push_back(2); };
|
||||
auto task_3 = [&values] { values.push_back(3); };
|
||||
|
||||
auto runner = TaskRunner();
|
||||
|
||||
runner.PostTask(task_1);
|
||||
runner.PostTask(task_2);
|
||||
runner.PostTask(task_3);
|
||||
while (true) {
|
||||
auto duration = runner.RunUntilIdle();
|
||||
if (!duration) {
|
||||
break;
|
||||
}
|
||||
std::this_thread::sleep_for(duration.value());
|
||||
}
|
||||
|
||||
EXPECT_EQ(values, (std::vector<int>{1, 2, 3}));
|
||||
}
|
||||
|
||||
TEST(TaskTest, PostedWithinTask) {
|
||||
std::vector<int> values;
|
||||
|
||||
auto task_1 = [&values] {
|
||||
values.push_back(1);
|
||||
auto task_2 = [&values] { values.push_back(5); };
|
||||
TaskRunner::Current()->PostTask(std::move(task_2));
|
||||
values.push_back(2);
|
||||
};
|
||||
|
||||
auto task_2 = [&values] {
|
||||
values.push_back(3);
|
||||
auto task_2 = [&values] { values.push_back(6); };
|
||||
TaskRunner::Current()->PostTask(std::move(task_2));
|
||||
values.push_back(4);
|
||||
};
|
||||
|
||||
auto runner = TaskRunner();
|
||||
|
||||
runner.PostTask(task_1);
|
||||
runner.PostTask(task_2);
|
||||
while (true) {
|
||||
auto duration = runner.RunUntilIdle();
|
||||
if (!duration) {
|
||||
break;
|
||||
}
|
||||
std::this_thread::sleep_for(duration.value());
|
||||
}
|
||||
|
||||
EXPECT_EQ(values, (std::vector<int>{1, 2, 3, 4, 5, 6}));
|
||||
}
|
||||
|
||||
TEST(TaskTest, RunDelayedTask) {
|
||||
std::vector<int> values;
|
||||
|
||||
auto task_1 = [&values] { values.push_back(1); };
|
||||
auto task_2 = [&values] { values.push_back(2); };
|
||||
auto task_3 = [&values] { values.push_back(3); };
|
||||
|
||||
auto runner = TaskRunner();
|
||||
|
||||
runner.PostDelayedTask(task_3, std::chrono::milliseconds(300));
|
||||
runner.PostDelayedTask(task_1, std::chrono::milliseconds(100));
|
||||
runner.PostDelayedTask(task_2, std::chrono::milliseconds(200));
|
||||
while (true) {
|
||||
auto duration = runner.RunUntilIdle();
|
||||
if (!duration) {
|
||||
break;
|
||||
}
|
||||
std::this_thread::sleep_for(duration.value());
|
||||
}
|
||||
|
||||
EXPECT_EQ(values, (std::vector<int>{1, 2, 3}));
|
||||
}
|
||||
|
||||
} // namespace ftxui::task
|
||||
Reference in New Issue
Block a user