1#include <stdint.h> 2#include <stdio.h> 3#include "mtest.h" 4 5static struct l_i t[] = { 6#if LDBL_MANT_DIG == 53 7#include "sanity/lrint.h" 8#include "special/lrint.h" 9 10#elif LDBL_MANT_DIG == 64 11#include "sanity/lrintl.h" 12#include "special/lrintl.h" 13 14#endif 15}; 16 17int main(void) 18{ 19 #pragma STDC FENV_ACCESS ON 20 long long yi; 21 int e, i, err = 0; 22 struct l_i *p; 23 24 for (i = 0; i < sizeof t/sizeof *t; i++) { 25 p = t + i; 26 27 if (p->r < 0) 28 continue; 29 fesetround(p->r); 30 feclearexcept(FE_ALL_EXCEPT); 31 yi = lrintl(p->x); 32 e = fetestexcept(INEXACT|INVALID|DIVBYZERO|UNDERFLOW|OVERFLOW); 33 34 if (!checkexcept(e, p->e, p->r)) { 35 printf("%s:%d: bad fp exception: %s lrintl(%La)=%lld, want %s", 36 p->file, p->line, rstr(p->r), p->x, p->i, estr(p->e)); 37 printf(" got %s\n", estr(e)); 38 err++; 39 } 40 if (!(p->e&INVALID) && yi != p->i) { 41 printf("%s:%d: %s lrintl(%La) want %lld got %lld\n", 42 p->file, p->line, rstr(p->r), p->x, p->i, yi); 43 err++; 44 } 45 } 46 return !!err; 47} 48