Each test can have a different threshold and tolerance, reducing the need to recreate blessed output files in response to small numerical changes.
195 lines
8.6 KiB
Python
195 lines
8.6 KiB
Python
from buildutils import *
|
|
|
|
Import('env','buildTargets','installTargets')
|
|
localenv = env.Clone()
|
|
|
|
os.environ['PYTHONPATH'] = pjoin(os.getcwd(), '..','Cantera','python')
|
|
|
|
class Test(object):
|
|
def __init__(self, subdir, programName,
|
|
blessedName, arguments=(),
|
|
extensions=('cpp',), artifacts=(),
|
|
comparisons=(), tolerance=1e-5, threshold=1e-14):
|
|
self.subdir = subdir
|
|
self.programName = programName
|
|
if isinstance(arguments, str):
|
|
arguments = [arguments]
|
|
self.arguments = arguments
|
|
self.blessedName = blessedName
|
|
self.extensions = extensions
|
|
self.artifacts = artifacts
|
|
self.passedFile = '.passed-%s-%s' % (programName, blessedName)
|
|
self.comparisons = comparisons
|
|
self.tolerance = tolerance # error tolerance for CSV comparison
|
|
self.threshold = threshold # error threshold for CSV comparison
|
|
|
|
def run(self, env):
|
|
prog = env.Program(pjoin(self.subdir, self.programName),
|
|
mglob(env, self.subdir, *self.extensions),
|
|
LIBS=env['cantera_libs'])
|
|
arguments = [pjoin(self.subdir, arg) for arg in self.arguments]
|
|
source = [prog, pjoin(self.subdir, self.blessedName)] + arguments
|
|
test = env.RegressionTest(pjoin(self.subdir, self.passedFile), source,
|
|
test_comparisons=self.comparisons,
|
|
test_csv_threshold=self.threshold,
|
|
test_csv_tolerance=self.tolerance)
|
|
|
|
return test
|
|
|
|
def clean(self, env):
|
|
# Name used for the output file
|
|
if 'blessed' in self.blessedName:
|
|
outName = self.blessedName.replace('blessed', 'output')
|
|
else:
|
|
outName = 'test_output.txt'
|
|
|
|
files = [self.programName,
|
|
self.programName + '.o',
|
|
self.passedFile,
|
|
'ct2ctml.log',
|
|
outName]
|
|
files += list(self.artifacts)
|
|
files = [pjoin(os.getcwd(), self.subdir, name) for name in files]
|
|
files = [f for f in files if os.path.exists(f)]
|
|
|
|
target = env.Command('clean-'+self.programName, [],
|
|
[Delete(f) for f in files])
|
|
return target
|
|
|
|
tests = [Test(pjoin('cathermo', 'DH_graph_1'),
|
|
'DH_graph_1',
|
|
'DH_NaCl_dilute_blessed.csv',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='DH_NaCl_dilute.xml'),
|
|
Test(pjoin('cathermo', 'DH_graph_acommon'),
|
|
'DH_graph_acommon',
|
|
'DH_NaCl_acommon_blessed.csv',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='DH_NaCl_acommon.xml'),
|
|
Test(pjoin('cathermo', 'DH_graph_bdotak'),
|
|
'DH_graph_bdotak',
|
|
'DH_NaCl_bdotak_blessed.csv',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='DH_NaCl_bdotak.xml'),
|
|
Test(pjoin('cathermo', 'DH_graph_NM'),
|
|
'DH_graph_NM',
|
|
'DH_NaCl_NM_blessed.csv',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='DH_NaCl_NM.xml'),
|
|
Test(pjoin('cathermo', 'DH_graph_Pitzer'),
|
|
'DH_graph_Pitzer',
|
|
'DH_NaCl_Pitzer_blessed.csv',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='DH_NaCl_Pitzer.xml'),
|
|
Test(pjoin('cathermo', 'HMW_dupl_test'),
|
|
'HMW_dupl_test',
|
|
'output_blessed.txt',
|
|
artifacts=['DH_graph_1.log'],
|
|
arguments='HMW_NaCl_sp1977_alt.xml'),
|
|
Test(pjoin('cathermo', 'HMW_graph_CpvT'),
|
|
'HMW_graph_CpvT',
|
|
'output_blessed.txt',
|
|
extensions=['^HMW_graph_CpvT.cpp', '^sortAlgorithms.cpp'],
|
|
arguments='HMW_NaCl_sp1977_alt.xml'),
|
|
# Skipping cathermo/HMW_graph_GvI because of the way it generates output files.
|
|
Test(pjoin('cathermo', 'HMW_graph_GvT'),
|
|
'HMW_graph_GvT',
|
|
'output_blessed.txt',
|
|
extensions=['^HMW_graph_GvT.cpp', '^sortAlgorithms.cpp'],
|
|
arguments='HMW_NaCl_sp1977_alt.xml'),
|
|
Test(pjoin('cathermo', 'HMW_graph_HvT'),
|
|
'HMW_graph_HvT',
|
|
'output_blessed.txt',
|
|
extensions=['^HMW_graph_HvT.cpp', '^sortAlgorithms.cpp'],
|
|
arguments='HMW_NaCl_sp1977_alt.xml'),
|
|
Test(pjoin('cathermo', 'HMW_graph_VvT'),
|
|
'HMW_graph_VvT',
|
|
'output_blessed.txt',
|
|
extensions=['^HMW_graph_VvT.cpp', '^sortAlgorithms.cpp'],
|
|
arguments='HMW_NaCl_sp1977_alt.xml'),
|
|
Test(pjoin('cathermo', 'HMW_test_1'),
|
|
'HMW_test_1',
|
|
'output_noD_blessed.txt'),
|
|
Test(pjoin('cathermo', 'HMW_test_3'),
|
|
'HMW_test_3',
|
|
'output_noD_blessed.txt'),
|
|
Test(pjoin('cathermo', 'ims'),
|
|
'IMSTester',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'issp'),
|
|
'ISSPTester',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'stoichSubSSTP'),
|
|
'stoichSubSSTP',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'testIAPWS'),
|
|
'testIAPWSphi',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'testIAPWSPres'),
|
|
'testIAPWSPres',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'testIAPWSTripP'),
|
|
'testIAPWSTripP',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'testWaterPDSS'),
|
|
'testWaterPDSS',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'testWaterTP'),
|
|
'testWaterSSTP',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'VPissp'),
|
|
'ISSPTester2',
|
|
'output_blessed.txt'),
|
|
Test(pjoin('cathermo', 'wtWater'),
|
|
'wtWater',
|
|
'output_blessed.txt'),
|
|
Test('ChemEquil_gri_matrix', 'gri_matrix', 'output_blessed.txt'),
|
|
Test('ChemEquil_gri_pairs', 'gri_pairs', 'output_blessed.txt'),
|
|
Test('ChemEquil_ionizedGas', 'ionizedGasEquil',
|
|
'output_blessed.txt',
|
|
artifacts=['table.csv'],
|
|
comparisons=[('table_blessed.csv', 'table.csv')]),
|
|
Test('ChemEquil_red1', 'basopt_red1', 'output_blessed.txt'),
|
|
# Skipping ck2cti_test because of automatically generated file
|
|
Test('CpJump', 'CpJump', 'output_blessed.txt'),
|
|
Test('cxx_ex', 'cxx_examples', 'output_blessed.txt',
|
|
comparisons=[('eq1_blessed.csv', 'eq1.csv'),
|
|
('kin1_blessed.csv', 'kin1.csv'),
|
|
('kin2_blessed.csv', 'kin2.csv'),
|
|
('tr1_blessed.csv', 'tr1.csv'),
|
|
('tr2_blessed.csv', 'tr2.csv')],
|
|
tolerance=2e-3,
|
|
threshold=1e-7,
|
|
artifacts=['eq1.csv', 'eq1.dat', 'kin1.csv', 'kin1.dat',
|
|
'kin2.csv', 'kin2.dat', 'kin3.csv', 'kin3.dat',
|
|
'tr1.csv', 'tr1.dat', 'tr2.csv', 'tr2.dat']),
|
|
Test('diamondSurf', 'runDiamond', 'runDiamond_blessed.out'),
|
|
Test('fracCoeff', 'fracCoeff', 'frac_blessed.out'),
|
|
# skipping min_python
|
|
Test('mixGasTransport', 'mixGasTransport', 'output_blessed.txt'),
|
|
Test('multiGasTransport', 'multiGasTransport', 'output_blessed.txt'),
|
|
Test('NASA9poly_test', 'NASA9poly_test', 'output_blessed.txt'),
|
|
# skipping nasa9_reader because of automatically generated file
|
|
Test('negATest', 'negATest', 'negATest_blessed.out'),
|
|
Test('printUtilUnitTest', 'pUtest', 'output_blessed.txt'),
|
|
Test('pureFluidTest', 'testPureWater', 'output_blessed.txt'),
|
|
# skipping python
|
|
Test('rankine_democxx', 'rankine', 'output_blessed.txt',
|
|
artifacts=['liquidvapor.xml']),
|
|
Test('silane_equil', 'silane_equi', 'output_blessed.txt'),
|
|
# spectroscopy is incomplete
|
|
Test('surfkin', 'surfdemo', 'output_blessed.txt'),
|
|
Test('surfSolverTest', 'surfaceSolver',
|
|
'surfaceSolver_blessed.out',
|
|
arguments='haca2.xml',
|
|
artifacts=['results.txt', 'diamond.xml'],
|
|
extensions=['^surfaceSolver.cpp']), # needs .csv, extra tests
|
|
# # Disabled because of need for command line arguments
|
|
# Test(pjoin('VCSnonideal', 'NaCl_equil'),
|
|
# 'nacl_equil',
|
|
# 'good_out.txt'), # needs .csv diff
|
|
Test('VPsilane_test', 'VPsilane_test', 'output_blessed.txt')
|
|
]
|
|
|
|
env.Alias('test', [test.run(localenv) for test in tests])
|
|
env.Alias('test-clean', sum([test.clean(localenv) for test in tests], []))
|