Skip to content

Commit

Permalink
Test Swap (#11)
Browse files Browse the repository at this point in the history
* Get codecov.io working

* Reorder tests to trigger CI

* Run CI on pull requests

* Test swap
  • Loading branch information
jbcoe authored Jul 6, 2024
1 parent a1fe95e commit 4c31de6
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion dyn_optional.h
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ class dyn_optional {
constexpr void swap(dyn_optional& other) noexcept(
allocator_traits::propagate_on_container_swap::value ||
allocator_traits::is_always_equal::value) {
using namespace std;
using std::swap;
if constexpr (allocator_traits::propagate_on_container_swap::value) {
swap(allocator_, other.allocator_);
swap(ptr_, other.ptr_);
Expand Down
35 changes: 35 additions & 0 deletions dyn_optional_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ class PropagatingAllocator {

PropagatingAllocator() { ++default_construct_count; }

friend auto operator<=>(const PropagatingAllocator&,
const PropagatingAllocator&) = default;

T* allocate(std::size_t n) const {
std::allocator<T> default_allocator{};
return default_allocator.allocate(n);
Expand All @@ -65,6 +68,9 @@ class NonPropagatingAllocator {

NonPropagatingAllocator() { ++default_construct_count; }

friend auto operator<=>(const NonPropagatingAllocator&,
const NonPropagatingAllocator&) = default;

NonPropagatingAllocator select_on_container_copy_construction() const {
return NonPropagatingAllocator();
}
Expand Down Expand Up @@ -108,6 +114,10 @@ TEST(TestUtilities, NonPropagatingAllocator) {
// Default Allocator Tests.
//

//
// Default Allocator Tests.
//

TEST(DynOptionalDefaultAllocator, DefaultConstruct) {
dyn_optional<int> opt;
EXPECT_FALSE(opt);
Expand All @@ -119,6 +129,14 @@ TEST(DynOptionalDefaultAllocator, ValueConstruct) {
EXPECT_EQ(*opt, 42);
}

TEST(DynOptionalDefaultAllocator, Swap) {
dyn_optional<int> opt1(42);
dyn_optional<int> opt2(43);
opt1.swap(opt2);
EXPECT_EQ(*opt1, 43);
EXPECT_EQ(*opt2, 42);
}

//
// Propagating Allocator Tests.
//
Expand All @@ -134,6 +152,14 @@ TEST(DynOptionalPropagatingAllocator, ValueConstruct) {
EXPECT_EQ(*opt, 42);
}

TEST(DynOptionalPropagatingAllocator, Swap) {
dyn_optional<int, NonPropagatingAllocator<int>> opt1(42);
dyn_optional<int, NonPropagatingAllocator<int>> opt2(43);
opt1.swap(opt2);
EXPECT_EQ(*opt1, 43);
EXPECT_EQ(*opt2, 42);
}

//
// NonPropagating Allocator Tests.
//
Expand All @@ -148,4 +174,13 @@ TEST(DynOptionalNonPropagatingAllocator, ValueConstruct) {
EXPECT_TRUE(opt);
EXPECT_EQ(*opt, 42);
}

TEST(DynOptionalNonPropagatingAllocator, Swap) {
dyn_optional<int, NonPropagatingAllocator<int>> opt1(42);
dyn_optional<int, NonPropagatingAllocator<int>> opt2(43);
opt1.swap(opt2);
EXPECT_EQ(*opt1, 43);
EXPECT_EQ(*opt2, 42);
}

} // namespace

0 comments on commit 4c31de6

Please sign in to comment.