osrm-backend/third_party/libosmium/test/t/thread/test_util.cpp

61 lines
1.3 KiB
C++

#include "catch.hpp"
#include <osmium/thread/util.hpp>
#include <stdexcept>
#include <type_traits>
TEST_CASE("check_for_exception") {
std::promise<int> p;
auto f = p.get_future();
SECTION("not ready") {
osmium::thread::check_for_exception(f);
}
SECTION("ready") {
p.set_value(3);
osmium::thread::check_for_exception(f);
}
SECTION("no shared state") {
p.set_value(3);
REQUIRE(f.get() == 3);
osmium::thread::check_for_exception(f);
}
}
TEST_CASE("check_for_exception with exception") {
std::promise<int> p;
auto f = p.get_future();
try {
throw std::runtime_error{"TEST"};
} catch (...) {
p.set_exception(std::current_exception());
}
REQUIRE_THROWS_AS(osmium::thread::check_for_exception(f), const std::runtime_error&);
}
static_assert(std::is_nothrow_move_constructible<osmium::thread::thread_handler>::value, "thread_handler must have noexcept move constructor");
TEST_CASE("empty thread_handler") {
osmium::thread::thread_handler th;
}
int foo;
void test_func(int value) {
foo = value;
}
TEST_CASE("valid thread_handler") {
foo = 22;
test_func(17);
REQUIRE(foo == 17);
{
osmium::thread::thread_handler th{test_func, 5};
}
REQUIRE(foo == 5);
}