1*4d065f3eSjoerg /* $NetBSD: t_abs.c,v 1.3 2014/03/01 22:38:13 joerg Exp $ */
206f1efebSjruoho
306f1efebSjruoho /*-
406f1efebSjruoho * Copyright (c) 2012 The NetBSD Foundation, Inc.
506f1efebSjruoho * All rights reserved.
606f1efebSjruoho *
706f1efebSjruoho * This code is derived from software contributed to The NetBSD Foundation
806f1efebSjruoho * by Jukka Ruohonen.
906f1efebSjruoho *
1006f1efebSjruoho * Redistribution and use in source and binary forms, with or without
1106f1efebSjruoho * modification, are permitted provided that the following conditions
1206f1efebSjruoho * are met:
1306f1efebSjruoho * 1. Redistributions of source code must retain the above copyright
1406f1efebSjruoho * notice, this list of conditions and the following disclaimer.
1506f1efebSjruoho * 2. Redistributions in binary form must reproduce the above copyright
1606f1efebSjruoho * notice, this list of conditions and the following disclaimer in the
1706f1efebSjruoho * documentation and/or other materials provided with the distribution.
1806f1efebSjruoho *
1906f1efebSjruoho * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
2006f1efebSjruoho * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
2106f1efebSjruoho * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2206f1efebSjruoho * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2306f1efebSjruoho * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2406f1efebSjruoho * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2506f1efebSjruoho * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2606f1efebSjruoho * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2706f1efebSjruoho * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2806f1efebSjruoho * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2906f1efebSjruoho * POSSIBILITY OF SUCH DAMAGE.
3006f1efebSjruoho */
3106f1efebSjruoho #include <sys/cdefs.h>
32*4d065f3eSjoerg __RCSID("$NetBSD: t_abs.c,v 1.3 2014/03/01 22:38:13 joerg Exp $");
3306f1efebSjruoho
3406f1efebSjruoho #include <atf-c.h>
3506f1efebSjruoho #include <inttypes.h>
3606f1efebSjruoho #include <limits.h>
3706f1efebSjruoho #include <stdlib.h>
3806f1efebSjruoho
3906f1efebSjruoho ATF_TC(abs_basic);
ATF_TC_HEAD(abs_basic,tc)4006f1efebSjruoho ATF_TC_HEAD(abs_basic, tc)
4106f1efebSjruoho {
4206f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that abs(3) works");
4306f1efebSjruoho }
4406f1efebSjruoho
ATF_TC_BODY(abs_basic,tc)4506f1efebSjruoho ATF_TC_BODY(abs_basic, tc)
4606f1efebSjruoho {
477fd63003Sjoerg static const struct {
487fd63003Sjoerg int val;
497fd63003Sjoerg int res;
507fd63003Sjoerg } table[] = {
5106f1efebSjruoho { 0, 0 },
5206f1efebSjruoho { +0, 0 },
5306f1efebSjruoho { -0, 0 },
5406f1efebSjruoho { -0x1010, 0x1010 },
5506f1efebSjruoho { INT_MAX, INT_MAX },
5606f1efebSjruoho { -INT_MAX, INT_MAX },
5706f1efebSjruoho };
5806f1efebSjruoho
5906f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++)
607fd63003Sjoerg ATF_CHECK(abs(table[i].val) == table[i].res);
6106f1efebSjruoho }
6206f1efebSjruoho
6306f1efebSjruoho ATF_TC(imaxabs_basic);
ATF_TC_HEAD(imaxabs_basic,tc)6406f1efebSjruoho ATF_TC_HEAD(imaxabs_basic, tc)
6506f1efebSjruoho {
6606f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that imaxabs(3) works");
6706f1efebSjruoho }
6806f1efebSjruoho
ATF_TC_BODY(imaxabs_basic,tc)6906f1efebSjruoho ATF_TC_BODY(imaxabs_basic, tc)
7006f1efebSjruoho {
717fd63003Sjoerg static const struct {
727fd63003Sjoerg intmax_t val;
737fd63003Sjoerg intmax_t res;
747fd63003Sjoerg } table[] = {
7506f1efebSjruoho { 0, 0 },
7606f1efebSjruoho { INT_MAX, INT_MAX },
7706f1efebSjruoho { -INT_MAX, INT_MAX },
787fd63003Sjoerg { LONG_MAX, LONG_MAX },
797fd63003Sjoerg { -LONG_MAX, LONG_MAX },
807fd63003Sjoerg { LLONG_MAX, LLONG_MAX },
817fd63003Sjoerg { -LLONG_MAX, LLONG_MAX },
827fd63003Sjoerg { INT_MAX, INT_MAX },
837fd63003Sjoerg { -INT_MAX, INT_MAX },
8406f1efebSjruoho };
8506f1efebSjruoho
8606f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++)
877fd63003Sjoerg ATF_CHECK(imaxabs(table[i].val) == table[i].res);
8806f1efebSjruoho }
8906f1efebSjruoho
9006f1efebSjruoho ATF_TC(labs_basic);
ATF_TC_HEAD(labs_basic,tc)9106f1efebSjruoho ATF_TC_HEAD(labs_basic, tc)
9206f1efebSjruoho {
9306f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that labs(3) works");
9406f1efebSjruoho }
9506f1efebSjruoho
ATF_TC_BODY(labs_basic,tc)9606f1efebSjruoho ATF_TC_BODY(labs_basic, tc)
9706f1efebSjruoho {
987fd63003Sjoerg static const struct {
997fd63003Sjoerg long val;
1007fd63003Sjoerg long res;
1017fd63003Sjoerg } table[] = {
10206f1efebSjruoho { 0, 0 },
10306f1efebSjruoho { +0, 0 },
10406f1efebSjruoho { -0, 0 },
10506f1efebSjruoho { -1, 1 },
10606f1efebSjruoho { LONG_MAX, LONG_MAX },
10706f1efebSjruoho { -LONG_MAX, LONG_MAX },
1087fd63003Sjoerg { INT_MAX, INT_MAX },
109*4d065f3eSjoerg { -INT_MAX, INT_MAX },
11006f1efebSjruoho };
11106f1efebSjruoho
11206f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++)
1137fd63003Sjoerg ATF_CHECK(labs(table[i].val) == table[i].res);
11406f1efebSjruoho }
11506f1efebSjruoho
11606f1efebSjruoho ATF_TC(llabs_basic);
ATF_TC_HEAD(llabs_basic,tc)11706f1efebSjruoho ATF_TC_HEAD(llabs_basic, tc)
11806f1efebSjruoho {
11906f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that llabs(3) works");
12006f1efebSjruoho }
12106f1efebSjruoho
ATF_TC_BODY(llabs_basic,tc)12206f1efebSjruoho ATF_TC_BODY(llabs_basic, tc)
12306f1efebSjruoho {
1247fd63003Sjoerg static const struct {
1257fd63003Sjoerg long long val;
1267fd63003Sjoerg long long res;
1277fd63003Sjoerg } table[] = {
12806f1efebSjruoho { 0, 0 },
12906f1efebSjruoho { +0, 0 },
13006f1efebSjruoho { -0, 0 },
13106f1efebSjruoho { -1, 1 },
1327fd63003Sjoerg { INT_MAX, INT_MAX },
1337fd63003Sjoerg { -INT_MAX, INT_MAX },
1347fd63003Sjoerg { LONG_MAX, LONG_MAX },
1357fd63003Sjoerg { -LONG_MAX, LONG_MAX },
13606f1efebSjruoho { LLONG_MAX, LLONG_MAX },
13706f1efebSjruoho { -LLONG_MAX, LLONG_MAX },
1387fd63003Sjoerg { -0x100000000LL, 0x100000000LL },
13906f1efebSjruoho };
14006f1efebSjruoho
14106f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++)
1427fd63003Sjoerg ATF_CHECK(llabs(table[i].val) == table[i].res);
14306f1efebSjruoho }
14406f1efebSjruoho
ATF_TP_ADD_TCS(tp)14506f1efebSjruoho ATF_TP_ADD_TCS(tp)
14606f1efebSjruoho {
14706f1efebSjruoho
14806f1efebSjruoho ATF_TP_ADD_TC(tp, abs_basic);
14906f1efebSjruoho ATF_TP_ADD_TC(tp, imaxabs_basic);
15006f1efebSjruoho ATF_TP_ADD_TC(tp, labs_basic);
15106f1efebSjruoho ATF_TP_ADD_TC(tp, llabs_basic);
15206f1efebSjruoho
15306f1efebSjruoho return atf_no_error();
15406f1efebSjruoho }
155