xref: /openbsd-src/regress/lib/libc/fpclassify/fpclassify.c (revision 7b36286a70b46b494e2bca4a889ab49ef62ba86c)
1*7b36286aSmartynas /*	$OpenBSD: fpclassify.c,v 1.1 2008/09/07 20:36:10 martynas Exp $	*/
2*7b36286aSmartynas /*-
3*7b36286aSmartynas  * Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org>
4*7b36286aSmartynas  * All rights reserved.
5*7b36286aSmartynas  *
6*7b36286aSmartynas  * Redistribution and use in source and binary forms, with or without
7*7b36286aSmartynas  * modification, are permitted provided that the following conditions
8*7b36286aSmartynas  * are met:
9*7b36286aSmartynas  * 1. Redistributions of source code must retain the above copyright
10*7b36286aSmartynas  *    notice, this list of conditions and the following disclaimer.
11*7b36286aSmartynas  * 2. Redistributions in binary form must reproduce the above copyright
12*7b36286aSmartynas  *    notice, this list of conditions and the following disclaimer in the
13*7b36286aSmartynas  *    documentation and/or other materials provided with the distribution.
14*7b36286aSmartynas  *
15*7b36286aSmartynas  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16*7b36286aSmartynas  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17*7b36286aSmartynas  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18*7b36286aSmartynas  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19*7b36286aSmartynas  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20*7b36286aSmartynas  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21*7b36286aSmartynas  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22*7b36286aSmartynas  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23*7b36286aSmartynas  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24*7b36286aSmartynas  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25*7b36286aSmartynas  * SUCH DAMAGE.
26*7b36286aSmartynas  *
27*7b36286aSmartynas  * $FreeBSD: src/tools/regression/lib/libc/gen/test-fpclassify.c,v 1.3 2003/03/27 05:32:28 das Exp $
28*7b36286aSmartynas  */
29*7b36286aSmartynas 
30*7b36286aSmartynas #include <assert.h>
31*7b36286aSmartynas #include <float.h>
32*7b36286aSmartynas #include <math.h>
33*7b36286aSmartynas #include <stdlib.h>
34*7b36286aSmartynas 
35*7b36286aSmartynas int
main(void)36*7b36286aSmartynas main(void)
37*7b36286aSmartynas {
38*7b36286aSmartynas 
39*7b36286aSmartynas 	assert(fpclassify((float)0) == FP_ZERO);
40*7b36286aSmartynas 	assert(fpclassify((float)-0.0) == FP_ZERO);
41*7b36286aSmartynas 	assert(fpclassify((float)1) == FP_NORMAL);
42*7b36286aSmartynas 	assert(fpclassify((float)1000) == FP_NORMAL);
43*7b36286aSmartynas #ifndef __alpha__
44*7b36286aSmartynas 	assert(fpclassify(0x1.2p-150f) == FP_SUBNORMAL);
45*7b36286aSmartynas #endif /* !__alpha__ */
46*7b36286aSmartynas 	assert(fpclassify(HUGE_VALF) == FP_INFINITE);
47*7b36286aSmartynas 	assert(fpclassify((float)HUGE_VAL) == FP_INFINITE);
48*7b36286aSmartynas 	assert(fpclassify((float)HUGE_VALL) == FP_INFINITE);
49*7b36286aSmartynas 	assert(fpclassify(NAN) == FP_NAN);
50*7b36286aSmartynas 
51*7b36286aSmartynas 	assert(fpclassify((double)0) == FP_ZERO);
52*7b36286aSmartynas 	assert(fpclassify((double)-0) == FP_ZERO);
53*7b36286aSmartynas 	assert(fpclassify((double)1) == FP_NORMAL);
54*7b36286aSmartynas 	assert(fpclassify((double)1000) == FP_NORMAL);
55*7b36286aSmartynas #ifndef __alpha__
56*7b36286aSmartynas 	assert(fpclassify(0x1.2p-1075) == FP_SUBNORMAL);
57*7b36286aSmartynas #endif /* !__alpha__ */
58*7b36286aSmartynas 	assert(fpclassify(HUGE_VAL) == FP_INFINITE);
59*7b36286aSmartynas 	assert(fpclassify((double)HUGE_VALF) == FP_INFINITE);
60*7b36286aSmartynas 	assert(fpclassify((double)HUGE_VALL) == FP_INFINITE);
61*7b36286aSmartynas 	assert(fpclassify((double)NAN) == FP_NAN);
62*7b36286aSmartynas 
63*7b36286aSmartynas 	assert(fpclassify((long double)0) == FP_ZERO);
64*7b36286aSmartynas 	assert(fpclassify((long double)-0.0) == FP_ZERO);
65*7b36286aSmartynas 	assert(fpclassify((long double)1) == FP_NORMAL);
66*7b36286aSmartynas 	assert(fpclassify((long double)1000) == FP_NORMAL);
67*7b36286aSmartynas #if (LDBL_MANT_DIG > DBL_MANT_DIG)
68*7b36286aSmartynas 	assert(fpclassify(0x1.2p-16383L) == FP_SUBNORMAL);
69*7b36286aSmartynas #endif /* (LDBL_MANT_DIG > DBL_MANT_DIG) */
70*7b36286aSmartynas 	assert(fpclassify(HUGE_VALL) == FP_INFINITE);
71*7b36286aSmartynas 	assert(fpclassify((long double)HUGE_VALF) == FP_INFINITE);
72*7b36286aSmartynas 	assert(fpclassify((long double)HUGE_VAL) == FP_INFINITE);
73*7b36286aSmartynas 	assert(fpclassify((long double)NAN) == FP_NAN);
74*7b36286aSmartynas 
75*7b36286aSmartynas 	return (0);
76*7b36286aSmartynas }
77