From 1ca7600a2b5322a4163491546f5497cb6e541109 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 10 Nov 2023 12:45:47 -0800 Subject: [PATCH] Test value casts which are Undefined Behavior Mark as TODO since UB is not consistent across all supported platforms. --- test/testdata.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/test/testdata.cpp b/test/testdata.cpp index 8b99941..4168fd9 100644 --- a/test/testdata.cpp +++ b/test/testdata.cpp @@ -4,6 +4,8 @@ * in file LICENSE that is included with this distribution. */ +#include + #include #include @@ -495,7 +497,7 @@ void testClear() MAIN(testdata) { - testPlan(156); + testPlan(172); testSetup(); testTraverse(); testAssign(); @@ -544,6 +546,35 @@ MAIN(testdata) testConvertScalar2(-2147483648, 0x80000000, -2147483648); testTodoEnd(); testConvertScalar2(0, 0x100000000llu, -0); + testTodoBegin("UB"); + // test non-finite -> integer casts + // copy in + testConvertScalar2(0, + std::numeric_limits::quiet_NaN(), + 0); + testConvertScalar2(0x7fffffffffffffff, + std::numeric_limits::infinity(), + 0x7fffffff); + testConvertScalar2(0x8000000000000000, + -std::numeric_limits::infinity(), + 0x80000000); + testConvertScalar2(0xffffffffffffffff, + std::numeric_limits::infinity(), + 0xffffffff); + // copy out + testConvertScalar2(std::numeric_limits::quiet_NaN(), + std::numeric_limits::quiet_NaN(), + 0); + testConvertScalar2(std::numeric_limits::infinity(), + std::numeric_limits::infinity(), + 0x7fffffff); + testConvertScalar2(-std::numeric_limits::infinity(), + -std::numeric_limits::infinity(), + 0x80000000); + testConvertScalar2(std::numeric_limits::infinity(), + std::numeric_limits::infinity(), + 0xffffffff); + testTodoEnd(); testAssignSimilar(); testAssignSimilarNDArray();