diff options
Diffstat (limited to 'test/ConfirmTests.py')
-rwxr-xr-x | test/ConfirmTests.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/test/ConfirmTests.py b/test/ConfirmTests.py new file mode 100755 index 00000000..901ae7cd --- /dev/null +++ b/test/ConfirmTests.py @@ -0,0 +1,92 @@ +#!/usr/bin/python + +# This script confirms both that the register report "adds up", and that its +# final balance is the same as what the balance report shows. + +import sys +import os +import re + +from LedgerHarness import LedgerHarness + +harness = LedgerHarness(sys.argv) +tests = sys.argv[3] + +if not os.path.isdir(tests) and not os.path.isfile(tests): + sys.exit(1) + +commands = [ + "-f '$tests/standard.dat' -O 0ecbb1b15e2cf3e515cc0f8533e5bb0fb2326728", + "-f '$tests/standard.dat' -B c56a21d23a6535184e7152ee138c28974f14280c", + "-f '$tests/standard.dat' -V c56a21d23a6535184e7152ee138c28974f14280c", + "-f '$tests/standard.dat' -G c56a21d23a6535184e7152ee138c28974f14280c", + "-f '$tests/standard.dat' -B c0226fafdf9e6711ac9121cf263e2d50791859cb", + "-f '$tests/standard.dat' -V c0226fafdf9e6711ac9121cf263e2d50791859cb", + "-f '$tests/standard.dat' -G c0226fafdf9e6711ac9121cf263e2d50791859cb" +] + +def clean(num): + num = re.sub("(\s+|\$|,)","", num) + m = re.search("([-0-9.]+)", num) + if m: + return float(m.group(1)) + else: + return float(num) + +def confirm_report(command): + index = 1 + last_line = "" + failure = False + running_total = 0.0 + + p = harness.run(re.sub('\$cmd', 'reg', command)) + + for line in harness.readlines(p.stdout): + match = re.match("\\s*([-$,0-9.]+)\\s+([-$,0-9.]+)", line[54:]) + if not match: + continue + + value = clean(match.group(1)) + total = clean(match.group(2)) + running_total += value + + diff = abs(running_total - total) + if re.search(' -[VGB] ', command) and diff < 0.015: + diff = 0.0 + if diff > 0.001: + print "DISCREPANCY: %.3f (%.3f - %.3f) at line %d:" % \ + (running_total - total, running_total, total, index) + print line, + running_total = total + failure = True + + index += 1 + last_line = line + + balance_total = 0.0 + + p = harness.run(re.sub('\$cmd', 'bal', command)) + + for line in harness.readlines(p.stdout): + if line[0] != '-': + balance_total = clean(line[:20]) + + diff = abs(balance_total - running_total) + if re.search(' -[VGB] ', command) and diff < 0.015: + diff = 0.0 + if diff > 0.001: + print + print "DISCREPANCY: %.3f (%.3f - %.3f) between register and balance" % \ + (balance_total - running_total, balance_total, running_total) + print last_line, + failure = True + + return not failure + +for cmd in commands: + if confirm_report('$ledger $cmd ' + re.sub('\$tests', tests, cmd)): + harness.success() + else: + harness.failure() + +harness.exit() |