From 11da511c784eca003deb90c23570f0873954e0de Mon Sep 17 00:00:00 2001 From: Duncan Wilkie Date: Sat, 18 Nov 2023 06:11:09 -0600 Subject: Initial commit. --- gmp-6.3.0/tests/mpn/t-broot.c | 108 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 gmp-6.3.0/tests/mpn/t-broot.c (limited to 'gmp-6.3.0/tests/mpn/t-broot.c') diff --git a/gmp-6.3.0/tests/mpn/t-broot.c b/gmp-6.3.0/tests/mpn/t-broot.c new file mode 100644 index 0000000..bd8e80f --- /dev/null +++ b/gmp-6.3.0/tests/mpn/t-broot.c @@ -0,0 +1,108 @@ +/* Copyright 2012 Free Software Foundation, Inc. + +This file is part of the GNU MP Library test suite. + +The GNU MP Library test suite is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 3 of the License, +or (at your option) any later version. + +The GNU MP Library test suite is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +Public License for more details. + +You should have received a copy of the GNU General Public License along with +the GNU MP Library test suite. If not, see https://www.gnu.org/licenses/. */ + + +#include /* for strtol */ +#include /* for printf */ + +#include "gmp-impl.h" +#include "longlong.h" +#include "tests/tests.h" + +#define MAX_LIMBS 150 +#define COUNT 500 + +int +main (int argc, char **argv) +{ + gmp_randstate_ptr rands; + + mp_ptr ap, rp, pp, scratch; + int count = COUNT; + unsigned i; + TMP_DECL; + + TMP_MARK; + + TESTS_REPS (count, argv, argc); + + tests_start (); + rands = RANDS; + + ap = TMP_ALLOC_LIMBS (MAX_LIMBS); + rp = TMP_ALLOC_LIMBS (MAX_LIMBS); + pp = TMP_ALLOC_LIMBS (MAX_LIMBS); + scratch = TMP_ALLOC_LIMBS (3*MAX_LIMBS); /* For mpn_powlo */ + + for (i = 0; i < count; i++) + { + mp_size_t n; + mp_limb_t k; + int c; + + n = 1 + gmp_urandomm_ui (rands, MAX_LIMBS); + + if (i & 1) + mpn_random2 (ap, n); + else + mpn_random (ap, n); + + ap[0] |= 1; + + if (i < 100) + k = 3 + 2*i; + else + { + mpn_random (&k, 1); + if (k < 3) + k = 3; + else + k |= 1; + } + mpn_broot (rp, ap, n, k); + mpn_powlo (pp, rp, &k, 1, n, scratch); + + MPN_CMP (c, ap, pp, n); + if (c != 0) + { + gmp_fprintf (stderr, + "mpn_broot returned bad result: %u limbs\n", + (unsigned) n); + gmp_fprintf (stderr, "k = %Mx\n", k); + gmp_fprintf (stderr, "a = %Nx\n", ap, n); + gmp_fprintf (stderr, "r = %Nx\n", rp, n); + gmp_fprintf (stderr, "r^k = %Nx\n", pp, n); + abort (); + } + } + + mpn_broot (rp, ap, MAX_LIMBS, 1); + if (mpn_cmp (ap, rp, MAX_LIMBS) != 0) + { + gmp_fprintf (stderr, + "mpn_broot returned bad result: %u limbs\n", + (unsigned) MAX_LIMBS); + gmp_fprintf (stderr, "k = %Mx\n", 1); + gmp_fprintf (stderr, "a = %Nx\n", ap, MAX_LIMBS); + gmp_fprintf (stderr, "r = %Nx\n", rp, MAX_LIMBS); + abort (); + } + + TMP_FREE; + tests_end (); + return 0; +} -- cgit v1.2.3