tests: Add some fp16 tests

This commit is contained in:
Matthias Clasen 2021-07-13 09:02:16 -04:00
parent fc9c34897a
commit fab82a7c25
2 changed files with 74 additions and 1 deletions

View File

@ -0,0 +1,72 @@
#include <gtk/gtk.h>
#include "gsk/ngl/fp16private.h"
static void
test_constants (void)
{
struct {
float f;
guint16 h;
} tests[] = {
{ 0.0, FP16_ZERO },
{ 1.0, FP16_ONE },
{ -1.0, FP16_MINUS_ONE },
};
for (int i = 0; i < G_N_ELEMENTS (tests); i++)
{
float f[4];
guint16 h[4];
memset (f, 0, sizeof (f));
f[0] = tests[i].f;
float_to_half4 (f, h);
g_assert_cmpuint (h[0], ==, tests[i].h);
memset (h, 0, sizeof (h));
h[0] = tests[i].h;
half_to_float4 (h, f);
g_assert_cmpfloat (f[0], ==, tests[i].f);
}
}
static void
test_roundtrip (void)
{
for (int i = 0; i < 100; i++)
{
float f[4];
float f2[4];
guint16 h[4];
do
{
/* generate a random float thats representable as fp16 */
memset (h, 0, sizeof (h));
h[0] = g_random_int_range (G_MININT16, G_MAXINT16);
half_to_float4 (h, f2);
}
while (!isnormal (f2[0])); /* skip nans and infs since they don't compare well */
memset (f, 0, sizeof (f));
f[0] = f2[0];
float_to_half4 (f, h);
half_to_float4 (h, f2);
g_assert_cmpfloat (f[0], ==, f2[0]);
}
}
int
main (int argc, char *argv[])
{
(g_test_init) (&argc, &argv, NULL);
g_test_add_func ("/half-float/constants", test_constants);
g_test_add_func ("/half-float/roundtrip", test_roundtrip);
return g_test_run ();
}

View File

@ -234,7 +234,8 @@ foreach t : tests
endforeach
internal_tests = [
['diff']
[ 'diff' ],
[ 'half-float' ],
]
foreach t : internal_tests