[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