10
0
mirror of https://github.com/LCPQ/quantum_package synced 2024-11-03 20:54:00 +01:00
quantum_package/scripts/run_tests.py

94 lines
2.3 KiB
Python
Raw Normal View History

2014-04-07 16:56:29 +02:00
#!/usr/bin/python
import sys,os
2014-04-16 22:16:32 +02:00
import subprocess
DEBUG=False
2014-04-07 16:56:29 +02:00
def run_test(test_name,inp):
command = './'+test_name+" ${QPACKAGE_ROOT}/data/inputs/"+inp
2014-04-16 22:16:32 +02:00
try:
result = subprocess.check_output(command, shell=True)
except:
result = sys.exc_info()[0]
2014-04-07 16:56:29 +02:00
return result
if __name__ == '__main__':
2014-04-07 16:56:29 +02:00
import unittest
from math import *
from multiprocessing import Pool
env = os.environ
verbosity = 1
if os.environ["OMP_NUM_THREADS"]=="1":
try:
nproc = int(subprocess.check_output("cat /proc/cpuinfo | grep processor | wc -l", shell=True))
except:
nproc=4
else:
nproc=1
2014-04-16 22:16:32 +02:00
testfiles = []
for f in os.listdir(os.getcwd()):
if f.endswith('.irp.f'):
testfiles.append(f.replace('.irp.f',''))
# start worker processes
pool = Pool(processes=nproc)
template = """
2014-04-07 16:56:29 +02:00
class $test(unittest.TestCase):
2014-04-16 22:16:32 +02:00
default_precision = 10
2014-04-07 20:01:30 +02:00
2014-04-07 16:56:29 +02:00
execfile('$test.ref')
name = '$test'
tasks = {}
2014-04-07 16:56:29 +02:00
def setUp(self):
2014-04-16 22:16:32 +02:00
if DEBUG: return
for d in self.data.keys():
if d not in self.tasks:
self.tasks[d] = pool.apply_async(run_test, [self.name, d])
2014-04-07 16:56:29 +02:00
def _test_input(self,inp):
2014-04-16 22:16:32 +02:00
if DEBUG:
output = run_test(self.name,inp)
else:
output = self.tasks[inp].get()
2014-04-07 16:56:29 +02:00
for line in output.splitlines():
buffer = line.split(':')
if len(buffer) == 1:
continue
l,r = buffer
l,r = l.strip(), eval(r)
2014-04-07 20:01:30 +02:00
if 'precision' in self.__dict__:
precision = self.precision[l]
else:
precision = self.default_precision
2014-04-07 16:56:29 +02:00
if type(r) == float:
self.assertAlmostEqual(self.data[inp][l], r,
2014-04-16 22:16:32 +02:00
places=precision, msg=None)
#places=abs(int(log10(precision*max(abs(self.data[inp][l]),1.e-12)))), msg=None)
2014-04-07 16:56:29 +02:00
else:
self.assertEqual(self.data[inp][l], r, msg=None)
2014-04-07 16:56:29 +02:00
t = "def test_$k(self): self._test_input('$i')"
for i in data.keys():
k = i
k = k.replace('.ezfio','')
k = k.replace('-','_m_')
k = k.replace('+','_p_')
exec t.replace('$i',i).replace('$k',k) in locals()
"""
for test in testfiles:
exec template.replace('$test',test) in locals()
2014-04-07 16:56:29 +02:00
unittest.main(verbosity=verbosity)