t-mul_i.c revision 1.1.1.2 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.2 mrg the GNU MP Library test suite. 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