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