From 51d288ac4be5f8bab92c11044a565e89d19f5b81 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Mon, 11 Aug 2025 22:19:02 +0800 Subject: [PATCH] test: add testbench for num/safe_cast --- testbench/yycc/num/safe_cast.cpp | 44 +++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/testbench/yycc/num/safe_cast.cpp b/testbench/yycc/num/safe_cast.cpp index 3b18066..baff1f9 100644 --- a/testbench/yycc/num/safe_cast.cpp +++ b/testbench/yycc/num/safe_cast.cpp @@ -1,9 +1,51 @@ #include #include #include +#include + +#include + +#define CAST ::yycc::num::safe_cast namespace yycctest::num::safe_cast { - // TODO: Add testbench + TEST(NumSafeCast, To) { + // Definitely okey + auto rv = CAST::to(UINT8_C(1)); + EXPECT_EQ(rv, UINT32_C(1)); + } + + TEST(NumSafeCast, TryTo) { + // Okey + { + auto rv = CAST::try_to(UINT32_C(1)); + ASSERT_TRUE(rv.has_value()); + EXPECT_EQ(rv.value(), UINT8_C(1)); + } + // Bad cast + { + auto rv = CAST::try_to(UINT32_C(6161)); + EXPECT_FALSE(rv.has_value()); + } + } + + TEST(NumSafeCast, VariableLength) { + // Both 32-bit and 64-bit pointer size are okey. + { + auto rv = CAST::try_to(UINT64_C(0x00000000ffffffff)); + ASSERT_TRUE(rv.has_value()); + EXPECT_EQ(rv.value(), 0xffffffffu); + } + // Only 64-bit pointer size is okey. + { + auto rv = CAST::try_to(UINT64_C(0xffffffffffffffff)); +#if defined(YYCC_PTRSIZE_64) + ASSERT_TRUE(rv.has_value()); + EXPECT_EQ(rv.value(), 0xffffffffffffffffu); +#else + EXPECT_FALSE(rv.has_value()); +#endif + } + } }