1 /* Test mp*_class operators and functions.
3 Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
5 This file is part of the GNU MP Library.
7 The GNU MP Library is free software; you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
12 The GNU MP Library is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
15 License for more details.
17 You should have received a copy of the GNU Lesser General Public License
18 along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
35 // unary operators and functions
41 b = +a; ASSERT_ALWAYS(b == 1);
48 b = -a; ASSERT_ALWAYS(b == -2);
55 b = ~a; ASSERT_ALWAYS(b == -4);
62 b = abs(a); ASSERT_ALWAYS(b == 123);
69 b = sqrt(a); ASSERT_ALWAYS(b == 5);
74 b = sqrt(a); ASSERT_ALWAYS(b == 11); // round toward zero
80 int b = sgn(a); ASSERT_ALWAYS(b == 1);
84 int b = sgn(a); ASSERT_ALWAYS(b == 0);
88 int b = sgn(a); ASSERT_ALWAYS(b == -1);
92 // binary operators and functions
98 c = a + b; ASSERT_ALWAYS(c == 3);
104 c = a + b; ASSERT_ALWAYS(c == 7);
110 c = b + a; ASSERT_ALWAYS(c == 11);
115 mpz_class a(3), b(6);
117 c = a - b; ASSERT_ALWAYS(c == -3);
122 mpz_class a(-2), b(4);
124 c = a * b; ASSERT_ALWAYS(c == -8);
130 c = a * b; ASSERT_ALWAYS(c == -8);
131 c = b * a; ASSERT_ALWAYS(c == -8);
137 c = a * b; ASSERT_ALWAYS(c == -8);
138 c = b * a; ASSERT_ALWAYS(c == -8);
141 // operator/ and operator%
143 mpz_class a(12), b(4);
145 c = a / b; ASSERT_ALWAYS(c == 3);
146 c = a % b; ASSERT_ALWAYS(c == 0);
149 mpz_class a(7), b(5);
151 c = a / b; ASSERT_ALWAYS(c == 1);
152 c = a % b; ASSERT_ALWAYS(c == 2);
160 c = a / b; ASSERT_ALWAYS(c == -3);
161 c = a % b; ASSERT_ALWAYS(c == -1);
162 c = a / bi; ASSERT_ALWAYS(c == -3);
163 c = a % bi; ASSERT_ALWAYS(c == -1);
164 c = ai / b; ASSERT_ALWAYS(c == -3);
165 c = ai % b; ASSERT_ALWAYS(c == -1);
173 c = a / b; ASSERT_ALWAYS(c == 3);
174 c = a % b; ASSERT_ALWAYS(c == -1);
175 c = a / bi; ASSERT_ALWAYS(c == 3);
176 c = a % bi; ASSERT_ALWAYS(c == -1);
177 c = ai / b; ASSERT_ALWAYS(c == 3);
178 c = ai % b; ASSERT_ALWAYS(c == -1);
181 mpz_class a (LONG_MIN);
182 signed long ai = LONG_MIN;
183 mpz_class b = - mpz_class (LONG_MIN);
185 c = a / b; ASSERT_ALWAYS(c == -1);
186 c = a % b; ASSERT_ALWAYS(c == 0);
187 c = ai / b; ASSERT_ALWAYS(c == -1);
188 c = ai % b; ASSERT_ALWAYS(c == 0);
200 c = a << b; ASSERT_ALWAYS(c == 48);
208 c = a >> b; ASSERT_ALWAYS(c == 7);
220 mpz_class a(123), b(45);
222 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
223 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
227 unsigned long b = 45;
229 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
230 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
236 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
237 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
243 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
244 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
252 mpz_class a(1), b(2), c(3);
254 d = a + b * c; ASSERT_ALWAYS(d == 7);
257 mpz_class a(1), b(2);
260 d = a + b * c; ASSERT_ALWAYS(d == 7);
263 mpz_class a(1), b(3);
266 d = a + c * b; ASSERT_ALWAYS(d == 7);
269 mpz_class a(1), b(2);
272 d = a + b * c; ASSERT_ALWAYS(d == 7);
275 mpz_class a(1), b(3);
278 d = a + c * b; ASSERT_ALWAYS(d == 7);
281 mpz_class a(1), b(2);
284 d = a + b * c; ASSERT_ALWAYS(d == 7);
287 mpz_class a(1), b(3);
290 d = a + c * b; ASSERT_ALWAYS(d == 7);
294 mpz_class a(2), b(3), c(4);
296 d = a * b + c; ASSERT_ALWAYS(d == 10);
299 mpz_class a(2), b(4);
302 d = a * c + b; ASSERT_ALWAYS(d == 10);
305 mpz_class a(3), b(4);
308 d = c * a + b; ASSERT_ALWAYS(d == 10);
311 mpz_class a(2), b(4);
314 d = a * c + b; ASSERT_ALWAYS(d == 10);
317 mpz_class a(3), b(4);
320 d = c * a + b; ASSERT_ALWAYS(d == 10);
323 mpz_class a(2), b(4);
326 d = a * c + b; ASSERT_ALWAYS(d == 10);
329 mpz_class a(3), b(4);
332 d = c * a + b; ASSERT_ALWAYS(d == 10);
337 mpz_class a(1), b(2), c(3);
339 d = a - b * c; ASSERT_ALWAYS(d == -5);
342 mpz_class a(1), b(2);
345 d = a - b * c; ASSERT_ALWAYS(d == -5);
348 mpz_class a(1), b(3);
351 d = a - c * b; ASSERT_ALWAYS(d == -5);
354 mpz_class a(1), b(2);
357 d = a - b * c; ASSERT_ALWAYS(d == -5);
360 mpz_class a(1), b(3);
363 d = a - c * b; ASSERT_ALWAYS(d == -5);
366 mpz_class a(1), b(2);
369 d = a - b * c; ASSERT_ALWAYS(d == -5);
372 mpz_class a(1), b(3);
375 d = a - c * b; ASSERT_ALWAYS(d == -5);
379 mpz_class a(2), b(3), c(4);
381 d = a * b - c; ASSERT_ALWAYS(d == 2);
384 mpz_class a(2), b(4);
387 d = a * c - b; ASSERT_ALWAYS(d == 2);
390 mpz_class a(3), b(4);
393 d = c * a - b; ASSERT_ALWAYS(d == 2);
396 mpz_class a(2), b(4);
399 d = a * c - b; ASSERT_ALWAYS(d == 2);
402 mpz_class a(3), b(4);
405 d = c * a - b; ASSERT_ALWAYS(d == 2);
408 mpz_class a(2), b(4);
411 d = a * c - b; ASSERT_ALWAYS(d == 2);
414 mpz_class a(3), b(4);
417 d = c * a - b; ASSERT_ALWAYS(d == 2);
424 // unary operators and functions
430 b = +a; ASSERT_ALWAYS(b == 0.5);
437 b = -a; ASSERT_ALWAYS(b == -0.75);
444 b = abs(a); ASSERT_ALWAYS(b == 123);
450 int b = sgn(a); ASSERT_ALWAYS(b == 1);
454 int b = sgn(a); ASSERT_ALWAYS(b == 0);
458 int b = sgn(a); ASSERT_ALWAYS(b == -1);
462 // binary operators and functions
466 mpq_class a(1, 2), b(3, 4);
468 c = a + b; ASSERT_ALWAYS(c == 1.25);
474 c = a + b; ASSERT_ALWAYS(c == 2.5);
480 c = b + a; ASSERT_ALWAYS(c == 2);
485 mpq_class a(1, 2), b(3, 4);
487 c = a - b; ASSERT_ALWAYS(c == -0.25);
492 mpq_class a(1, 3), b(3, 4);
494 c = a * b; ASSERT_ALWAYS(c == 0.25);
499 mpq_class a(1, 2), b(2, 3);
501 c = a / b; ASSERT_ALWAYS(c == 0.75);
515 mpq_class a(123), b(45);
517 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
518 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
522 unsigned long b = 45;
524 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
525 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
531 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
532 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
538 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
539 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
546 // unary operators and functions
552 b = +a; ASSERT_ALWAYS(b == 1);
559 b = -a; ASSERT_ALWAYS(b == -2);
566 b = abs(a); ASSERT_ALWAYS(b == 123);
573 b = trunc(a); ASSERT_ALWAYS(b == 1);
578 b = trunc(a); ASSERT_ALWAYS(b == -1);
585 b = floor(a); ASSERT_ALWAYS(b == 1);
590 b = floor(a); ASSERT_ALWAYS(b == -2);
597 b = ceil(a); ASSERT_ALWAYS(b == 2);
602 b = ceil(a); ASSERT_ALWAYS(b == -1);
609 b = sqrt(a); ASSERT_ALWAYS(b == 5);
614 b = sqrt(a); ASSERT_ALWAYS(b == 1.5);
620 int b = sgn(a); ASSERT_ALWAYS(b == 1);
624 int b = sgn(a); ASSERT_ALWAYS(b == 0);
628 int b = sgn(a); ASSERT_ALWAYS(b == -1);
632 // binary operators and functions
636 mpf_class a(1), b(2);
638 c = a + b; ASSERT_ALWAYS(c == 3);
643 mpf_class a(3), b(4);
645 c = a - b; ASSERT_ALWAYS(c == -1);
650 mpf_class a(2), b(5);
652 c = a * b; ASSERT_ALWAYS(c == 10);
657 mpf_class a(7), b(4);
659 c = a / b; ASSERT_ALWAYS(c == 1.75);
673 mpf_class a(3), b(4);
675 c = hypot(a, b); ASSERT_ALWAYS(c == 5);
680 mpf_class a(123), b(45);
682 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
683 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
687 unsigned long b = 45;
689 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
690 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
696 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
697 c = cmp(b, a); ASSERT_ALWAYS(c < 0);
703 c = cmp(a, b); ASSERT_ALWAYS(c > 0);
704 c = cmp(b, a); ASSERT_ALWAYS(c < 0);