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