| | |
| |
|
| | """ |
| | 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) |
| |
|