1*06f1efebSjruoho /* $NetBSD: t_abs.c,v 1.1 2012/03/29 06:16:56 jruoho Exp $ */ 2*06f1efebSjruoho 3*06f1efebSjruoho /*- 4*06f1efebSjruoho * Copyright (c) 2012 The NetBSD Foundation, Inc. 5*06f1efebSjruoho * All rights reserved. 6*06f1efebSjruoho * 7*06f1efebSjruoho * This code is derived from software contributed to The NetBSD Foundation 8*06f1efebSjruoho * by Jukka Ruohonen. 9*06f1efebSjruoho * 10*06f1efebSjruoho * Redistribution and use in source and binary forms, with or without 11*06f1efebSjruoho * modification, are permitted provided that the following conditions 12*06f1efebSjruoho * are met: 13*06f1efebSjruoho * 1. Redistributions of source code must retain the above copyright 14*06f1efebSjruoho * notice, this list of conditions and the following disclaimer. 15*06f1efebSjruoho * 2. Redistributions in binary form must reproduce the above copyright 16*06f1efebSjruoho * notice, this list of conditions and the following disclaimer in the 17*06f1efebSjruoho * documentation and/or other materials provided with the distribution. 18*06f1efebSjruoho * 19*06f1efebSjruoho * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*06f1efebSjruoho * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*06f1efebSjruoho * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*06f1efebSjruoho * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*06f1efebSjruoho * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*06f1efebSjruoho * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*06f1efebSjruoho * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*06f1efebSjruoho * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*06f1efebSjruoho * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*06f1efebSjruoho * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*06f1efebSjruoho * POSSIBILITY OF SUCH DAMAGE. 30*06f1efebSjruoho */ 31*06f1efebSjruoho #include <sys/cdefs.h> 32*06f1efebSjruoho __RCSID("$NetBSD: t_abs.c,v 1.1 2012/03/29 06:16:56 jruoho Exp $"); 33*06f1efebSjruoho 34*06f1efebSjruoho #include <atf-c.h> 35*06f1efebSjruoho #include <inttypes.h> 36*06f1efebSjruoho #include <limits.h> 37*06f1efebSjruoho #include <stdlib.h> 38*06f1efebSjruoho 39*06f1efebSjruoho struct test { 40*06f1efebSjruoho int64_t val; 41*06f1efebSjruoho int64_t res; 42*06f1efebSjruoho }; 43*06f1efebSjruoho 44*06f1efebSjruoho ATF_TC(abs_basic); 45*06f1efebSjruoho ATF_TC_HEAD(abs_basic, tc) 46*06f1efebSjruoho { 47*06f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that abs(3) works"); 48*06f1efebSjruoho } 49*06f1efebSjruoho 50*06f1efebSjruoho ATF_TC_BODY(abs_basic, tc) 51*06f1efebSjruoho { 52*06f1efebSjruoho static const struct test table[] = { 53*06f1efebSjruoho { 0, 0 }, 54*06f1efebSjruoho { +0, 0 }, 55*06f1efebSjruoho { -0, 0 }, 56*06f1efebSjruoho { -0x1010, 0x1010 }, 57*06f1efebSjruoho { INT_MAX, INT_MAX }, 58*06f1efebSjruoho { -INT_MAX, INT_MAX }, 59*06f1efebSjruoho }; 60*06f1efebSjruoho 61*06f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++) 62*06f1efebSjruoho ATF_CHECK(abs(table[i].val) == (int)table[i].res); 63*06f1efebSjruoho } 64*06f1efebSjruoho 65*06f1efebSjruoho ATF_TC(imaxabs_basic); 66*06f1efebSjruoho ATF_TC_HEAD(imaxabs_basic, tc) 67*06f1efebSjruoho { 68*06f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that imaxabs(3) works"); 69*06f1efebSjruoho } 70*06f1efebSjruoho 71*06f1efebSjruoho ATF_TC_BODY(imaxabs_basic, tc) 72*06f1efebSjruoho { 73*06f1efebSjruoho static const struct test table[] = { 74*06f1efebSjruoho { 0, 0 }, 75*06f1efebSjruoho { INT_MAX, INT_MAX }, 76*06f1efebSjruoho { -INT_MAX, INT_MAX }, 77*06f1efebSjruoho }; 78*06f1efebSjruoho 79*06f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++) 80*06f1efebSjruoho ATF_CHECK(imaxabs(table[i].val) == (intmax_t)table[i].res); 81*06f1efebSjruoho } 82*06f1efebSjruoho 83*06f1efebSjruoho ATF_TC(labs_basic); 84*06f1efebSjruoho ATF_TC_HEAD(labs_basic, tc) 85*06f1efebSjruoho { 86*06f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that labs(3) works"); 87*06f1efebSjruoho } 88*06f1efebSjruoho 89*06f1efebSjruoho ATF_TC_BODY(labs_basic, tc) 90*06f1efebSjruoho { 91*06f1efebSjruoho static const struct test table[] = { 92*06f1efebSjruoho { 0, 0 }, 93*06f1efebSjruoho { +0, 0 }, 94*06f1efebSjruoho { -0, 0 }, 95*06f1efebSjruoho { -1, 1 }, 96*06f1efebSjruoho { LONG_MAX, LONG_MAX }, 97*06f1efebSjruoho { -LONG_MAX, LONG_MAX }, 98*06f1efebSjruoho { -0x100000000, 0x100000000 }, 99*06f1efebSjruoho }; 100*06f1efebSjruoho 101*06f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++) 102*06f1efebSjruoho ATF_CHECK(labs(table[i].val) == (long int)table[i].res); 103*06f1efebSjruoho } 104*06f1efebSjruoho 105*06f1efebSjruoho ATF_TC(llabs_basic); 106*06f1efebSjruoho ATF_TC_HEAD(llabs_basic, tc) 107*06f1efebSjruoho { 108*06f1efebSjruoho atf_tc_set_md_var(tc, "descr", "Test that llabs(3) works"); 109*06f1efebSjruoho } 110*06f1efebSjruoho 111*06f1efebSjruoho ATF_TC_BODY(llabs_basic, tc) 112*06f1efebSjruoho { 113*06f1efebSjruoho static const struct test table[] = { 114*06f1efebSjruoho { 0, 0 }, 115*06f1efebSjruoho { +0, 0 }, 116*06f1efebSjruoho { -0, 0 }, 117*06f1efebSjruoho { -1, 1 }, 118*06f1efebSjruoho { LLONG_MAX, LLONG_MAX }, 119*06f1efebSjruoho { -LLONG_MAX, LLONG_MAX }, 120*06f1efebSjruoho { -0x100000000, 0x100000000 }, 121*06f1efebSjruoho }; 122*06f1efebSjruoho 123*06f1efebSjruoho for (size_t i = 0; i < __arraycount(table); i++) 124*06f1efebSjruoho ATF_CHECK(llabs(table[i].val) == (long long int)table[i].res); 125*06f1efebSjruoho } 126*06f1efebSjruoho 127*06f1efebSjruoho ATF_TP_ADD_TCS(tp) 128*06f1efebSjruoho { 129*06f1efebSjruoho 130*06f1efebSjruoho ATF_TP_ADD_TC(tp, abs_basic); 131*06f1efebSjruoho ATF_TP_ADD_TC(tp, imaxabs_basic); 132*06f1efebSjruoho ATF_TP_ADD_TC(tp, labs_basic); 133*06f1efebSjruoho ATF_TP_ADD_TC(tp, llabs_basic); 134*06f1efebSjruoho 135*06f1efebSjruoho return atf_no_error(); 136*06f1efebSjruoho } 137