xref: /openbsd/regress/lib/libm/rint/rint.c (revision 404b540a)
1 /*	$OpenBSD: rint.c,v 1.7 2008/12/09 20:35:13 martynas Exp $	*/
2 
3 /*	Written by Michael Shalayeff, 2003,  Public domain.	*/
4 
5 #include <err.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <signal.h>
10 #include <unistd.h>
11 #include <math.h>
12 
13 static void
14 sigfpe(int sig, siginfo_t *si, void *v)
15 {
16 	char buf[132];
17 
18 	if (si) {
19 		snprintf(buf, sizeof(buf), "sigfpe: addr=%p, code=%d\n",
20 		    si->si_addr, si->si_code);
21 		write(1, buf, strlen(buf));
22 	}
23 	_exit(1);
24 }
25 
26 int
27 main(int argc, char *argv[])
28 {
29 	struct sigaction sa;
30 
31 	memset(&sa, 0, sizeof(sa));
32 	sa.sa_sigaction = sigfpe;
33 	sa.sa_flags = SA_SIGINFO;
34 	sigaction(SIGFPE, &sa, NULL);
35 
36 	if (rint(8.6) != 9.)
37 		errx(1, "rint");
38 	if (rintf(8.6F) != 9)
39 		errx(1, "rintf");
40 	if (rintl(8.6L) != 9)
41 		errx(1, "rintl");
42  	if (lrint(8.6) != 9L)
43  		errx(1, "lrint");
44  	if (lrintf(8.6F) != 9L)
45  		errx(1, "lrintf");
46  	if (llrint(8.6) != 9LL)
47  		errx(1, "llrint");
48  	if (llrintf(8.6F) != 9LL)
49  		errx(1, "llrintf");
50 
51 	exit(0);
52 }
53