Skip to content

Commit b2e6f6c

Browse files
committed
Improve testing of hash on optional
1 parent 41009c5 commit b2e6f6c

File tree

1 file changed

+34
-26
lines changed

1 file changed

+34
-26
lines changed

src/beman/optional26/tests/optional.t.cpp

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <functional>
1111
#include <ranges>
1212
#include <tuple>
13+
#include <algorithm>
1314

1415
#include <gtest/gtest.h>
1516

@@ -596,22 +597,7 @@ TEST(OptionalTest, RangeTest) {
596597
}
597598
}
598599

599-
TEST(OptionalTest, HashTest) {
600-
beman::optional26::optional<int> o1 = beman::optional26::nullopt;
601-
beman::optional26::optional<int> o2 = beman::optional26::nullopt;
602-
beman::optional26::optional<int> o3 = 42;
603-
beman::optional26::optional<int> o4 = 42;
604-
605-
auto h1 = std::hash<beman::optional26::optional<int>>{}(o1);
606-
auto h2 = std::hash<beman::optional26::optional<int>>{}(o2);
607-
auto h3 = std::hash<beman::optional26::optional<int>>{}(o3);
608-
auto h4 = std::hash<beman::optional26::optional<int>>{}(o4);
609-
610-
EXPECT_EQ(h1, h2);
611-
EXPECT_EQ(h3, h4);
612-
}
613-
614-
TEST(ViewMaybeTest, Constructors) {
600+
TEST(OptionalTest, RangeConstructors) {
615601
std::ranges::single_view<std::optional<int>> s;
616602
std::ranges::single_view<std::optional<int>> s2{s};
617603
std::ranges::single_view<std::optional<int>> s3{std::optional<int>{}};
@@ -625,7 +611,7 @@ TEST(ViewMaybeTest, Constructors) {
625611
std::ignore = n3;
626612
}
627613

628-
TEST(ViewMaybeTest, ConceptCheckRef) {
614+
TEST(OptionalTest, ConceptCheckRef) {
629615
static_assert(std::ranges::range<beman::optional26::optional<int&>>);
630616
static_assert(std::ranges::view<beman::optional26::optional<int&>>);
631617
static_assert(std::ranges::input_range<beman::optional26::optional<int&>>);
@@ -661,7 +647,7 @@ TEST(ViewMaybeTest, ConceptCheckRef) {
661647
static_assert(std::ranges::random_access_range<beman::optional26::optional<ref>>);
662648
}
663649

664-
TEST(ViewMaybeTest, BreathingTest) {
650+
TEST(OptionalTest, BreathingTest) {
665651
beman::optional26::optional<int> m;
666652
beman::optional26::optional<int> m1{1};
667653

@@ -679,7 +665,7 @@ TEST(ViewMaybeTest, BreathingTest) {
679665
ASSERT_EQ(*std::begin(d0), 1.0);
680666
}
681667

682-
TEST(ViewMaybeTest, BreathingTestRef) {
668+
TEST(OptionalTest, BreathingTestRef) {
683669
beman::optional26::optional<int&> m;
684670

685671
int one = 1;
@@ -698,7 +684,7 @@ TEST(ViewMaybeTest, BreathingTestRef) {
698684
ASSERT_EQ(*std::begin(d0), 1.0);
699685
}
700686

701-
TEST(ViewMaybe, CompTest) {
687+
TEST(OptionalTest, CompTest) {
702688
beman::optional26::optional<int> m;
703689
beman::optional26::optional<int> m0{0};
704690
beman::optional26::optional<int> m1{1};
@@ -718,7 +704,7 @@ TEST(ViewMaybe, CompTest) {
718704
ASSERT_TRUE(m1 <= m1a);
719705
}
720706

721-
TEST(ViewMaybe, CompTestRef) {
707+
TEST(OptionalTest, CompTestRef) {
722708
beman::optional26::optional<int&> m;
723709
int zero = 0;
724710
int one = 1;
@@ -758,7 +744,7 @@ inline constexpr auto yield_if = []<class T>(bool b, T x) {
758744
return b ? beman::optional26::optional<T>{std::move(x)} : beman::optional26::nullopt;
759745
};
760746

761-
TEST(ViewMaybeTest, PythTripleTest) {
747+
TEST(OptionalTest, PythTripleTest) {
762748
using std::views::iota;
763749
auto triples = and_then(iota(1), [](int z) {
764750
return and_then(iota(1, z + 1), [=](int x) {
@@ -772,7 +758,7 @@ TEST(ViewMaybeTest, PythTripleTest) {
772758

773759
using namespace beman;
774760

775-
TEST(ViewMaybeTest, ValueBase) {
761+
TEST(OptionalTest, ValueBase) {
776762
int i = 7;
777763
beman::optional26::optional<int> v1{};
778764

@@ -784,7 +770,7 @@ TEST(ViewMaybeTest, ValueBase) {
784770
ASSERT_EQ(i, 7);
785771
}
786772

787-
TEST(ViewMaybeTest, RefWrapper) {
773+
TEST(OptionalTest, RefWrapper) {
788774
int i = 7;
789775

790776
beman::optional26::optional<int> v2{std::ref(i)};
@@ -793,7 +779,7 @@ TEST(ViewMaybeTest, RefWrapper) {
793779
ASSERT_EQ(i, 7);
794780
}
795781

796-
TEST(ViewMaybeTest, ValueNonDefaultConstruct) {
782+
TEST(OptionalTest, ValueNonDefaultConstruct) {
797783
using beman::optional26::tests::int_ctor;
798784
int_ctor i = 7;
799785
beman::optional26::optional<int_ctor> v1{};
@@ -802,7 +788,7 @@ TEST(ViewMaybeTest, ValueNonDefaultConstruct) {
802788
std::ignore = v2;
803789
}
804790

805-
TEST(ViewMaybeTest, RefBase) {
791+
TEST(OptionalTest, RefBase) {
806792
int i = 7;
807793
beman::optional26::optional<int&> v1{};
808794
// ASSERT_TRUE(v1.size() == 0);
@@ -835,3 +821,25 @@ TEST(ViewMaybeTest, RefBase) {
835821
}
836822
ASSERT_EQ(s, 9);
837823
}
824+
825+
TEST(OptionalTest, HashTest) {
826+
beman::optional26::optional<int> o1 = beman::optional26::nullopt;
827+
beman::optional26::optional<int> o2 = beman::optional26::nullopt;
828+
beman::optional26::optional<int> o3 = 42;
829+
beman::optional26::optional<int> o4 = 42;
830+
831+
auto h1 = std::hash<beman::optional26::optional<int>>{}(o1);
832+
auto h2 = std::hash<beman::optional26::optional<int>>{}(o2);
833+
auto h3 = std::hash<beman::optional26::optional<int>>{}(o3);
834+
auto h4 = std::hash<beman::optional26::optional<int>>{}(o4);
835+
836+
EXPECT_EQ(h1, h2);
837+
EXPECT_EQ(h3, h4);
838+
EXPECT_NE(h1, h3);
839+
840+
for(int i : std::views::iota(0, 1000)) {
841+
auto h1 = std::hash<beman::optional26::optional<int>>{}(i);
842+
auto h2 = std::hash<int>{}(i);
843+
EXPECT_EQ(h1, h2);
844+
}
845+
}

0 commit comments

Comments
 (0)