From eb9ebc31a7185b7a8c10c2dc3caa729209c3112a Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sat, 1 Feb 2025 17:51:17 -0600 Subject: [PATCH] Add tests for nullable --- test/BUILD.bazel | 4 ++- test/CMakeLists.txt | 2 ++ test/unit/lib/nullable.cpp | 60 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 test/unit/lib/nullable.cpp diff --git a/test/BUILD.bazel b/test/BUILD.bazel index 29384fc..cbe3384 100644 --- a/test/BUILD.bazel +++ b/test/BUILD.bazel @@ -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, ) \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 9a721ed..b4d03f7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -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) diff --git a/test/unit/lib/nullable.cpp b/test/unit/lib/nullable.cpp new file mode 100644 index 0000000..1d1dd54 --- /dev/null +++ b/test/unit/lib/nullable.cpp @@ -0,0 +1,60 @@ +#include + +#include +#include +#include +#include + +using cpptrace::nullable; + +namespace { + +TEST(NullableTest, Basic) { + nullable a{12}; + EXPECT_EQ(a.value(), 12); + EXPECT_EQ(a.raw_value, 12); + // TODO: = +} + +TEST(NullableTest, Null) { + auto a = nullable::null(); + EXPECT_FALSE(a.has_value()); + EXPECT_EQ(a.raw_value, (std::numeric_limits::max)()); + // TODO: default construct +} + +TEST(NullableTest, Assignment) { + nullable a; + a = 12; + EXPECT_EQ(a.value(), 12); +} + +TEST(NullableTest, Reset) { + nullable a{12}; + a.reset(); + EXPECT_FALSE(a.has_value()); +} + +TEST(NullableTest, ValueOr) { + auto a = nullable::null(); + EXPECT_EQ(a.value_or(20), 20); +} + +TEST(NullableTest, Comparison) { + EXPECT_EQ(nullable{12}, nullable{12}); + EXPECT_NE(nullable{12}, nullable{20}); + EXPECT_NE(nullable{12}, nullable::null()); + EXPECT_EQ(nullable::null(), nullable::null()); +} + +TEST(NullableTest, Swap) { + auto a = nullable::null(); + nullable 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); +} + +}