xref: /netbsd-src/tests/lib/libc/stdlib/t_atoi.c (revision 37649e4074cc6bc66aa177a37baeb696a198aa8d)
1*37649e40Smrg /* $NetBSD: t_atoi.c,v 1.3 2019/02/03 10:48:46 mrg Exp $ */
20d64217dSjruoho 
30d64217dSjruoho /*-
40d64217dSjruoho  * Copyright (c) 2012 The NetBSD Foundation, Inc.
50d64217dSjruoho  * All rights reserved.
60d64217dSjruoho  *
70d64217dSjruoho  * This code is derived from software contributed to The NetBSD Foundation
80d64217dSjruoho  * by Jukka Ruohonen.
90d64217dSjruoho  *
100d64217dSjruoho  * Redistribution and use in source and binary forms, with or without
110d64217dSjruoho  * modification, are permitted provided that the following conditions
120d64217dSjruoho  * are met:
130d64217dSjruoho  * 1. Redistributions of source code must retain the above copyright
140d64217dSjruoho  *    notice, this list of conditions and the following disclaimer.
150d64217dSjruoho  * 2. Redistributions in binary form must reproduce the above copyright
160d64217dSjruoho  *    notice, this list of conditions and the following disclaimer in the
170d64217dSjruoho  *    documentation and/or other materials provided with the distribution.
180d64217dSjruoho  *
190d64217dSjruoho  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
200d64217dSjruoho  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
210d64217dSjruoho  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
220d64217dSjruoho  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
230d64217dSjruoho  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
240d64217dSjruoho  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
250d64217dSjruoho  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
260d64217dSjruoho  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
270d64217dSjruoho  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
280d64217dSjruoho  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
290d64217dSjruoho  * POSSIBILITY OF SUCH DAMAGE.
300d64217dSjruoho  */
310d64217dSjruoho #include <sys/cdefs.h>
32*37649e40Smrg __RCSID("$NetBSD: t_atoi.c,v 1.3 2019/02/03 10:48:46 mrg Exp $");
330d64217dSjruoho 
340d64217dSjruoho #include <atf-c.h>
350d64217dSjruoho #include <float.h>
360d64217dSjruoho #include <limits.h>
370d64217dSjruoho #include <stdio.h>
380d64217dSjruoho #include <stdlib.h>
390d64217dSjruoho 
400d64217dSjruoho ATF_TC(atof_strtod);
ATF_TC_HEAD(atof_strtod,tc)410d64217dSjruoho ATF_TC_HEAD(atof_strtod, tc)
420d64217dSjruoho {
430d64217dSjruoho 	atf_tc_set_md_var(tc, "descr",
440d64217dSjruoho 	    "Test that atof(3) matches the corresponding strtod(3) call");
450d64217dSjruoho }
460d64217dSjruoho 
ATF_TC_BODY(atof_strtod,tc)470d64217dSjruoho ATF_TC_BODY(atof_strtod, tc)
480d64217dSjruoho {
49*37649e40Smrg 	char buf[320];
500d64217dSjruoho 
510d64217dSjruoho 	(void)snprintf(buf, sizeof(buf), "%f\n", DBL_MAX);
520d64217dSjruoho 
530d64217dSjruoho 	ATF_REQUIRE(atof("0")  == strtod("0", NULL));
540d64217dSjruoho 	ATF_REQUIRE(atof("-1") == strtod("-1", NULL));
550d64217dSjruoho 	ATF_REQUIRE(atof(buf)  == strtod(buf, NULL));
560d64217dSjruoho }
570d64217dSjruoho 
580d64217dSjruoho ATF_TC(atoi_strtol);
ATF_TC_HEAD(atoi_strtol,tc)590d64217dSjruoho ATF_TC_HEAD(atoi_strtol, tc)
600d64217dSjruoho {
610d64217dSjruoho 	atf_tc_set_md_var(tc, "descr",
620d64217dSjruoho 	    "Test that atoi(3) matches the corresponding strtol(3) call");
630d64217dSjruoho }
640d64217dSjruoho 
ATF_TC_BODY(atoi_strtol,tc)650d64217dSjruoho ATF_TC_BODY(atoi_strtol, tc)
660d64217dSjruoho {
670d64217dSjruoho 	char buf[64];
680d64217dSjruoho 
690d64217dSjruoho 	(void)snprintf(buf, sizeof(buf), "%d\n", INT_MAX);
700d64217dSjruoho 
710d64217dSjruoho 	ATF_REQUIRE(atoi("0")  == strtol("0", NULL, 10));
720d64217dSjruoho 	ATF_REQUIRE(atoi("-1") == strtol("-1", NULL, 10));
730d64217dSjruoho 	ATF_REQUIRE(atoi(buf)  == strtol(buf, NULL, 10));
740d64217dSjruoho }
750d64217dSjruoho 
760d64217dSjruoho ATF_TC(atol_strtol);
ATF_TC_HEAD(atol_strtol,tc)770d64217dSjruoho ATF_TC_HEAD(atol_strtol, tc)
780d64217dSjruoho {
790d64217dSjruoho 	atf_tc_set_md_var(tc, "descr",
800d64217dSjruoho 	    "Test that atol(3) matches the corresponding strtol(3) call");
810d64217dSjruoho }
820d64217dSjruoho 
ATF_TC_BODY(atol_strtol,tc)830d64217dSjruoho ATF_TC_BODY(atol_strtol, tc)
840d64217dSjruoho {
850d64217dSjruoho 	char buf[64];
860d64217dSjruoho 
870d64217dSjruoho 	(void)snprintf(buf, sizeof(buf), "%ld\n", LONG_MAX);
880d64217dSjruoho 
890d64217dSjruoho 	ATF_REQUIRE(atol("0")  == strtol("0", NULL, 10));
900d64217dSjruoho 	ATF_REQUIRE(atol("-1") == strtol("-1", NULL, 10));
910d64217dSjruoho 	ATF_REQUIRE(atol(buf)  == strtol(buf, NULL, 10));
920d64217dSjruoho }
930d64217dSjruoho 
9438e01d91Sjruoho ATF_TC(atoll_strtoll);
ATF_TC_HEAD(atoll_strtoll,tc)9538e01d91Sjruoho ATF_TC_HEAD(atoll_strtoll, tc)
9638e01d91Sjruoho {
9738e01d91Sjruoho 	atf_tc_set_md_var(tc, "descr",
9838e01d91Sjruoho 	    "Test that atoll(3) matches the corresponding strtoll(3) call");
9938e01d91Sjruoho }
10038e01d91Sjruoho 
ATF_TC_BODY(atoll_strtoll,tc)10138e01d91Sjruoho ATF_TC_BODY(atoll_strtoll, tc)
10238e01d91Sjruoho {
10338e01d91Sjruoho 	char buf[128];
10438e01d91Sjruoho 
10538e01d91Sjruoho 	(void)snprintf(buf, sizeof(buf), "%lld\n", LLONG_MAX);
10638e01d91Sjruoho 
10738e01d91Sjruoho 	ATF_REQUIRE(atoll("0")  == strtoll("0", NULL, 10));
10838e01d91Sjruoho 	ATF_REQUIRE(atoll("-1") == strtoll("-1", NULL, 10));
10938e01d91Sjruoho 	ATF_REQUIRE(atoll(buf)  == strtoll(buf, NULL, 10));
11038e01d91Sjruoho }
11138e01d91Sjruoho 
ATF_TP_ADD_TCS(tp)1120d64217dSjruoho ATF_TP_ADD_TCS(tp)
1130d64217dSjruoho {
1140d64217dSjruoho 
1150d64217dSjruoho 	ATF_TP_ADD_TC(tp, atof_strtod);
1160d64217dSjruoho 	ATF_TP_ADD_TC(tp, atoi_strtol);
1170d64217dSjruoho 	ATF_TP_ADD_TC(tp, atol_strtol);
11838e01d91Sjruoho 	ATF_TP_ADD_TC(tp, atoll_strtoll);
1190d64217dSjruoho 
1200d64217dSjruoho 	return atf_no_error();
1210d64217dSjruoho }
122