44
55import mcpplibs.primitives.conversion.traits;
66import mcpplibs.primitives.conversion.underlying;
7+ import mcpplibs.primitives.underlying;
8+
9+ #include " ../../support/conversion_box_types.hpp"
710
811using namespace mcpplibs ::primitives;
12+ using namespace mcpplibs ::primitives::test_support::conversion;
913
1014TEST (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