Add tests for nullable

This commit is contained in:
Jeremy Rifkin 2025-02-01 17:51:17 -06:00
parent e2b1252438
commit eb9ebc31a7
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4
3 changed files with 65 additions and 1 deletions

View File

@ -17,7 +17,9 @@ cc_test(
"unit/internals/optional.cpp",
"unit/internals/result.cpp",
"unit/internals/string_utils.cpp",
"unit/internals/general.cpp"
"unit/internals/general.cpp",
"unit/lib/formatting.cpp",
"unit/lib/nullable.cpp"
],
linkstatic = 1,
)

View File

@ -87,6 +87,8 @@ if(NOT CPPTRACE_SKIP_UNIT)
unit/internals/result.cpp
unit/internals/string_utils.cpp
unit/internals/general.cpp
unit/lib/formatting.cpp
unit/lib/nullable.cpp
)
target_compile_features(unittest PRIVATE cxx_std_20)
target_link_libraries(unittest PRIVATE ${target_name} GTest::gtest_main GTest::gmock_main)

View File

@ -0,0 +1,60 @@
#include <cpptrace/basic.hpp>
#include <gtest/gtest.h>
#include <gtest/gtest-matchers.h>
#include <gmock/gmock.h>
#include <gmock/gmock-matchers.h>
using cpptrace::nullable;
namespace {
TEST(NullableTest, Basic) {
nullable<std::uint32_t> a{12};
EXPECT_EQ(a.value(), 12);
EXPECT_EQ(a.raw_value, 12);
// TODO: =
}
TEST(NullableTest, Null) {
auto a = nullable<std::uint32_t>::null();
EXPECT_FALSE(a.has_value());
EXPECT_EQ(a.raw_value, (std::numeric_limits<std::uint32_t>::max)());
// TODO: default construct
}
TEST(NullableTest, Assignment) {
nullable<std::uint32_t> a;
a = 12;
EXPECT_EQ(a.value(), 12);
}
TEST(NullableTest, Reset) {
nullable<std::uint32_t> a{12};
a.reset();
EXPECT_FALSE(a.has_value());
}
TEST(NullableTest, ValueOr) {
auto a = nullable<std::uint32_t>::null();
EXPECT_EQ(a.value_or(20), 20);
}
TEST(NullableTest, Comparison) {
EXPECT_EQ(nullable<std::uint32_t>{12}, nullable<std::uint32_t>{12});
EXPECT_NE(nullable<std::uint32_t>{12}, nullable<std::uint32_t>{20});
EXPECT_NE(nullable<std::uint32_t>{12}, nullable<std::uint32_t>::null());
EXPECT_EQ(nullable<std::uint32_t>::null(), nullable<std::uint32_t>::null());
}
TEST(NullableTest, Swap) {
auto a = nullable<std::uint32_t>::null();
nullable<std::uint32_t> b{12};
EXPECT_FALSE(a.has_value());
EXPECT_EQ(b.value(), 12);
a.swap(b);
EXPECT_FALSE(b.has_value());
EXPECT_EQ(a.value(), 12);
}
}