Home | History | Annotate | Line # | Download | only in mpz
t-mul_i.c revision 1.1
      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  mrg This file is part of the GNU MP Library.
      6  1.1  mrg 
      7  1.1  mrg The GNU MP Library is free software; you can redistribute it and/or modify
      8  1.1  mrg it under the terms of the GNU Lesser General Public License as published by
      9  1.1  mrg the Free Software Foundation; either version 3 of the License, or (at your
     10  1.1  mrg option) any later version.
     11  1.1  mrg 
     12  1.1  mrg The GNU MP Library is distributed in the hope that it will be useful, but
     13  1.1  mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     14  1.1  mrg or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
     15  1.1  mrg License for more details.
     16  1.1  mrg 
     17  1.1  mrg You should have received a copy of the GNU Lesser General Public License
     18  1.1  mrg along with the GNU MP Library.  If not, see http://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