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