31 #include "test-stuff.h"
44 g_strdup_printf (
"<ERROR> [%" G_GINT64_FORMAT
" / %"
45 G_GINT64_FORMAT
"]", in.num, in.denom);
50 g_strdup_printf (
"[%" G_GINT64_FORMAT
" / %" G_GINT64_FORMAT
"]",
63 gchar *e = qof_numeric_print (expected);
64 gchar *r = qof_numeric_print (actual);
65 gchar *a = qof_numeric_print (input);
66 gchar *str = g_strdup_printf (errmsg, e, r, a);
68 do_test (eqtest (expected, actual), str);
83 gchar *e = qof_numeric_print (expected);
84 gchar *r = qof_numeric_print (actual);
85 gchar *a = qof_numeric_print (input_a);
86 gchar *b = qof_numeric_print (input_b);
87 gchar *str = g_strdup_printf (errmsg, e, r, a, b);
111 check_eq_operator (
void)
147 val,
"check_reduce(1) expected %s = %s = reduce(%s)");
154 val,
"check_reduce(2) expected %s = %s = reduce(%s)");
161 val,
"check_reduce(3): expected %s = %s = reduce(%s)");
167 check_equality_operator (
void)
171 gint64 f, deno, numer;
209 for (i = 0; i < NREPS; i++)
222 bval, rval, mval,
"expected %s = %s = reduce(%s)");
226 val, mval, mval,
"expected %s = %s");
242 gint64 nn = 1 << (32 - m);
246 check_unary_op (qof_numeric_unequal,
247 val, mval, mval,
"expected unequality %s != %s");
256 check_rounding (
void)
264 val,
"expected %s = %s = (%s as 100th's floor)");
268 val,
"expected %s = %s = (%s as 100th's ceiling)");
272 val,
"expected %s = %s = (%s as 100th's trunc)");
276 val,
"expected %s = %s = (%s as 100th's round)");
282 val,
"expected %s = %s = (%s as 100th's round)");
288 val,
"expected %s = %s = (%s as 100th's round)");
295 val,
"expected %s = %s = (%s as 100th's round)");
301 val,
"expected %s = %s = (%s as 100th's round)");
307 val,
"expected %s = %s = (%s as 100th's round)");
313 val,
"expected %s = %s = (%s as 100th's round)");
330 val,
"expected %s = %s double 6 figs");
338 val,
"expected %s = %s double 6 figs");
346 val,
"expected %s = %s double 6 figs");
353 val,
"expected %s = %s double 6 figs");
356 do_test ((0.4375 == flo),
"float pt conversion");
371 a,
"expected %s = %s = -(%s)");
375 b,
"expected %s = %s = -(%s)");
382 check_add_subtract (
void)
397 "expected %s got %s = %s + %s for add exact");
402 "expected %s got %s = %s + %s for add 100ths (banker's)");
408 a, b,
"expected %s got %s = %s + %s for add 4 sig figs");
414 a, b,
"expected %s got %s = %s + %s for add 6 sig figs");
419 "expected %s got %s = %s - %s for sub exact");
425 "expected %s got %s = %s - %s for sub reduce");
430 "expected %s got %s = %s - %s for sub reduce");
435 "expected %s got %s = %s - %s for sub 100ths (banker's)");
443 z, c,
"expected %s got %s = %s + %s for add fixed");
446 z, d,
"expected %s got %s = %s + %s for add fixed");
456 "expected %s got %s = %s + %s for add exact");
461 "expected %s got %s = %s + %s for add 100ths (banker's)");
467 a, b,
"expected %s got %s = %s + %s for add 4 sig figs");
473 a, b,
"expected %s got %s = %s + %s for add 6 sig figs");
478 "expected %s got %s = %s - %s for sub exact");
484 "expected %s got %s = %s - %s for sub reduce");
489 "expected %s got %s = %s - %s for sub reduce");
494 "expected %s got %s = %s - %s for sub 100ths (banker's)");
499 printf (
"add 100ths/error : %s + %s = %s + (error) %s\n\n",
500 qof_numeric_print (a), qof_numeric_print (b),
501 qof_numeric_print (c), qof_numeric_print (err));
504 printf (
"sub 100ths/error : %s - %s = %s + (error) %s\n\n",
505 qof_numeric_print (a), qof_numeric_print (b),
506 qof_numeric_print (c), qof_numeric_print (err));
512 for (i = 0; i < NREPS; i++)
515 gint64 deno = rand () + 1;
516 gint64 na = get_random_gint64 ();
517 gint64 nb = get_random_gint64 ();
533 "expected %s got %s = %s + %s for exact addition");
541 "expected %s got %s = %s - %s for exact subtraction");
548 check_mult_div (
void)
553 QofNumeric amt_a, amt_tot, frac, val_tot, val_a;
561 "expected %s got %s = %s / %s div exact");
568 "expected %s got %s = %s / %s div exact");
575 "expected %s got %s = %s * %s mult exact");
583 "expected %s got %s = %s * %s for mult exact");
588 "expected %s got %s = %s * %s for mult reduce");
592 a, b,
"expected %s got %s = %s * %s for mult 100th's");
597 "expected %s got %s = %s / %s for div exact");
602 "expected %s got %s = %s / %s for div reduce");
606 a, b,
"expected %s got %s = %s * %s for div 100th's");
611 printf (
"mul 100ths/error : %s * %s = %s + (error) %s\n\n",
612 qof_numeric_print (a), qof_numeric_print (b),
613 qof_numeric_print (c), qof_numeric_print (err));
616 printf (
"div 100ths/error : %s / %s = %s + (error) %s\n\n",
617 qof_numeric_print (a), qof_numeric_print (b),
618 qof_numeric_print (c), qof_numeric_print (err));
632 "expected %s got %s = %s * %s for multiply");
637 for (i = 0; i < NREPS; i++)
655 "expected %s got %s = %s * %s for mult exact");
658 for (j = 1; j < 31; j++)
665 "expected %s got %s = %s * %s for mult reduce");
674 "expected %s got %s = %s / %s for div exact");
680 for (j = 1; j < 16; j++)
687 "expected %s got %s = %s / %s for div reduce");
713 "expected %s got %s = %s / %s for div exact");
719 "expected %s got %s = %s / %s for div round");
737 c, d,
"expected %s got %s = %s / %s for div round");
745 "expected %s got %s = %s / %s for div round");
754 frac, amt_a, amt_tot,
755 "expected %s got %s = %s / %s for div reduce");
763 val_a, val_tot, frac,
764 "expected %s got %s = %s * %s for mult round");
772 val_a, val_tot, frac,
773 "expected %s got %s = %s * %s for mult round");
784 "expected %s got %s = %s / %s for mult sigfigs");
789 check_reciprocal (
void)
798 val,
"expected %s = %s = (%s as RECIP(1))");
807 "expected %s got %s = %s + %s for reciprocal");
815 "expected %s got %s = %s + %s for reciprocal");
823 ans, a, b,
"expected %s got %s = %s + %s for recirocal");
827 do_test ((5.0 == flo),
"reciprocal conversion");
853 ans, a, b,
"expected %s got %s = %s * %s for recirocal");
861 ans, a, b,
"expected %s got %s = %s / %s for recirocal");
868 ans, a, b,
"expected %s got %s = %s / %s for recirocal");
878 check_eq_operator ();
880 check_equality_operator ();
884 check_add_subtract ();
895 print_test_results ();