Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions test/atomic_standard_policy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,15 @@ TEST_CASE("standard policy implements load and store atomically",
std::uint32_t val{17};
auto t1 = std::thread([&] {
auto x = atomic::load(val);
CHECK((x == 17 or x == 1337));
CHECK((x == 17 or x == 18));
});
auto t2 = std::thread([&] {
auto x = atomic::load(val);
atomic::store(val, ++x);
});
auto t2 = std::thread([&] { atomic::store(val, 1337); });
t1.join();
t2.join();
CHECK(val == 1337);
CHECK(val == 18);
}

TEST_CASE("standard policy implements exchange", "[atomic_standard_policy]") {
Expand Down
24 changes: 12 additions & 12 deletions test/freestanding_conc_injected_policy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,17 @@

#include <catch2/catch_test_macros.hpp>

#include <atomic>
#include <concepts>
#include <cstdint>
#include <utility>

namespace {
auto test_before_definition() {
conc::call_in_critical_section([] {});
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
}

struct custom_policy {
static inline std::atomic<std::uint64_t> count{};
static inline std::uint64_t count{};

template <typename = void, std::invocable F, std::predicate... Pred>
requires(sizeof...(Pred) < 2)
Expand All @@ -43,26 +42,27 @@ TEST_CASE("custom policy models concept", "[freestanding_injected_policy]") {
}

TEST_CASE("injected custom policy is used", "[freestanding_injected_policy]") {
auto c = custom_policy::count.load();
conc::call_in_critical_section([] {});
auto c = custom_policy::count;
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
CHECK(custom_policy::count - c == 1);
conc::call_in_critical_section([] {}, [] { return true; });
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
CHECK(custom_policy::count - c == 2);
}

TEST_CASE("injected custom policy is used before definition",
"[freestanding_injected_policy]") {
auto c = custom_policy::count.load();
auto c = custom_policy::count;
test_before_definition();
CHECK(custom_policy::count - c == 1);
}

TEST_CASE("predicate is used", "[freestanding_injected_policy]") {
auto predicate_used = 0;
conc::call_in_critical_section([] {},
[&] {
++predicate_used;
return true;
});
auto v = conc::call_in_critical_section([] { return 17; },
[&] {
++predicate_used;
return true;
});
CHECK(v == 17);
CHECK(predicate_used == 1);
}
26 changes: 13 additions & 13 deletions test/hosted_conc_injected_policy.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,17 @@

#include <catch2/catch_test_macros.hpp>

#include <atomic>
#include <concepts>
#include <cstdint>
#include <utility>

namespace {
auto test_before_definition() {
conc::call_in_critical_section([] {});
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
}

struct custom_policy {
static inline std::atomic<std::uint64_t> count{};
static inline std::uint64_t count{};

template <typename = void, std::invocable F, std::predicate... Pred>
requires(sizeof...(Pred) < 2)
Expand Down Expand Up @@ -46,26 +45,27 @@ TEST_CASE("custom policy models concept", "[hosted_injected_policy]") {
}

TEST_CASE("injected custom policy is used", "[hosted_injected_policy]") {
auto c = custom_policy::count.load();
conc::call_in_critical_section([] {});
auto c = custom_policy::count;
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
CHECK(custom_policy::count - c == 1);
conc::call_in_critical_section([] {}, [] { return true; });
CHECK(conc::call_in_critical_section([] { return 17; }) == 17);
CHECK(custom_policy::count - c == 2);
}

TEST_CASE("injected custom policy is used before definition",
"[hosted_injected_policy]") {
custom_policy::count = 0;
auto c = custom_policy::count;
test_before_definition();
CHECK(custom_policy::count == 1);
CHECK(custom_policy::count - c == 1);
}

TEST_CASE("predicate is used", "[hosted_injected_policy]") {
auto predicate_used = 0;
conc::call_in_critical_section([] {},
[&] {
++predicate_used;
return true;
});
auto v = conc::call_in_critical_section([] { return 17; },
[&] {
++predicate_used;
return true;
});
CHECK(v == 17);
CHECK(predicate_used == 1);
}