Spaces:
Running
Running
File size: 5,189 Bytes
b200bda |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#!/usr/bin/env python
"""
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 = ''
# TODO: add a flag for this
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')]
# search for tests in directory of this file if not otherwise specified
if not testdir:
pattern = os.path.dirname(sys.argv[0])
else:
pattern = testdir
if pattern:
pattern += '/'
pattern += 'test*.py'
# look for tests (respecting specified filter)
for f in glob.glob(pattern):
name = os.path.splitext(os.path.basename(f))[0]
# If run as a script, only run tests given as args, if any are given
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])
# execute tests
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")
# clean sys.path
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)
|