/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
base/base_tests/cancellable_tests.cpp
81 строка
2 KB
Maxim Pimenov
[base] Made the call to CancellationStatus update the status before return.
19 ноя 2019, 15:30
19 ноя 2019, 15:30
8554b2d
Код
Авторство
О чём код?
#include "testing/testing.hpp" #include "base/cancellable.hpp" #include "base/math.hpp" #include "base/thread.hpp" #include <chrono> #include <cmath> #include <future> using namespace std; namespace base { UNIT_TEST(Cancellable_Smoke) { Cancellable cancellable; promise<void> syncPromise; auto syncFuture = syncPromise.get_future(); double x = 0.123; auto const fn = [&] { for (size_t it = 0;; it++) { if (it > 100 && cancellable.IsCancelled()) break; x = cos(x); } syncPromise.set_value(); }; threads::SimpleThread thread(fn); cancellable.Cancel(); syncFuture.wait(); thread.join(); TEST(cancellable.IsCancelled(), ()); TEST_EQUAL(cancellable.CancellationStatus(), Cancellable::Status::CancelCalled, ()); TEST(base::AlmostEqualAbs(x, 0.739, 1e-3), ()); } UNIT_TEST(Cancellable_Deadline) { Cancellable cancellable; chrono::steady_clock::duration kTimeout = chrono::milliseconds(20); cancellable.SetDeadline(chrono::steady_clock::now() + kTimeout); promise<void> syncPromise; auto syncFuture = syncPromise.get_future(); double x = 0.123; auto const fn = [&] { for (size_t it = 0;; it++) { if (cancellable.IsCancelled()) break; x = cos(x); } syncPromise.set_value(); }; threads::SimpleThread thread(fn); syncFuture.wait(); thread.join(); TEST(cancellable.IsCancelled(), ()); TEST_EQUAL(cancellable.CancellationStatus(), Cancellable::Status::DeadlineExceeded, ()); TEST(base::AlmostEqualAbs(x, 0.739, 1e-3), ()); cancellable.Cancel(); TEST(cancellable.IsCancelled(), ()); TEST_EQUAL(cancellable.CancellationStatus(), Cancellable::Status::CancelCalled, ()); } } // namespace base