Disable floating point exception traps when testing NaNs

Some functions are supposed to behave correctly when given a NaN. This
might only be valid if floation point exceptions are not trapped, so
disable trapping for these tests.
This commit is contained in:
Kenneth Moreland 2021-07-09 13:22:35 -06:00
parent b01ca530b8
commit 6447b17303
4 changed files with 10 additions and 5 deletions

@ -120,6 +120,8 @@ void TestBounds()
VTKM_TEST_ASSERT(unionBounds.Contains(Vec3(25)), "Contains fail");
std::cout << "Try adding NaN." << std::endl;
// Turn off floating point exceptions. This is only for conditions that allow NaNs.
vtkm::testing::FloatingPointExceptionTrapDisable();
unionBounds.Include(Vec3(vtkm::Nan64()));
VTKM_TEST_ASSERT(!unionBounds.Contains(Vec3(-20)), "Contains fail");
VTKM_TEST_ASSERT(!unionBounds.Contains(Vec3(-2)), "Contains fail");

@ -179,10 +179,11 @@ struct ScalarFieldTests : public vtkm::exec::FunctorBase
// General behavior.
VTKM_MATH_ASSERT(nan != vtkm::Nan<T>(), "Nan not equal itself.");
VTKM_MATH_ASSERT(!(nan >= zero), "Nan not greater or less.");
VTKM_MATH_ASSERT(!(nan <= zero), "Nan not greater or less.");
VTKM_MATH_ASSERT(!(nan >= finite), "Nan not greater or less.");
VTKM_MATH_ASSERT(!(nan <= finite), "Nan not greater or less.");
// Disabled because they can cause floating point exceptions
//VTKM_MATH_ASSERT(!(nan >= zero), "Nan not greater or less.");
//VTKM_MATH_ASSERT(!(nan <= zero), "Nan not greater or less.");
//VTKM_MATH_ASSERT(!(nan >= finite), "Nan not greater or less.");
//VTKM_MATH_ASSERT(!(nan <= finite), "Nan not greater or less.");
VTKM_MATH_ASSERT(neginf < inf, "Infinity big");
VTKM_MATH_ASSERT(zero < inf, "Infinity big");

@ -122,6 +122,8 @@ void TestRange()
VTKM_TEST_ASSERT(unionRange.Contains(25), "Contains fail");
std::cout << "Try adding NaN." << std::endl;
// Turn off floating point exceptions. This is only for conditions that allow NaNs.
vtkm::testing::FloatingPointExceptionTrapDisable();
unionRange.Include(vtkm::Nan64());
VTKM_TEST_ASSERT(unionRange.IsNonEmpty(), "Empty?");
VTKM_TEST_ASSERT(!unionRange.Contains(-20), "Contains fail");

@ -29,7 +29,7 @@ void CheckTypeSizes()
VTKM_TEST_ASSERT(sizeof(vtkm::Int64) == 8, "Int64 wrong size.");
VTKM_TEST_ASSERT(sizeof(vtkm::UInt64) == 8, "UInt64 wrong size.");
VTKM_TEST_ASSERT(sizeof(vtkm::Float32) == 4, "Float32 wrong size.");
VTKM_TEST_ASSERT(sizeof(vtkm::Float64) == 8, "Float32 wrong size.");
VTKM_TEST_ASSERT(sizeof(vtkm::Float64) == 8, "Float64 wrong size.");
}
// This part of the test has to be broken out of GeneralVecTypeTest because