From ce4e3aa2a076af49b89a5ad17d559de5c5ff2529 Mon Sep 17 00:00:00 2001 From: ross Date: Tue, 22 Jan 2002 01:19:25 +0000 Subject: [PATCH] Remove the old alpha divrem test and replace it with a new indep one. The old one was never run because it required a remote host. The new one has more knowledge of where the error cases are likely to be, and instead of using a big file or remote test system, it just keeps an md5 (in the Makefile) of the endian-indep known-good results. --- regress/lib/libc/Makefile | 5 +- regress/lib/libc/arch/alpha/Makefile | 6 - regress/lib/libc/arch/alpha/Makefile.inc | 4 - .../lib/libc/arch/alpha/divremtest/Makefile | 29 --- .../libc/arch/alpha/divremtest/divremtest.c | 186 ------------------ .../lib/libc/arch/alpha/divremtest/mkcases.c | 66 ------- .../libc/arch/alpha/divremtest/mktestcases.c | 70 ------- regress/lib/libc/divrem/Makefile | 11 ++ regress/lib/libc/divrem/divremtest.c | 63 ++++++ 9 files changed, 77 insertions(+), 363 deletions(-) delete mode 100644 regress/lib/libc/arch/alpha/Makefile delete mode 100644 regress/lib/libc/arch/alpha/Makefile.inc delete mode 100644 regress/lib/libc/arch/alpha/divremtest/Makefile delete mode 100644 regress/lib/libc/arch/alpha/divremtest/divremtest.c delete mode 100644 regress/lib/libc/arch/alpha/divremtest/mkcases.c delete mode 100644 regress/lib/libc/arch/alpha/divremtest/mktestcases.c create mode 100644 regress/lib/libc/divrem/Makefile create mode 100644 regress/lib/libc/divrem/divremtest.c diff --git a/regress/lib/libc/Makefile b/regress/lib/libc/Makefile index 788722d42946..d22884c65b9c 100644 --- a/regress/lib/libc/Makefile +++ b/regress/lib/libc/Makefile @@ -1,6 +1,7 @@ -# $NetBSD: Makefile,v 1.22 2001/09/22 19:57:42 simonb Exp $ +# $NetBSD: Makefile,v 1.23 2002/01/22 01:19:25 ross Exp $ -SUBDIR+= _setjmp clone db div gen hsearch int_fmtio md5sha popen regex rpc \ +SUBDIR+= _setjmp clone db div divrem \ + gen hsearch int_fmtio md5sha popen regex rpc \ setjmp sigsetjmp string sys time .if (${MACHINE_ARCH} != "arm32" && ${MACHINE_ARCH} != "vax") SUBDIR+= ieeefp diff --git a/regress/lib/libc/arch/alpha/Makefile b/regress/lib/libc/arch/alpha/Makefile deleted file mode 100644 index dcd124006ee9..000000000000 --- a/regress/lib/libc/arch/alpha/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# $NetBSD: Makefile,v 1.4 1997/10/11 22:57:29 mycroft Exp $ - -# do nothing here; none of the tests here can be run automatically -#SUBDIR= - -.include diff --git a/regress/lib/libc/arch/alpha/Makefile.inc b/regress/lib/libc/arch/alpha/Makefile.inc deleted file mode 100644 index a12a5881b2f2..000000000000 --- a/regress/lib/libc/arch/alpha/Makefile.inc +++ /dev/null @@ -1,4 +0,0 @@ -# $NetBSD: Makefile.inc,v 1.2 1998/01/09 08:03:47 perry Exp $ -# -# do not install regression test programs -proginstall:: diff --git a/regress/lib/libc/arch/alpha/divremtest/Makefile b/regress/lib/libc/arch/alpha/divremtest/Makefile deleted file mode 100644 index 1dd3116e9928..000000000000 --- a/regress/lib/libc/arch/alpha/divremtest/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -# $NetBSD: Makefile,v 1.3 2001/12/12 01:24:00 tv Exp $ - -PROG= divremtest -NOMAN= # defined - -CLEANFILES+= mkcases cases.c mktestcases testcases - -divremtest.c: cases.c - -cases.c: mkcases - /bin/rm -f cases.c - mkcases > cases.c - -# a typical strategy to use this: -# compile a NetBSD divremtest binary, an OSF/1 divremtest binary, and an -# OSF/1 mktestcases binary. You then run mktestecases | divremtest -g -# on an OSF/1 machine, and pipe the output to an rsh to a NetBSD machine -# which then runs divremtest. You can test an infinite number of random -# values that way; I like to put a 'dd' in, so I can see how much I've done. - -testcases: mktestcases divremtest - /bin/rm -f testcases - mktestcases | divremtest -g > testcases - -regress: - @echo THIS TEST CANNOT BE RUN AUTOMATICALLY. - @false - -.include diff --git a/regress/lib/libc/arch/alpha/divremtest/divremtest.c b/regress/lib/libc/arch/alpha/divremtest/divremtest.c deleted file mode 100644 index e85414c43022..000000000000 --- a/regress/lib/libc/arch/alpha/divremtest/divremtest.c +++ /dev/null @@ -1,186 +0,0 @@ -/* $NetBSD: divremtest.c,v 1.3 2000/06/14 17:25:19 cgd Exp $ */ - -/* - * Copyright (c) 1995 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the - * NetBSD Project. See http://www.netbsd.org/ for - * information about NetBSD. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * <> - */ - -#include -#include -#include - -void testfile(); -void usage(); - -int generate; - -int -main(argc, argv) - int argc; - char **argv; -{ - int c; - - signal(SIGFPE, SIG_IGN); - - while ((c = getopt(argc, argv, "g")) != -1) - switch (c) { - case 'g': - generate = 1; - break; - - default: - usage(); - break; - } - - argc -= optind; - argv += optind; - - if (argc == 0) - testfile(); - else - for (; argc != 0; argc--, argv++) { - if (freopen(argv[0], "r", stdin) == NULL) { - fprintf(stderr, - "divremtest: couldn't open %s\n", - argv[0]); - exit(1); - } - - testfile(); - } - - exit(0); -} - -void -testfile() -{ - union operand { - unsigned long input; - int op_int; - unsigned int op_u_int; - long op_long; - unsigned long op_u_long; - } op1, op2, divres, modres, divwant, modwant; - char opspec[6]; - int encoded, i; - - while (scanf("%6c %lx %lx %lx %lx\n", opspec, &op1.input, - &op2.input, &divwant.input, &modwant.input) != EOF) { - - encoded = 0; - - for (i = 0; i < 6; i += 2) { - int posval; - - switch (opspec[i]) { - case '.': - posval = 0; - break; - case '-': - posval = 1; - break; - default: - fprintf(stderr, - "unknown signedness spec %c\n", - opspec[i]); - exit(1); - } - encoded |= posval << ((5 - i) * 4); - } - - for (i = 1; i < 6; i += 2) { - int posval; - - switch (opspec[i]) { - case 'i': - posval = 0; - break; - case 'l': - posval = 1; - break; - default: - fprintf(stderr, "unknown length spec %c\n", - opspec[i]); - exit(1); - } - encoded |= posval << ((5 - i) * 4); - } - - /* KILL ME!!! */ - switch (encoded) { - -#define TRY_IT(a, b, c) \ - divres.a = op1.b / op2.c; \ - modres.a = op1.b % op2.c; \ - if (generate) { \ - printf("%6s 0x%016lx 0x%016lx 0x%016lx 0x%016lx\n", \ - opspec, op1.input, op2.input, \ - divres.a, modres.a); \ - } else { \ - if ((divres.a != divwant.a) || \ - (modres.a != modwant.a)) { \ - fprintf(stderr, "%6s 0x%016lx 0x%016lx\n", \ - opspec, op1.input, op2.input); \ - fprintf(stderr, "FAILED:\n"); \ - fprintf(stderr, \ - "div:\twanted 0x%16lx, got 0x%16lx\n", \ - divwant.a, divres.a); \ - fprintf(stderr, \ - "mod:\twanted 0x%16lx, got 0x%16lx\n", \ - modwant.a, modres.a); \ - \ - exit(1); \ - } \ - } - -#include "cases.c" - -#undef TRY_IT - - default: - fprintf(stderr, - "INTERNAL ERROR: unknown encoding %x\n", encoded); - exit(1); - } - } -} - -void -usage() -{ - - fprintf(stderr, "usage: divremtest [-v] [testfile ...]\n"); - exit(1); -} diff --git a/regress/lib/libc/arch/alpha/divremtest/mkcases.c b/regress/lib/libc/arch/alpha/divremtest/mkcases.c deleted file mode 100644 index 29948080258d..000000000000 --- a/regress/lib/libc/arch/alpha/divremtest/mkcases.c +++ /dev/null @@ -1,66 +0,0 @@ -/* $NetBSD: mkcases.c,v 1.3 2000/06/14 17:25:20 cgd Exp $ */ - -/* - * Copyright (c) 1995 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the - * NetBSD Project. See http://www.netbsd.org/ for - * information about NetBSD. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * <> - */ - -char *tab[4] = { "u_int", "int", "u_long", "long" }; - -int -main() -{ - int i; - - for (i = 0; i < 64; i++) { - printf( -" case 0x%d%d%d%d%d%d: /* %s <= %s op %s */\n", - (i >> 5) & 1, - (i >> 4) & 1, - (i >> 3) & 1, - (i >> 2) & 1, - (i >> 1) & 1, - (i >> 0) & 1, - tab[(i >> 4) & 0x3], - tab[(i >> 2) & 0x3], - tab[(i >> 0) & 0x3]); - printf( -" TRY_IT(op_%s, op_%s, op_%s);\n", - tab[(i >> 4) & 0x3], - tab[(i >> 2) & 0x3], - tab[(i >> 0) & 0x3]); - printf( -" break;\n\n"); - } - - exit(0); -} diff --git a/regress/lib/libc/arch/alpha/divremtest/mktestcases.c b/regress/lib/libc/arch/alpha/divremtest/mktestcases.c deleted file mode 100644 index 778e274c6df5..000000000000 --- a/regress/lib/libc/arch/alpha/divremtest/mktestcases.c +++ /dev/null @@ -1,70 +0,0 @@ -/* $NetBSD: mktestcases.c,v 1.3 2000/06/14 17:25:20 cgd Exp $ */ - -/* - * Copyright (c) 1995 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed for the - * NetBSD Project. See http://www.netbsd.org/ for - * information about NetBSD. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * <> - */ - -#include - -int -main() -{ - int i, j; - unsigned long n1, n2; - - srandom(time(NULL)); - - for (i = 1; /* i < 10240 */ 1; i++) { - n1 = (unsigned) - (random() & ((random() & random()) | 0x80000000)); - n1 <<= 32; - n1 |= (unsigned)(random() & random() & random()); - - n2 = (unsigned) - (random() & ((random() & random()) | 0x80000000)); - n2 <<= 32; - n2 |= (unsigned)(random() & random() & random()); - - for (j = 0; j < 64; j++) { - char *tab[] = { ".i", ".l", "-i", "-l" }; - - printf("%s%s%s 0x%lx 0x%lx 0 0\n", - tab[(j >> 4) & 0x3], - tab[(j >> 2) & 0x3], - tab[(j >> 0) & 0x3], - n1, n2); - } - } - - exit(0); -} diff --git a/regress/lib/libc/divrem/Makefile b/regress/lib/libc/divrem/Makefile new file mode 100644 index 000000000000..bf5ba41cfe52 --- /dev/null +++ b/regress/lib/libc/divrem/Makefile @@ -0,0 +1,11 @@ +# $Id: Makefile,v 1.1 2002/01/22 01:19:31 ross Exp $ + +PROG= divremtest +NOMAN= # defined +COPTS+= -Wall -Wno-format -Wno-parentheses +GOODRESULT= a8c75451201482303e1508e3b9494879 + +regress: ${PROG} + [ `./${PROG} | md5` = ${GOODRESULT} ] + +.include diff --git a/regress/lib/libc/divrem/divremtest.c b/regress/lib/libc/divrem/divremtest.c new file mode 100644 index 000000000000..a4353ad71a0e --- /dev/null +++ b/regress/lib/libc/divrem/divremtest.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include + +#define IM(x) ((intmax_t)(x)) +#define UIM(x) ((uintmax_t)(x)) + +#define TEST(id, a, b, c) \ + if (b) { \ + c = (a) / (b); \ + printf(id "%16jx / %16jx => %16jx\n", UIM(a), UIM(b), UIM(c)); \ + c = (a) % (b); \ + printf(id "%16jx / %16jx => %16jx\n", UIM(a), UIM(b), UIM(c)); \ + } + + +int main(int ac, char **av) +{ + int32_t sr32; + uint32_t ur32; + intmax_t sr64; + uintmax_t ur64; + int i, j, k, l; + + for(i = 0; i <= 31; ++i) { + for(j = 0; j <= 31; ++j) { + for(k = -1; k <= 1; ++k) { + for(l = -1; l <= 1; ++l) { + TEST("32 ", (1 << i) + k, (1 << j) + l, sr32); + TEST("32 ", (1 << i) + k, -(1 << j) + l, sr32); + TEST("32 ", -(1 << i) + k, (1 << j) + l, sr32); + TEST("32 ", -(1 << i) + k, -(1 << j) + l, sr32); + if (k < 0 && 1U << i < abs(k) || + l < 0 && 1U << j < abs(l)) + continue; + TEST("32U", (1U << i) + k, (1U << j) + l, ur32); + } + } + } + } + if (sizeof(intmax_t) == 4) + exit(0); + for(i = 0; i <= 63; ++i) { + for(j = 0; j <= 63; ++j) { + for(k = -1; k <= 1; ++k) { + for(l = -1; l <= 1; ++l) { + TEST("64 ", (IM(1) << i) + k, (IM(1) << j) + l, sr64); + TEST("64 ", (IM(1) << i) + k, -(IM(1) << j) + l, sr64); + TEST("64 ", -(IM(1) << i) + k, (IM(1) << j) + l, sr64); + TEST("64 ", -(IM(1) << i) + k, -(IM(1) << j) + l, sr64); + if (k < 0 && UIM(1U) << i < abs(k) || + l < 0 && UIM(1U) << j < abs(l)) + continue; + TEST("64U", (UIM(1U) << i) + k, (UIM(1U) << j) + l, ur64); + } + } + } + } + exit(0); + return 0; +}