Skip to content

Commit b29f427

Browse files
test: Enhance numeric risk tests to support underlying and proxy representation bridges
Signed-off-by: FrozenlemonTee <1115306170@qq.com>
1 parent 38f0cc9 commit b29f427

1 file changed

Lines changed: 27 additions & 0 deletions

File tree

tests/basic/conversion/traits/test_numeric_risk.cpp

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44

55
import mcpplibs.primitives.conversion.traits;
66
import mcpplibs.primitives.conversion.underlying;
7+
import mcpplibs.primitives.underlying;
8+
9+
#include "../../support/conversion_box_types.hpp"
710

811
using namespace mcpplibs::primitives;
12+
using namespace mcpplibs::primitives::test_support::conversion;
913

1014
TEST(ConversionRiskTest, NumericRiskDetectsOverflowAndUnderflow) {
1115
auto const overflow = conversion::numeric_risk<std::uint16_t>(70000);
@@ -28,3 +32,26 @@ TEST(ConversionRiskTest, NumericRiskDetectsDomainAndPrecisionLoss) {
2832
ASSERT_TRUE(precision.has_value());
2933
EXPECT_EQ(*precision, conversion::risk::kind::precision_loss);
3034
}
35+
36+
TEST(ConversionRiskTest, NumericRiskSupportsUnderlyingRepBridge) {
37+
auto const underflow = conversion::numeric_risk<UnsignedBox>(SignedBox{-1});
38+
ASSERT_TRUE(underflow.has_value());
39+
EXPECT_EQ(*underflow, conversion::risk::kind::underflow);
40+
41+
auto const domain = conversion::numeric_risk<SignedBox>(
42+
FloatBox{std::numeric_limits<double>::quiet_NaN()});
43+
ASSERT_TRUE(domain.has_value());
44+
EXPECT_EQ(*domain, conversion::risk::kind::domain_error);
45+
}
46+
47+
TEST(ConversionRiskTest, NumericRiskSupportsBuiltinProxyRepBridge) {
48+
auto const underflow =
49+
conversion::numeric_risk<UnsignedBox>(BridgedIntBox{IntBridgeRep{-1}});
50+
ASSERT_TRUE(underflow.has_value());
51+
EXPECT_EQ(*underflow, conversion::risk::kind::underflow);
52+
53+
auto const domain = conversion::numeric_risk<BridgedIntBox>(
54+
BridgedFloatBox{FloatBridgeRep{std::numeric_limits<double>::quiet_NaN()}});
55+
ASSERT_TRUE(domain.has_value());
56+
EXPECT_EQ(*domain, conversion::risk::kind::domain_error);
57+
}

0 commit comments

Comments
 (0)