16259264c57537896d72158f811674a192c6a1596Luca Barbieri#include <stdlib.h>
26259264c57537896d72158f811674a192c6a1596Luca Barbieri#include <stdio.h>
36259264c57537896d72158f811674a192c6a1596Luca Barbieri#include <float.h>
46259264c57537896d72158f811674a192c6a1596Luca Barbieri
56259264c57537896d72158f811674a192c6a1596Luca Barbieri#include "util/u_math.h"
66259264c57537896d72158f811674a192c6a1596Luca Barbieri#include "util/u_half.h"
76259264c57537896d72158f811674a192c6a1596Luca Barbieri
86259264c57537896d72158f811674a192c6a1596Luca Barbieriint
96259264c57537896d72158f811674a192c6a1596Luca Barbierimain(int argc, char **argv)
106259264c57537896d72158f811674a192c6a1596Luca Barbieri{
116259264c57537896d72158f811674a192c6a1596Luca Barbieri   unsigned i;
126259264c57537896d72158f811674a192c6a1596Luca Barbieri   unsigned roundtrip_fails = 0;
13c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton
146259264c57537896d72158f811674a192c6a1596Luca Barbieri   for(i = 0; i < 1 << 16; ++i)
156259264c57537896d72158f811674a192c6a1596Luca Barbieri   {
16f15469039a4623ae89e7867e4904eec8eef6395bJosé Fonseca      uint16_t h = (uint16_t) i;
176259264c57537896d72158f811674a192c6a1596Luca Barbieri      union fi f;
18f15469039a4623ae89e7867e4904eec8eef6395bJosé Fonseca      uint16_t rh;
19c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton
20c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton      f.f = util_half_to_float(h);
21c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton      rh = util_float_to_half(f.f);
22c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton
23c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton      if (h != rh && !(util_is_half_nan(h) && util_is_half_nan(rh))) {
24c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton         printf("Roundtrip failed: %x -> %x = %f -> %x\n", h, f.ui, f.f, rh);
25c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton         ++roundtrip_fails;
266259264c57537896d72158f811674a192c6a1596Luca Barbieri      }
276259264c57537896d72158f811674a192c6a1596Luca Barbieri   }
286259264c57537896d72158f811674a192c6a1596Luca Barbieri
296259264c57537896d72158f811674a192c6a1596Luca Barbieri   if(roundtrip_fails)
306259264c57537896d72158f811674a192c6a1596Luca Barbieri      printf("Failure! %u/65536 half floats failed a conversion to float and back.\n", roundtrip_fails);
316259264c57537896d72158f811674a192c6a1596Luca Barbieri   else
326259264c57537896d72158f811674a192c6a1596Luca Barbieri      printf("Success!\n");
33c8d3481cdb12a10e02b23d65c73017ce5925cde7James Benton
346259264c57537896d72158f811674a192c6a1596Luca Barbieri   return 0;
356259264c57537896d72158f811674a192c6a1596Luca Barbieri}
36