From e65fe1b93684f9517599be695eb40aa4537fc6c7 Mon Sep 17 00:00:00 2001 From: Steven Le Rouzic Date: Sun, 5 Jan 2025 18:53:16 +0100 Subject: Add status_or --- asl/tests/status_or_tests.cpp | 88 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 asl/tests/status_or_tests.cpp (limited to 'asl/tests') diff --git a/asl/tests/status_or_tests.cpp b/asl/tests/status_or_tests.cpp new file mode 100644 index 0000000..5038e7e --- /dev/null +++ b/asl/tests/status_or_tests.cpp @@ -0,0 +1,88 @@ +#include "asl/status_or.hpp" +#include "asl/testing/testing.hpp" +#include "asl/tests/test_types.hpp" + +static_assert(asl::copyable>); +static_assert(asl::moveable>); + +static_assert(asl::copyable>); +static_assert(asl::moveable>); + +static_assert(!asl::copyable>); +static_assert(asl::moveable>); + +static_assert(!asl::copyable>); +static_assert(!asl::moveable>); + +ASL_TEST(ok) +{ + asl::status_or s = 6; + ASL_TEST_EXPECT(s.ok()); + ASL_TEST_EXPECT(s); + ASL_TEST_EXPECT(s.code() == asl::status_code::ok); +} + +ASL_TEST(from_status) +{ + asl::status_or s = asl::internal_error(); + ASL_TEST_EXPECT(!s.ok()); + ASL_TEST_EXPECT(!s); + ASL_TEST_EXPECT(s.code() == asl::status_code::internal); + ASL_TEST_EXPECT(s.message() == ""_sv); + + asl::status_or s2 = asl::internal_error("oh no"); + ASL_TEST_EXPECT(!s2.ok()); + ASL_TEST_EXPECT(!s2); + ASL_TEST_EXPECT(s2.code() == asl::status_code::internal); + ASL_TEST_EXPECT(s2.message() == "oh no"_sv); + + asl::status_or s3 = asl::internal_error("{} {}", 1, 2); + ASL_TEST_EXPECT(!s3.ok()); + ASL_TEST_EXPECT(!s3); + ASL_TEST_EXPECT(s3.code() == asl::status_code::internal); + ASL_TEST_EXPECT(s3.message() == "1 2"_sv); +} + +ASL_TEST(destructor) +{ + bool d = false; + + { + asl::status_or s{&d}; + ASL_TEST_EXPECT(s.ok()); + ASL_TEST_EXPECT(!d); + + asl::status_or s2 = ASL_MOVE(s); + ASL_TEST_EXPECT(s.ok()); + ASL_TEST_EXPECT(!d); + + s = ASL_MOVE(s2); + ASL_TEST_EXPECT(s.ok()); + ASL_TEST_EXPECT(!d); + } + + ASL_TEST_EXPECT(d); +} + +ASL_TEST(copy) +{ + asl::status_or s = 7; + asl::status_or s2 = s; + s = s2; + + ASL_TEST_EXPECT(s.ok()); + ASL_TEST_EXPECT(s2.ok()); + + ASL_TEST_EXPECT(s.value() == 7); + ASL_TEST_EXPECT(s2.value() == 7); +} + +ASL_TEST(value_or) +{ + asl::status_or s = 7; + asl::status_or s2 = asl::internal_error(); + + ASL_TEST_EXPECT(s.value_or(45) == 7); + ASL_TEST_EXPECT(s2.value_or(45) == 45); +} + -- cgit