diff --git a/src/util/meson.build b/src/util/meson.build index ed1921f320f..beb868f4308 100644 --- a/src/util/meson.build +++ b/src/util/meson.build @@ -294,23 +294,11 @@ if with_tests ) endif - test( - 'roundeven', - executable( - 'roundeven_test', - files('roundeven_test.c'), - include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux], - c_args : [c_msvc_compat_args], - dependencies : [dep_m], - ), - suite : ['util'], - should_fail : meson.get_cross_property('xfail', '').contains('roundeven'), - ) - files_util_tests = files( 'bitset_test.cpp', 'blob_test.cpp', 'rb_tree_test.cpp', + 'roundeven_test.cpp', 'register_allocate_test.cpp', 'tests/dag_test.cpp', 'tests/fast_idiv_by_const_test.cpp', diff --git a/src/util/roundeven_test.c b/src/util/roundeven_test.cpp similarity index 55% rename from src/util/roundeven_test.c rename to src/util/roundeven_test.cpp index 7526db1f3bc..097fdc613f3 100644 --- a/src/util/roundeven_test.c +++ b/src/util/roundeven_test.cpp @@ -29,7 +29,9 @@ #include "macros.h" #include "rounding.h" -int main(int argc, char *argv[]) +#include + +TEST(Rounding, RoundevenFloat) { const struct { float input, expected; @@ -48,6 +50,25 @@ int main(int argc, char *argv[]) { nextafterf(2.5, 3.0), 3.0 }, }; + for (unsigned i = 0; i < ARRAY_SIZE(float_data); i++) { + float output = _mesa_roundevenf(float_data[i].input); + EXPECT_TRUE(memcmp(&float_data[i].expected, &output, sizeof(float)) == 0) + << "Subtest " << i << " float value: expected " << float_data[i].expected << " from " + << "_mesa_roundevenf(" << float_data[i].input << " but got " << output << "\n"; + } + + // Test negated values. + for (unsigned i = 0; i < ARRAY_SIZE(float_data); i++) { + float output = _mesa_roundevenf(-float_data[i].input); + float negated_expected = -float_data[i].expected; + EXPECT_TRUE(memcmp(&negated_expected, &output, sizeof(float)) == 0) + << "Subtest " << i << " float value: expected " << negated_expected << " from " + << "_mesa_roundevenf(" << -float_data[i].input << " but got " << output << "\n"; + } +} + +TEST(Rounding, RoundevenDouble) +{ const struct { double input, expected; } double_data[] = { @@ -65,76 +86,19 @@ int main(int argc, char *argv[]) { nextafter(2.5, 3.0), 3.0 }, }; - bool failed = false; - int i; - - for (i = 0; i < ARRAY_SIZE(float_data); i++) { - float output = _mesa_roundevenf(float_data[i].input); - if (memcmp(&float_data[i].expected, &output, sizeof(float))) { - fprintf(stderr, "%d float: expected %f (%a) from " - "_mesa_roundevenf(%f (%a)) but got %f (%a)\n", - i, - float_data[i].expected, - float_data[i].expected, - float_data[i].input, - float_data[i].input, - output, - output); - failed = true; - } - } - - /* Test negated values */ - for (i = 0; i < ARRAY_SIZE(float_data); i++) { - float output = _mesa_roundevenf(-float_data[i].input); - float negated_expected = -float_data[i].expected; - if (memcmp(&negated_expected, &output, sizeof(float))) { - fprintf(stderr, "%d float: expected %f (%a) from " - "_mesa_roundevenf(%f (%a)) but got %f (%a)\n", - i, - negated_expected, - negated_expected, - -float_data[i].input, - -float_data[i].input, - output, - output); - failed = true; - } - } - - for (i = 0; i < ARRAY_SIZE(double_data); i++) { + for (unsigned i = 0; i < ARRAY_SIZE(double_data); i++) { double output = _mesa_roundeven(double_data[i].input); - if (memcmp(&double_data[i].expected, &output, sizeof(double))) { - fprintf(stderr, "%d double: expected %f (%a) from " - "_mesa_roundeven(%f (%a)) but got %f (%a)\n", - i, - double_data[i].expected, - double_data[i].expected, - double_data[i].input, - double_data[i].input, - output, - output); - failed = true; - } + EXPECT_TRUE(memcmp(&double_data[i].expected, &output, sizeof(double)) == 0) + << "Subtest " << i << " double value: expected " << double_data[i].expected << " from " + << "_mesa_roundeven(" << double_data[i].input << " but got " << output << "\n"; } - /* Test negated values */ - for (i = 0; i < ARRAY_SIZE(double_data); i++) { + // Test negated values. + for (unsigned i = 0; i < ARRAY_SIZE(double_data); i++) { double output = _mesa_roundeven(-double_data[i].input); double negated_expected = -double_data[i].expected; - if (memcmp(&negated_expected, &output, sizeof(double))) { - fprintf(stderr, "%d double: expected %f (%a) from " - "_mesa_roundeven(%f (%a)) but got %f (%a)\n", - i, - negated_expected, - negated_expected, - -double_data[i].input, - -double_data[i].input, - output, - output); - failed = true; - } + EXPECT_TRUE(memcmp(&negated_expected, &output, sizeof(double)) == 0) + << "Subtest " << i << " double value: expected " << negated_expected << " from " + << "_mesa_roundeven(" << -double_data[i].input << " but got " << output << "\n"; } - - return failed; }