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 2.1 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; see the file COPYING.LIB. If not, write to
19
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
MA 02110-1301, USA. */
37
// unary operators and functions
43
b = +a; ASSERT_ALWAYS(b == 1);
50
b = -a; ASSERT_ALWAYS(b == -2);
57
b = ~a; ASSERT_ALWAYS(b == -4);
64
b = abs(a); ASSERT_ALWAYS(b == 123);
71
b = sqrt(a); ASSERT_ALWAYS(b == 5);
76
b = sqrt(a); ASSERT_ALWAYS(b == 11); // round toward zero
82
int b = sgn(a); ASSERT_ALWAYS(b == 1);
86
int b = sgn(a); ASSERT_ALWAYS(b == 0);
90
int b = sgn(a); ASSERT_ALWAYS(b == -1);
94
// binary operators and functions
100
c = a + b; ASSERT_ALWAYS(c == 3);
106
c = a + b; ASSERT_ALWAYS(c == 7);
112
c = b + a; ASSERT_ALWAYS(c == 11);
117
mpz_class a(3), b(6);
119
c = a - b; ASSERT_ALWAYS(c == -3);
124
mpz_class a(-2), b(4);
126
c = a * b; ASSERT_ALWAYS(c == -8);
132
c = a * b; ASSERT_ALWAYS(c == -8);
133
c = b * a; ASSERT_ALWAYS(c == -8);
139
c = a * b; ASSERT_ALWAYS(c == -8);
140
c = b * a; ASSERT_ALWAYS(c == -8);
143
// operator/ and operator%
145
mpz_class a(12), b(4);
147
c = a / b; ASSERT_ALWAYS(c == 3);
148
c = a % b; ASSERT_ALWAYS(c == 0);
151
mpz_class a(7), b(5);
153
c = a / b; ASSERT_ALWAYS(c == 1);
154
c = a % b; ASSERT_ALWAYS(c == 2);
162
c = a / b; ASSERT_ALWAYS(c == -3);
163
c = a % b; ASSERT_ALWAYS(c == -1);
164
c = a / bi; ASSERT_ALWAYS(c == -3);
165
c = a % bi; ASSERT_ALWAYS(c == -1);
166
c = ai / b; ASSERT_ALWAYS(c == -3);
167
c = ai % b; ASSERT_ALWAYS(c == -1);
175
c = a / b; ASSERT_ALWAYS(c == 3);
176
c = a % b; ASSERT_ALWAYS(c == -1);
177
c = a / bi; ASSERT_ALWAYS(c == 3);
178
c = a % bi; ASSERT_ALWAYS(c == -1);
179
c = ai / b; ASSERT_ALWAYS(c == 3);
180
c = ai % b; ASSERT_ALWAYS(c == -1);
183
mpz_class a (LONG_MIN);
184
signed long ai = LONG_MIN;
185
mpz_class b = - mpz_class (LONG_MIN);
187
c = a / b; ASSERT_ALWAYS(c == -1);
188
c = a % b; ASSERT_ALWAYS(c == 0);
189
c = ai / b; ASSERT_ALWAYS(c == -1);
190
c = ai % b; ASSERT_ALWAYS(c == 0);
202
c = a << b; ASSERT_ALWAYS(c == 48);
210
c = a >> b; ASSERT_ALWAYS(c == 7);
222
mpz_class a(123), b(45);
224
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
225
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
229
unsigned long b = 45;
231
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
232
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
238
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
239
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
245
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
246
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
254
mpz_class a(1), b(2), c(3);
256
d = a + b * c; ASSERT_ALWAYS(d == 7);
259
mpz_class a(1), b(2);
262
d = a + b * c; ASSERT_ALWAYS(d == 7);
265
mpz_class a(1), b(3);
268
d = a + c * b; ASSERT_ALWAYS(d == 7);
271
mpz_class a(1), b(2);
274
d = a + b * c; ASSERT_ALWAYS(d == 7);
277
mpz_class a(1), b(3);
280
d = a + c * b; ASSERT_ALWAYS(d == 7);
283
mpz_class a(1), b(2);
286
d = a + b * c; ASSERT_ALWAYS(d == 7);
289
mpz_class a(1), b(3);
292
d = a + c * b; ASSERT_ALWAYS(d == 7);
296
mpz_class a(2), b(3), c(4);
298
d = a * b + c; ASSERT_ALWAYS(d == 10);
301
mpz_class a(2), b(4);
304
d = a * c + b; ASSERT_ALWAYS(d == 10);
307
mpz_class a(3), b(4);
310
d = c * a + b; ASSERT_ALWAYS(d == 10);
313
mpz_class a(2), b(4);
316
d = a * c + b; ASSERT_ALWAYS(d == 10);
319
mpz_class a(3), b(4);
322
d = c * a + b; ASSERT_ALWAYS(d == 10);
325
mpz_class a(2), b(4);
328
d = a * c + b; ASSERT_ALWAYS(d == 10);
331
mpz_class a(3), b(4);
334
d = c * a + b; ASSERT_ALWAYS(d == 10);
339
mpz_class a(1), b(2), c(3);
341
d = a - b * c; ASSERT_ALWAYS(d == -5);
344
mpz_class a(1), b(2);
347
d = a - b * c; ASSERT_ALWAYS(d == -5);
350
mpz_class a(1), b(3);
353
d = a - c * b; ASSERT_ALWAYS(d == -5);
356
mpz_class a(1), b(2);
359
d = a - b * c; ASSERT_ALWAYS(d == -5);
362
mpz_class a(1), b(3);
365
d = a - c * b; ASSERT_ALWAYS(d == -5);
368
mpz_class a(1), b(2);
371
d = a - b * c; ASSERT_ALWAYS(d == -5);
374
mpz_class a(1), b(3);
377
d = a - c * b; ASSERT_ALWAYS(d == -5);
381
mpz_class a(2), b(3), c(4);
383
d = a * b - c; ASSERT_ALWAYS(d == 2);
386
mpz_class a(2), b(4);
389
d = a * c - b; ASSERT_ALWAYS(d == 2);
392
mpz_class a(3), b(4);
395
d = c * a - b; ASSERT_ALWAYS(d == 2);
398
mpz_class a(2), b(4);
401
d = a * c - b; ASSERT_ALWAYS(d == 2);
404
mpz_class a(3), b(4);
407
d = c * a - b; ASSERT_ALWAYS(d == 2);
410
mpz_class a(2), b(4);
413
d = a * c - b; ASSERT_ALWAYS(d == 2);
416
mpz_class a(3), b(4);
419
d = c * a - b; ASSERT_ALWAYS(d == 2);
426
// unary operators and functions
432
b = +a; ASSERT_ALWAYS(b == 0.5);
439
b = -a; ASSERT_ALWAYS(b == -0.75);
446
b = abs(a); ASSERT_ALWAYS(b == 123);
452
int b = sgn(a); ASSERT_ALWAYS(b == 1);
456
int b = sgn(a); ASSERT_ALWAYS(b == 0);
460
int b = sgn(a); ASSERT_ALWAYS(b == -1);
464
// binary operators and functions
468
mpq_class a(1, 2), b(3, 4);
470
c = a + b; ASSERT_ALWAYS(c == 1.25);
476
c = a + b; ASSERT_ALWAYS(c == 2.5);
482
c = b + a; ASSERT_ALWAYS(c == 2);
487
mpq_class a(1, 2), b(3, 4);
489
c = a - b; ASSERT_ALWAYS(c == -0.25);
494
mpq_class a(1, 3), b(3, 4);
496
c = a * b; ASSERT_ALWAYS(c == 0.25);
501
mpq_class a(1, 2), b(2, 3);
503
c = a / b; ASSERT_ALWAYS(c == 0.75);
517
mpq_class a(123), b(45);
519
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
520
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
524
unsigned long b = 45;
526
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
527
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
533
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
534
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
540
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
541
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
548
// unary operators and functions
554
b = +a; ASSERT_ALWAYS(b == 1);
561
b = -a; ASSERT_ALWAYS(b == -2);
568
b = abs(a); ASSERT_ALWAYS(b == 123);
575
b = trunc(a); ASSERT_ALWAYS(b == 1);
580
b = trunc(a); ASSERT_ALWAYS(b == -1);
587
b = floor(a); ASSERT_ALWAYS(b == 1);
592
b = floor(a); ASSERT_ALWAYS(b == -2);
599
b = ceil(a); ASSERT_ALWAYS(b == 2);
604
b = ceil(a); ASSERT_ALWAYS(b == -1);
611
b = sqrt(a); ASSERT_ALWAYS(b == 5);
616
b = sqrt(a); ASSERT_ALWAYS(b == 1.5);
622
int b = sgn(a); ASSERT_ALWAYS(b == 1);
626
int b = sgn(a); ASSERT_ALWAYS(b == 0);
630
int b = sgn(a); ASSERT_ALWAYS(b == -1);
634
// binary operators and functions
638
mpf_class a(1), b(2);
640
c = a + b; ASSERT_ALWAYS(c == 3);
645
mpf_class a(3), b(4);
647
c = a - b; ASSERT_ALWAYS(c == -1);
652
mpf_class a(2), b(5);
654
c = a * b; ASSERT_ALWAYS(c == 10);
659
mpf_class a(7), b(4);
661
c = a / b; ASSERT_ALWAYS(c == 1.75);
675
mpf_class a(3), b(4);
677
c = hypot(a, b); ASSERT_ALWAYS(c == 5);
682
mpf_class a(123), b(45);
684
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
685
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
689
unsigned long b = 45;
691
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
692
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
698
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
699
c = cmp(b, a); ASSERT_ALWAYS(c < 0);
705
c = cmp(a, b); ASSERT_ALWAYS(c > 0);
706
c = cmp(b, a); ASSERT_ALWAYS(c < 0);