Home | History | Annotate | Line # | Download | only in mpz
      1      1.1  mrg /* Test mpz_mul_ui and mpz_mul_si.
      2      1.1  mrg 
      3      1.1  mrg Copyright 2001, 2002 Free Software Foundation, Inc.
      4      1.1  mrg 
      5  1.1.1.2  mrg This file is part of the GNU MP Library test suite.
      6      1.1  mrg 
      7  1.1.1.2  mrg The GNU MP Library test suite is free software; you can redistribute it
      8  1.1.1.2  mrg and/or modify it under the terms of the GNU General Public License as
      9  1.1.1.2  mrg published by the Free Software Foundation; either version 3 of the License,
     10  1.1.1.2  mrg or (at your option) any later version.
     11  1.1.1.2  mrg 
     12  1.1.1.2  mrg The GNU MP Library test suite is distributed in the hope that it will be
     13  1.1.1.2  mrg useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     14  1.1.1.2  mrg MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
     15  1.1.1.2  mrg Public License for more details.
     16      1.1  mrg 
     17  1.1.1.2  mrg You should have received a copy of the GNU General Public License along with
     18  1.1.1.3  mrg the GNU MP Library test suite.  If not, see https://www.gnu.org/licenses/.  */
     19      1.1  mrg 
     20      1.1  mrg #include <stdio.h>
     21      1.1  mrg #include <stdlib.h>
     22      1.1  mrg 
     23      1.1  mrg #include "gmp-impl.h"
     24      1.1  mrg #include "tests.h"
     25      1.1  mrg 
     26      1.1  mrg 
     27      1.1  mrg mpz_t got, want, x;
     28      1.1  mrg 
     29      1.1  mrg void
     30      1.1  mrg compare_si (long y)
     31      1.1  mrg {
     32      1.1  mrg   if (mpz_cmp (got, want) != 0)
     33      1.1  mrg     {
     34      1.1  mrg       printf    ("mpz_mul_si wrong\n");
     35      1.1  mrg       mpz_trace ("  x", x);
     36      1.1  mrg       printf    ("  y=%ld (0x%lX)\n", y, y);
     37      1.1  mrg       mpz_trace ("  got ", got);
     38      1.1  mrg       mpz_trace ("  want", want);
     39      1.1  mrg       abort ();
     40      1.1  mrg     }
     41      1.1  mrg }
     42      1.1  mrg 
     43      1.1  mrg void
     44      1.1  mrg compare_ui (unsigned long y)
     45      1.1  mrg {
     46      1.1  mrg   if (mpz_cmp (got, want) != 0)
     47      1.1  mrg     {
     48      1.1  mrg       printf    ("mpz_mul_ui wrong\n");
     49      1.1  mrg       mpz_trace ("  x", x);
     50      1.1  mrg       printf    ("  y=%lu (0x%lX)\n", y, y);
     51      1.1  mrg       mpz_trace ("  got ", got);
     52      1.1  mrg       mpz_trace ("  want", want);
     53      1.1  mrg       abort ();
     54      1.1  mrg     }
     55      1.1  mrg }
     56      1.1  mrg 
     57      1.1  mrg void
     58      1.1  mrg check_samples (void)
     59      1.1  mrg {
     60      1.1  mrg   {
     61      1.1  mrg     long  y;
     62      1.1  mrg 
     63      1.1  mrg     mpz_set_ui (x, 1L);
     64      1.1  mrg     y = 0;
     65      1.1  mrg     mpz_mul_si (got, x, y);
     66      1.1  mrg     mpz_set_si (want, y);
     67      1.1  mrg     compare_si (y);
     68      1.1  mrg 
     69      1.1  mrg     mpz_set_ui (x, 1L);
     70      1.1  mrg     y = 1;
     71      1.1  mrg     mpz_mul_si (got, x, y);
     72      1.1  mrg     mpz_set_si (want, y);
     73      1.1  mrg     compare_si (y);
     74      1.1  mrg 
     75      1.1  mrg     mpz_set_ui (x, 1L);
     76      1.1  mrg     y = -1;
     77      1.1  mrg     mpz_mul_si (got, x, y);
     78      1.1  mrg     mpz_set_si (want, y);
     79      1.1  mrg     compare_si (y);
     80      1.1  mrg 
     81      1.1  mrg     mpz_set_ui (x, 1L);
     82      1.1  mrg     y = LONG_MIN;
     83      1.1  mrg     mpz_mul_si (got, x, y);
     84      1.1  mrg     mpz_set_si (want, y);
     85      1.1  mrg     compare_si (y);
     86      1.1  mrg 
     87      1.1  mrg     mpz_set_ui (x, 1L);
     88      1.1  mrg     y = LONG_MAX;
     89      1.1  mrg     mpz_mul_si (got, x, y);
     90      1.1  mrg     mpz_set_si (want, y);
     91      1.1  mrg     compare_si (y);
     92      1.1  mrg   }
     93      1.1  mrg 
     94      1.1  mrg   {
     95      1.1  mrg     unsigned long y;
     96      1.1  mrg 
     97      1.1  mrg     mpz_set_ui (x, 1L);
     98      1.1  mrg     y = 0;
     99      1.1  mrg     mpz_mul_ui (got, x, y);
    100      1.1  mrg     mpz_set_ui (want, y);
    101      1.1  mrg     compare_ui (y);
    102      1.1  mrg 
    103      1.1  mrg     mpz_set_ui (x, 1L);
    104      1.1  mrg     y = 1;
    105      1.1  mrg     mpz_mul_ui (got, x, y);
    106      1.1  mrg     mpz_set_ui (want, y);
    107      1.1  mrg     compare_ui (y);
    108      1.1  mrg 
    109      1.1  mrg     mpz_set_ui (x, 1L);
    110      1.1  mrg     y = ULONG_MAX;
    111      1.1  mrg     mpz_mul_ui (got, x, y);
    112      1.1  mrg     mpz_set_ui (want, y);
    113      1.1  mrg     compare_ui (y);
    114      1.1  mrg   }
    115      1.1  mrg }
    116      1.1  mrg 
    117      1.1  mrg int
    118      1.1  mrg main (int argc, char **argv)
    119      1.1  mrg {
    120      1.1  mrg   tests_start ();
    121      1.1  mrg 
    122      1.1  mrg   mpz_init (x);
    123      1.1  mrg   mpz_init (got);
    124      1.1  mrg   mpz_init (want);
    125      1.1  mrg 
    126      1.1  mrg   check_samples ();
    127      1.1  mrg 
    128      1.1  mrg   mpz_clear (x);
    129      1.1  mrg   mpz_clear (got);
    130      1.1  mrg   mpz_clear (want);
    131      1.1  mrg 
    132      1.1  mrg   tests_end ();
    133      1.1  mrg   exit (0);
    134      1.1  mrg }
    135