Skip to content

Commit

Permalink
[test] Add switch to imageinout_test for enable floating point except…
Browse files Browse the repository at this point in the history
…ions.

Running imageinout_test --enable-fpe will run the test with FPEs
enabled.

Currently it is catching a FP overflow in libjxl.
Once that is fixed, it may find other FPEs.

For now, this is a Linux-only feature.

Signed-off-by: Bram Stolk <[email protected]>
  • Loading branch information
stolk committed Sep 30, 2024
1 parent 970153d commit 2e26eba
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/libOpenImageIO/imageinout_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@

#include <iostream>

#if defined(__linux__)
# include <fenv.h> // For feenableexcept()
#endif

#include <OpenImageIO/argparse.h>
#include <OpenImageIO/benchmark.h>
#include <OpenImageIO/filesystem.h>
Expand All @@ -21,6 +25,7 @@ using namespace OIIO;

static std::string onlyformat = Sysutil::getenv("IMAGEINOUTTEST_ONLY_FORMAT");
static bool nodelete = false; // Don't delete the test files
static bool enable_fpe = false; // Throw exceptions on FP errors.



Expand All @@ -35,6 +40,8 @@ getargs(int argc, char* argv[])

ap.arg("--no-delete", &nodelete)
.help("Don't delete temporary test files");
ap.arg("--enable-fpe", &enable_fpe)
.help("Enable floating point exceptions.");
ap.arg("--onlyformat %s:FORMAT", &onlyformat)
.help("Test only one format");

Expand Down Expand Up @@ -529,6 +536,15 @@ main(int argc, char* argv[])
{
getargs(argc, argv);

if (enable_fpe) {
#if defined(__linux__)
fprintf(stderr, "Enable floating point exceptions.\n");
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
#else
fprintf(stderr, "Warning - floating point exceptions not yet implemented for this platorm.\n");
#endif
}

test_all_formats();
test_read_tricky_sizes();

Expand Down

0 comments on commit 2e26eba

Please sign in to comment.