Home | History | Annotate | Line # | Download | only in mpz
t-mul_i.c revision 1.1.1.3
      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.h"
     24      1.1  mrg #include "gmp-impl.h"
     25      1.1  mrg #include "tests.h"
     26      1.1  mrg 
     27      1.1  mrg 
     28      1.1  mrg mpz_t got, want, x;
     29      1.1  mrg 
     30      1.1  mrg void
     31      1.1  mrg compare_si (long y)
     32      1.1  mrg {
     33      1.1  mrg   if (mpz_cmp (got, want) != 0)
     34      1.1  mrg     {
     35      1.1  mrg       printf    ("mpz_mul_si wrong\n");
     36      1.1  mrg       mpz_trace ("  x", x);
     37      1.1  mrg       printf    ("  y=%ld (0x%lX)\n", y, y);
     38      1.1  mrg       mpz_trace ("  got ", got);
     39      1.1  mrg       mpz_trace ("  want", want);
     40      1.1  mrg       abort ();
     41      1.1  mrg     }
     42      1.1  mrg }
     43      1.1  mrg 
     44      1.1  mrg void
     45      1.1  mrg compare_ui (unsigned long y)
     46      1.1  mrg {
     47      1.1  mrg   if (mpz_cmp (got, want) != 0)
     48      1.1  mrg     {
     49      1.1  mrg       printf    ("mpz_mul_ui wrong\n");
     50      1.1  mrg       mpz_trace ("  x", x);
     51      1.1  mrg       printf    ("  y=%lu (0x%lX)\n", y, y);
     52      1.1  mrg       mpz_trace ("  got ", got);
     53      1.1  mrg       mpz_trace ("  want", want);
     54      1.1  mrg       abort ();
     55      1.1  mrg     }
     56      1.1  mrg }
     57      1.1  mrg 
     58      1.1  mrg void
     59      1.1  mrg check_samples (void)
     60      1.1  mrg {
     61      1.1  mrg   {
     62      1.1  mrg     long  y;
     63      1.1  mrg 
     64      1.1  mrg     mpz_set_ui (x, 1L);
     65      1.1  mrg     y = 0;
     66      1.1  mrg     mpz_mul_si (got, x, y);
     67      1.1  mrg     mpz_set_si (want, y);
     68      1.1  mrg     compare_si (y);
     69      1.1  mrg 
     70      1.1  mrg     mpz_set_ui (x, 1L);
     71      1.1  mrg     y = 1;
     72      1.1  mrg     mpz_mul_si (got, x, y);
     73      1.1  mrg     mpz_set_si (want, y);
     74      1.1  mrg     compare_si (y);
     75      1.1  mrg 
     76      1.1  mrg     mpz_set_ui (x, 1L);
     77      1.1  mrg     y = -1;
     78      1.1  mrg     mpz_mul_si (got, x, y);
     79      1.1  mrg     mpz_set_si (want, y);
     80      1.1  mrg     compare_si (y);
     81      1.1  mrg 
     82      1.1  mrg     mpz_set_ui (x, 1L);
     83      1.1  mrg     y = LONG_MIN;
     84      1.1  mrg     mpz_mul_si (got, x, y);
     85      1.1  mrg     mpz_set_si (want, y);
     86      1.1  mrg     compare_si (y);
     87      1.1  mrg 
     88      1.1  mrg     mpz_set_ui (x, 1L);
     89      1.1  mrg     y = LONG_MAX;
     90      1.1  mrg     mpz_mul_si (got, x, y);
     91      1.1  mrg     mpz_set_si (want, y);
     92      1.1  mrg     compare_si (y);
     93      1.1  mrg   }
     94      1.1  mrg 
     95      1.1  mrg   {
     96      1.1  mrg     unsigned long y;
     97      1.1  mrg 
     98      1.1  mrg     mpz_set_ui (x, 1L);
     99      1.1  mrg     y = 0;
    100      1.1  mrg     mpz_mul_ui (got, x, y);
    101      1.1  mrg     mpz_set_ui (want, y);
    102      1.1  mrg     compare_ui (y);
    103      1.1  mrg 
    104      1.1  mrg     mpz_set_ui (x, 1L);
    105      1.1  mrg     y = 1;
    106      1.1  mrg     mpz_mul_ui (got, x, y);
    107      1.1  mrg     mpz_set_ui (want, y);
    108      1.1  mrg     compare_ui (y);
    109      1.1  mrg 
    110      1.1  mrg     mpz_set_ui (x, 1L);
    111      1.1  mrg     y = ULONG_MAX;
    112      1.1  mrg     mpz_mul_ui (got, x, y);
    113      1.1  mrg     mpz_set_ui (want, y);
    114      1.1  mrg     compare_ui (y);
    115      1.1  mrg   }
    116      1.1  mrg }
    117      1.1  mrg 
    118      1.1  mrg int
    119      1.1  mrg main (int argc, char **argv)
    120      1.1  mrg {
    121      1.1  mrg   tests_start ();
    122      1.1  mrg 
    123      1.1  mrg   mpz_init (x);
    124      1.1  mrg   mpz_init (got);
    125      1.1  mrg   mpz_init (want);
    126      1.1  mrg 
    127      1.1  mrg   check_samples ();
    128      1.1  mrg 
    129      1.1  mrg   mpz_clear (x);
    130      1.1  mrg   mpz_clear (got);
    131      1.1  mrg   mpz_clear (want);
    132      1.1  mrg 
    133      1.1  mrg   tests_end ();
    134      1.1  mrg   exit (0);
    135      1.1  mrg }
    136