| |
|
|
| """ |
| python runtests.py -py |
| Use py.test to run tests (more useful for debugging) |
| |
| python runtests.py -coverage |
| Generate test coverage report. Statistics are written to /tmp |
| |
| python runtests.py -profile |
| Generate profile stats (this is much slower) |
| |
| python runtests.py -nogmpy |
| Run tests without using GMPY even if it exists |
| |
| python runtests.py -strict |
| Enforce extra tests in normalize() |
| |
| python runtests.py -local |
| Insert '../..' at the beginning of sys.path to use local mpmath |
| |
| python runtests.py -skip ... |
| Skip tests from the listed modules |
| |
| Additional arguments are used to filter the tests to run. Only files that have |
| one of the arguments in their name are executed. |
| |
| """ |
|
|
| import sys, os, traceback |
|
|
| profile = False |
| if "-profile" in sys.argv: |
| sys.argv.remove('-profile') |
| profile = True |
|
|
| coverage = False |
| if "-coverage" in sys.argv: |
| sys.argv.remove('-coverage') |
| coverage = True |
|
|
| if "-nogmpy" in sys.argv: |
| sys.argv.remove('-nogmpy') |
| os.environ['MPMATH_NOGMPY'] = 'Y' |
|
|
| if "-strict" in sys.argv: |
| sys.argv.remove('-strict') |
| os.environ['MPMATH_STRICT'] = 'Y' |
|
|
| if "-local" in sys.argv: |
| sys.argv.remove('-local') |
| importdir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), |
| '../..')) |
| else: |
| importdir = '' |
|
|
| |
| testdir = '' |
|
|
| def testit(importdir='', testdir='', exit_on_fail=False): |
| """Run all tests in testdir while importing from importdir.""" |
| if importdir: |
| sys.path.insert(1, importdir) |
| if testdir: |
| sys.path.insert(1, testdir) |
| import os.path |
| import mpmath |
| print("mpmath imported from %s" % os.path.dirname(mpmath.__file__)) |
| print("mpmath backend: %s" % mpmath.libmp.backend.BACKEND) |
| print("mpmath mp class: %s" % repr(mpmath.mp)) |
| print("mpmath version: %s" % mpmath.__version__) |
| print("Python version: %s" % sys.version) |
| print("") |
| if "-py" in sys.argv: |
| sys.argv.remove('-py') |
| import py |
| py.test.cmdline.main() |
| else: |
| import glob |
| from timeit import default_timer as clock |
| modules = [] |
| args = sys.argv[1:] |
| excluded = [] |
| if '-skip' in args: |
| excluded = args[args.index('-skip')+1:] |
| args = args[:args.index('-skip')] |
| |
| if not testdir: |
| pattern = os.path.dirname(sys.argv[0]) |
| else: |
| pattern = testdir |
| if pattern: |
| pattern += '/' |
| pattern += 'test*.py' |
| |
| for f in glob.glob(pattern): |
| name = os.path.splitext(os.path.basename(f))[0] |
| |
| if args and __name__ == "__main__": |
| ok = False |
| for arg in args: |
| if arg in name: |
| ok = True |
| break |
| if not ok: |
| continue |
| elif name in excluded: |
| continue |
| module = __import__(name) |
| priority = module.__dict__.get('priority', 100) |
| if priority == 666: |
| modules = [[priority, name, module]] |
| break |
| modules.append([priority, name, module]) |
| |
| modules.sort() |
| tstart = clock() |
| for priority, name, module in modules: |
| print(name) |
| for f in sorted(module.__dict__.keys()): |
| if f.startswith('test_'): |
| if coverage and ('numpy' in f): |
| continue |
| sys.stdout.write(" " + f[5:].ljust(25) + " ") |
| t1 = clock() |
| try: |
| module.__dict__[f]() |
| except: |
| etype, evalue, trb = sys.exc_info() |
| if etype in (KeyboardInterrupt, SystemExit): |
| raise |
| print("") |
| print("TEST FAILED!") |
| print("") |
| traceback.print_exc() |
| if exit_on_fail: |
| return |
| t2 = clock() |
| print("ok " + " " + ("%.7f" % (t2-t1)) + " s") |
| tend = clock() |
| print("") |
| print("finished tests in " + ("%.2f" % (tend-tstart)) + " seconds") |
| |
| if importdir: |
| sys.path.remove(importdir) |
| if testdir: |
| sys.path.remove(testdir) |
|
|
| if __name__ == '__main__': |
| if profile: |
| import cProfile |
| cProfile.run("testit('%s', '%s')" % (importdir, testdir), sort=1) |
| elif coverage: |
| import trace |
| tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix], |
| trace=0, count=1) |
| tracer.run('testit(importdir, testdir)') |
| r = tracer.results() |
| r.write_results(show_missing=True, summary=True, coverdir="/tmp") |
| else: |
| testit(importdir, testdir) |
|
|