summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xacprep1
-rwxr-xr-xtest/GenerateTests.py43
-rwxr-xr-xtest/LedgerHarness.py21
-rwxr-xr-xtest/RegressTests.py63
-rw-r--r--tools/Makefile.am8
5 files changed, 109 insertions, 27 deletions
diff --git a/acprep b/acprep
index 7426cab3..9cada72b 100755
--- a/acprep
+++ b/acprep
@@ -1419,6 +1419,7 @@ class PrepareBuild(CommandLineApp):
if self.options.jobs > 1:
make_args.append('-j%d' % self.options.jobs)
+ make_args.append('JOBS=%d' % self.options.jobs)
self.log.debug('Configure arguments => ' + str(config_args))
self.log.debug('Makefile arguments => ' + str(make_args))
diff --git a/test/GenerateTests.py b/test/GenerateTests.py
index d60e0581..70baee28 100755
--- a/test/GenerateTests.py
+++ b/test/GenerateTests.py
@@ -4,13 +4,30 @@
# final balance is the same as what the balance report shows.
import sys
-#import re
+import re
from difflib import ndiff
+multiproc = False
+try:
+ from multiprocessing import Pool
+ multiproc = True
+except:
+ pass
+
+args = sys.argv
+jobs = 1
+match = re.match('-j([0-9]+)?', args[1])
+if match:
+ args = [args[0]] + args[2:]
+ if match.group(1):
+ jobs = int(match.group(1))
+if jobs == 1:
+ multiproc = False
+
from LedgerHarness import LedgerHarness
-harness = LedgerHarness(sys.argv)
+harness = LedgerHarness(args)
#def normalize(line):
# match = re.match("((\s*)([A-Za-z]+)?(\s*)([-0-9.]+)(\s*)([A-Za-z]+)?)( (.+))?$", line)
@@ -104,14 +121,28 @@ def generation_test(seed):
beg_range = 1
end_range = 20
-if len(sys.argv) > 4:
- beg_range = int(sys.argv[3])
- end_range = int(sys.argv[4])
+if len(args) > 4:
+ beg_range = int(args[3])
+ end_range = int(args[4])
-for i in range(beg_range, end_range):
+def run_gen_test(i):
if generation_test(i):
harness.success()
else:
harness.failure()
+if multiproc:
+ pool = Pool(jobs*2)
+else:
+ pool = None
+
+if pool:
+ pool.map(run_gen_test, range(beg_range, end_range))
+else:
+ for i in range(beg_range, end_range):
+ run_gen_test(i)
+
+if pool:
+ pool.close()
+ pool.join()
harness.exit()
diff --git a/test/LedgerHarness.py b/test/LedgerHarness.py
index ea8290d4..44e4e61c 100755
--- a/test/LedgerHarness.py
+++ b/test/LedgerHarness.py
@@ -6,6 +6,27 @@ import re
from subprocess import Popen, PIPE
+import copy_reg
+import types
+
+def _pickle_method(method):
+ func_name = method.im_func.__name__
+ obj = method.im_self
+ cls = method.im_class
+ return _unpickle_method, (func_name, obj, cls)
+
+def _unpickle_method(func_name, obj, cls):
+ for cls in cls.mro():
+ try:
+ func = cls.__dict__[func_name]
+ except KeyError:
+ pass
+ else:
+ break
+ return func.__get__(obj, cls)
+
+copy_reg.pickle(types.MethodType, _pickle_method, _unpickle_method)
+
class LedgerHarness:
ledger = None
sourcepath = None
diff --git a/test/RegressTests.py b/test/RegressTests.py
index a32bdb6b..0472ac90 100755
--- a/test/RegressTests.py
+++ b/test/RegressTests.py
@@ -5,18 +5,35 @@ import os
import re
import tempfile
+multiproc = False
+try:
+ from multiprocessing import Pool
+ multiproc = True
+except:
+ pass
+
from string import join
from difflib import unified_diff
from LedgerHarness import LedgerHarness
-harness = LedgerHarness(sys.argv)
-tests = sys.argv[3]
+args = sys.argv
+jobs = 1
+match = re.match('-j([0-9]+)?', args[1])
+if match:
+ args = [args[0]] + args[2:]
+ if match.group(1):
+ jobs = int(match.group(1))
+if jobs == 1:
+ multiproc = False
+
+harness = LedgerHarness(args)
+tests = args[3]
if not os.path.isdir(tests) and not os.path.isfile(tests):
sys.exit(1)
-class RegressFile:
+class RegressFile(object):
def __init__(self, filename):
self.filename = filename
self.fd = open(self.filename)
@@ -137,24 +154,36 @@ class RegressFile:
if not use_stdin:
os.remove(tempdata[1])
- def run_tests(self):
+ def run_tests(self, pool):
test = self.read_test()
while test:
- self.run_test(test)
+ if pool:
+ pool.apply_async(RegressFile.run_test, (self, test,))
+ else:
+ self.run_test(test)
test = self.read_test(test)
def close(self):
self.fd.close()
-if os.path.isdir(tests):
- for test_file in os.listdir(tests):
- if re.search('\.test$', test_file):
- entry = RegressFile(os.path.join(tests, test_file))
- entry.run_tests()
- entry.close()
-else:
- entry = RegressFile(tests)
- entry.run_tests()
- entry.close()
-
-harness.exit()
+if __name__ == '__main__':
+ if multiproc:
+ pool = Pool(jobs*2)
+ else:
+ pool = None
+
+ if os.path.isdir(tests):
+ for test_file in os.listdir(tests):
+ if re.search('\.test$', test_file):
+ entry = RegressFile(os.path.join(tests, test_file))
+ entry.run_tests(pool)
+ entry.close()
+ else:
+ entry = RegressFile(tests)
+ entry.run_tests(pool)
+ entry.close()
+
+ if pool:
+ pool.close()
+ pool.join()
+ harness.exit()
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 87f518eb..5a6e2fdc 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -369,7 +369,7 @@ RegressTests_SOURCES = test/RegressTests.py
EXTRA_DIST += test/regress test/convert.py test/LedgerHarness.py
RegressTests: $(srcdir)/test/RegressTests.py
- echo "$(PYTHON) $(srcdir)/test/RegressTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/regress \"\$$@\"" > $@
+ echo "$(PYTHON) $(srcdir)/test/RegressTests.py -j$(JOBS) $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/regress \"\$$@\"" > $@
chmod 755 $@
BaselineTests_SOURCES = test/RegressTests.py
@@ -377,7 +377,7 @@ BaselineTests_SOURCES = test/RegressTests.py
EXTRA_DIST += test/baseline
BaselineTests: $(srcdir)/test/RegressTests.py
- echo "$(PYTHON) $(srcdir)/test/RegressTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/baseline \"\$$@\"" > $@
+ echo "$(PYTHON) $(srcdir)/test/RegressTests.py -j$(JOBS) $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/baseline \"\$$@\"" > $@
chmod 755 $@
ManualTests_SOURCES = test/RegressTests.py
@@ -385,7 +385,7 @@ ManualTests_SOURCES = test/RegressTests.py
EXTRA_DIST += test/manual
ManualTests: $(srcdir)/test/RegressTests.py
- echo "$(PYTHON) $(srcdir)/test/RegressTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/manual \"\$$@\"" > $@
+ echo "$(PYTHON) $(srcdir)/test/RegressTests.py -j$(JOBS) $(top_builddir)/ledger$(EXEEXT) $(srcdir) $(srcdir)/test/manual \"\$$@\"" > $@
chmod 755 $@
ConfirmTests_SOURCES = test/ConfirmTests.py
@@ -406,7 +406,7 @@ ConfirmTests: $(srcdir)/test/ConfirmTests.py
GenerateTests_SOURCES = test/GenerateTests.py
GenerateTests: $(srcdir)/test/GenerateTests.py
- echo "$(PYTHON) $(srcdir)/test/GenerateTests.py $(top_builddir)/ledger$(EXEEXT) $(srcdir) 1 ${1:-20} \"\$$@\"" > $@
+ echo "$(PYTHON) $(srcdir)/test/GenerateTests.py -j$(JOBS) $(top_builddir)/ledger$(EXEEXT) $(srcdir) 1 ${1:-20} \"\$$@\"" > $@
chmod 755 $@
FULLCHECK=$(srcdir)/test/fullcheck.sh