[Gnucash-changes] clean up test generator to produce self-consistent data.

Linas Vepstas linas at cvs.gnucash.org
Mon Jul 5 23:40:57 EDT 2004


Log Message:
-----------
clean up test generator to produce self-consistent data.
I make these changes with some trepidation, since this puts
a whole lot less stress on the 'scrub' infrastructure.

Modified Files:
--------------
    gnucash/src/engine/test-core:
        test-engine-stuff.c

Revision Data
-------------
Index: test-engine-stuff.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test-core/test-engine-stuff.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -Lsrc/engine/test-core/test-engine-stuff.c -Lsrc/engine/test-core/test-engine-stuff.c -u -r1.70 -r1.71
--- src/engine/test-core/test-engine-stuff.c
+++ src/engine/test-core/test-engine-stuff.c
@@ -1005,24 +1005,47 @@
 static void
 add_random_splits(QofBook *book, Transaction *trn, GList *account_list)
 {
-    Account *account;
+    Account *acc, *bcc;
     Split *s;
 
+    /* Gotta have at least two different accounts */
+    if (1 >= g_list_length (account_list)) return;
+
     /* Set up two splits whose values really are opposites. */
     gnc_commodity *com = xaccTransGetCurrency (trn);
     int scu = gnc_commodity_get_fraction(com);
     gnc_numeric num = get_random_gnc_numeric();
     num = gnc_numeric_convert (num, scu, GNC_HOW_RND_ROUND);
 
-    account = get_random_list_element (account_list);
-    s = get_random_split(book, account);
+    acc = get_random_list_element (account_list);
+    s = get_random_split(book, acc);
     xaccTransAppendSplit(trn, s);
     xaccSplitSetValue(s, num);
 
-    account = get_random_list_element (account_list);
-    s = get_random_split(book, account);
+    if (gnc_commodity_equal (xaccTransGetCurrency(trn), 
+                             xaccAccountGetCommodity(acc)))
+    {
+      xaccSplitSetAmount(s, num);
+    }
+
+    /* Make sure that each side of the transaction is in 
+     * a different account; otherwise get weirdness in lot
+     * calculcations.  ... Hmm maybe should fix lots in 
+     * this case? */
+    do {
+       bcc = get_random_list_element (account_list);
+    } while (bcc == acc);
+
+    s = get_random_split(book, bcc);
     xaccTransAppendSplit(trn, s);
     xaccSplitSetValue(s, gnc_numeric_neg(num));
+
+    if (gnc_commodity_equal (xaccTransGetCurrency(trn), 
+                             xaccAccountGetCommodity(bcc)))
+    {
+      xaccSplitSetAmount(s, num);
+    }
+
 }
 
 static void


More information about the gnucash-changes mailing list