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