[Gnucash-changes] get test-query to fail consistently.

Derek Atkins warlord at cvs.gnucash.org
Sun Jul 4 13:10:40 EDT 2004


Log Message:
-----------
get test-query to fail consistently.

PERR() when xaccTransGetSharePrice() overflows.
Loop test-query, and start the rng to fail consistently.

Modified Files:
--------------
    gnucash/src/engine:
        Transaction.c
    gnucash/src/engine/test:
        test-query.c

Revision Data
-------------
Index: Transaction.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Transaction.c,v
retrieving revision 1.312
retrieving revision 1.313
diff -Lsrc/engine/Transaction.c -Lsrc/engine/Transaction.c -u -r1.312 -r1.313
--- src/engine/Transaction.c
+++ src/engine/Transaction.c
@@ -2805,7 +2805,7 @@
 gnc_numeric
 xaccSplitGetSharePrice (const Split * split) 
 {
-  gnc_numeric amt, val;
+  gnc_numeric amt, val, price;
   if(!split)
   {
     return gnc_numeric_create(1, 1);
@@ -2826,10 +2826,22 @@
     }
     return gnc_numeric_create(0, 1);
   }
-  return gnc_numeric_div(val, amt,
+  price = gnc_numeric_div(val, amt,
                          GNC_DENOM_AUTO, 
                          GNC_HOW_DENOM_SIGFIGS(PRICE_SIGFIGS) |
                          GNC_HOW_RND_ROUND);
+
+  /* During random checks we can get some very weird prices.  Let's
+   * handle some overflow and other error conditions by returning
+   * zero.  But still print an error to let us know it happened.
+   */
+  if (gnc_numeric_check(price)) {
+    PERR("Computing Shares Price Failed (%d): [ %lld / %lld ] / [ %lld / %lld ]",
+	 gnc_numeric_check(price), val.num, val.denom, amt.num, amt.denom);
+    return gnc_numeric_create(0,1);
+  }
+
+  return price;
 }
 
 /********************************************************************\
Index: test-query.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test/test-query.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -Lsrc/engine/test/test-query.c -Lsrc/engine/test/test-query.c -u -r1.10 -r1.11
--- src/engine/test/test-query.c
+++ src/engine/test/test-query.c
@@ -66,13 +66,20 @@
 static void
 main_helper (void *closure, int argc, char **argv)
 {
+  int i;
+
   gnc_module_load("gnucash/engine", 0);
 
   g_log_set_always_fatal( G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING );
 
   xaccLogDisable ();
 
-  run_test ();
+  /* Always start from the same random seed so we fail consistently */
+  srand(0);
+
+  /* Loop the test. */
+  for (i=0; i < 10; i++)
+    run_test ();
 
   success("queries seem to work");
 


More information about the gnucash-changes mailing list