From 9c655449a65c0604200c4267887dd817537af24c Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Sat, 26 Jun 2004 15:30:50 +0000 Subject: [PATCH] print out more info when trying to print/parse numerics. There's an overflow condition in the function being tested that needs to be fixed. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10096 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/app-utils/test/test-print-parse-amount.c | 44 ++++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/app-utils/test/test-print-parse-amount.c b/src/app-utils/test/test-print-parse-amount.c index 6fe680fe4d..33fecb4c24 100644 --- a/src/app-utils/test/test-print-parse-amount.c +++ b/src/app-utils/test/test-print-parse-amount.c @@ -8,9 +8,9 @@ static void -test_num_print_info (gnc_numeric n, GNCPrintAmountInfo print_info) +test_num_print_info (gnc_numeric n, GNCPrintAmountInfo print_info, int line) { - gnc_numeric n_parsed; + gnc_numeric n_parsed = gnc_numeric_zero(); const char *s; gboolean ok; @@ -19,14 +19,14 @@ test_num_print_info (gnc_numeric n, GNCPrintAmountInfo print_info) ok = xaccParseAmount (s, print_info.monetary, &n_parsed, NULL); do_test_args (ok, "parsing failure", __FILE__, __LINE__, - "num: %s, string %s", gnc_numeric_to_string (n), s); + "num: %s, string %s (line %d)", gnc_numeric_to_string (n), s, line); ok = gnc_numeric_equal (n, n_parsed); do_test_args (ok, "not equal", __FILE__, __LINE__, - "start: %s, string %s, finish: %s", + "start: %s, string %s, finish: %s (line %d)", gnc_numeric_to_string (n), s, - gnc_numeric_to_string (n_parsed)); + gnc_numeric_to_string (n_parsed), line); } static void @@ -52,27 +52,41 @@ test_num (gnc_numeric n) print_info.round = 0; n1 = gnc_numeric_convert (n, fraction, GNC_RND_ROUND); + if (gnc_numeric_check(n1)) { + do_test_args(0, "BAD NUMERIC CONVERSION", __FILE__, __LINE__, + "num: %s, fraction: %d", gnc_numeric_to_string(n), fraction); + continue; + } - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); print_info.monetary = 0; - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); print_info.use_separators = 0; - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); print_info.round = 1; - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); print_info.round = 0; print_info.force_fit = 1; - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); print_info.round = 1; - test_num_print_info (n1, print_info); + test_num_print_info (n1, print_info, __LINE__); } } +#define IS_VALID_NUM(n,m) \ + if (gnc_numeric_check(n)) { \ + do_test_args(0, "BAD NUMERIC", __FILE__, __LINE__, \ + "num: %s (from %s)", \ + gnc_numeric_to_string(n), \ + gnc_numeric_to_string(m)); \ + continue; \ + } else { m = n; } + static void run_tests (void) { @@ -81,14 +95,18 @@ run_tests (void) for (i = 0; i < 50; i++) { gnc_numeric n; + gnc_numeric n1; n = get_random_gnc_numeric (); + IS_VALID_NUM(n,n); test_num (n); - n = gnc_numeric_mul (n, n, n.denom, GNC_RND_ROUND); + n1 = gnc_numeric_mul (n, n, n.denom, GNC_RND_ROUND); + IS_VALID_NUM(n1,n); test_num (n); - n = gnc_numeric_mul (n, n, n.denom, GNC_RND_ROUND); + n1 = gnc_numeric_mul (n, n, n.denom, GNC_RND_ROUND); + IS_VALID_NUM(n1,n); test_num (n); } }