xref: /netbsd-src/tests/lib/libc/gen/t_isnan.c (revision 97c0a6f6478e7b9603a44e2166f483a0ad5c7958)
1*97c0a6f6Sjustin /* $NetBSD: t_isnan.c,v 1.5 2014/11/04 00:20:19 justin Exp $ */
24a45a29aSjruoho 
34a45a29aSjruoho /*
44a45a29aSjruoho  * This file is in the Public Domain.
54a45a29aSjruoho  *
64a45a29aSjruoho  * The nan test is blatently copied by Simon Burge from the infinity
74a45a29aSjruoho  * test by Ben Harris.
84a45a29aSjruoho  */
94a45a29aSjruoho 
10e110dcc9Sjmmv #include <sys/param.h>
11e110dcc9Sjmmv 
124a45a29aSjruoho #include <atf-c.h>
134a45a29aSjruoho 
144a45a29aSjruoho #include <math.h>
154a45a29aSjruoho #include <string.h>
164a45a29aSjruoho 
174a45a29aSjruoho ATF_TC(isnan_basic);
ATF_TC_HEAD(isnan_basic,tc)184a45a29aSjruoho ATF_TC_HEAD(isnan_basic, tc)
194a45a29aSjruoho {
204a45a29aSjruoho 	atf_tc_set_md_var(tc, "descr", "Verify that isnan(3) works");
214a45a29aSjruoho }
224a45a29aSjruoho 
ATF_TC_BODY(isnan_basic,tc)234a45a29aSjruoho ATF_TC_BODY(isnan_basic, tc)
244a45a29aSjruoho {
25e110dcc9Sjmmv #if defined(__m68k__)
26e110dcc9Sjmmv 	atf_tc_skip("Test not applicable on " MACHINE_ARCH);
27e110dcc9Sjmmv #endif
28e110dcc9Sjmmv 
290422e3f4Smartin #ifdef NAN
304a45a29aSjruoho 	/* NAN is meant to be a (float)NaN. */
314a45a29aSjruoho 	ATF_CHECK(isnan(NAN) != 0);
324a45a29aSjruoho 	ATF_CHECK(isnan((double)NAN) != 0);
337e7cfe75Smartin #else
347e7cfe75Smartin 	atf_tc_skip("Test not applicable");
350422e3f4Smartin #endif
364a45a29aSjruoho }
374a45a29aSjruoho 
384a45a29aSjruoho ATF_TC(isinf_basic);
ATF_TC_HEAD(isinf_basic,tc)394a45a29aSjruoho ATF_TC_HEAD(isinf_basic, tc)
404a45a29aSjruoho {
414a45a29aSjruoho 	atf_tc_set_md_var(tc, "descr", "Verify that isinf(3) works");
424a45a29aSjruoho }
434a45a29aSjruoho 
ATF_TC_BODY(isinf_basic,tc)444a45a29aSjruoho ATF_TC_BODY(isinf_basic, tc)
454a45a29aSjruoho {
46e110dcc9Sjmmv #if defined(__m68k__)
47e110dcc9Sjmmv 	atf_tc_skip("Test not applicable on " MACHINE_ARCH);
48e110dcc9Sjmmv #endif
494a45a29aSjruoho 
504a45a29aSjruoho 	/* HUGE_VAL is meant to be an infinity. */
514a45a29aSjruoho 	ATF_CHECK(isinf(HUGE_VAL) != 0);
524a45a29aSjruoho 
534a45a29aSjruoho 	/* HUGE_VALF is the float analog of HUGE_VAL. */
544a45a29aSjruoho 	ATF_CHECK(isinf(HUGE_VALF) != 0);
554a45a29aSjruoho 
564a45a29aSjruoho 	/* HUGE_VALL is the long double analog of HUGE_VAL. */
574a45a29aSjruoho 	ATF_CHECK(isinf(HUGE_VALL) != 0);
584a45a29aSjruoho }
594a45a29aSjruoho 
ATF_TP_ADD_TCS(tp)604a45a29aSjruoho ATF_TP_ADD_TCS(tp)
614a45a29aSjruoho {
624a45a29aSjruoho 	ATF_TP_ADD_TC(tp, isnan_basic);
634a45a29aSjruoho 	ATF_TP_ADD_TC(tp, isinf_basic);
644a45a29aSjruoho 
654a45a29aSjruoho 	return atf_no_error();
664a45a29aSjruoho }
67