mirror of
https://github.com/openmc-dev/openmc.git
synced 2026-07-25 12:35:29 -04:00
160 lines
5.3 KiB
Python
Executable file
160 lines
5.3 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import sys
|
|
import nose
|
|
import glob
|
|
import shutil
|
|
from subprocess import call
|
|
|
|
from nose_mpi import NoseMPI
|
|
|
|
|
|
def run_compile():
|
|
print('-'*17)
|
|
print('Compilation tests')
|
|
print('-'*17)
|
|
|
|
# clean up all previous executables
|
|
openmc_exe = glob.glob(pwd + '/../src/openmc*')
|
|
for exe in openmc_exe:
|
|
os.remove(exe)
|
|
|
|
# run compile test
|
|
result = nose.run(argv=['nosetests', 'test_compile'] + flags)
|
|
if not result:
|
|
print('Did not pass compile tests.')
|
|
results.append(('compile', result))
|
|
|
|
|
|
def run_suite(name=None, mpi=False):
|
|
print('-'*(len(name) + 6))
|
|
print(name + ' tests')
|
|
print('-'*(len(name) + 6))
|
|
|
|
# Set arguments list. Note that the first argument is a dummy argument (the
|
|
# script name). It's not actually recursively calling run_tests.py
|
|
argv = ['nosetests', '--exclude', 'test_compile'] + flags
|
|
|
|
# Add MPI plugin if set
|
|
if mpi:
|
|
plugins = [NoseMPI()]
|
|
argv += ['--mpi-np', '3', '--mpi-exec', mpiexec]
|
|
else:
|
|
plugins = None
|
|
|
|
try:
|
|
os.chdir(pwd)
|
|
shutil.copyfile(pwd + '/../src/openmc-' + name, pwd + '/../src/openmc')
|
|
result = nose.run(argv=argv, addplugins=plugins)
|
|
except OSError:
|
|
result = False
|
|
print('No OpenMC executable found for ' + name + ' tests')
|
|
if not result:
|
|
print('Did not pass ' + name + ' tests')
|
|
results.append((name, result))
|
|
|
|
# set mpiexec path
|
|
if 'COMPILER' in os.environ:
|
|
compiler = os.environ['COMPILER']
|
|
else:
|
|
compiler = 'gnu'
|
|
mpiexec = '/opt/mpich/3.0.4-{0}/bin/mpiexec'.format(compiler)
|
|
|
|
# get current working directory
|
|
pwd = os.getcwd()
|
|
sys.path.append(pwd)
|
|
|
|
# Set list of tests, either default or from command line
|
|
flags = []
|
|
tests = ['compile', 'normal', 'debug', 'optimize',
|
|
'omp', 'omp-debug', 'omp-optimize',
|
|
'hdf5', 'hdf5-debug', 'hdf5-optimize',
|
|
'omp-hdf5', 'omp-hdf5-debug', 'omp-hdf5-optimize',
|
|
'mpi', 'mpi-debug', 'mpi-optimize',
|
|
'mpi-omp', 'mpi-omp-debug', 'mpi-omp-optimize',
|
|
'phdf5', 'phdf5-debug', 'phdf5-optimize',
|
|
'phdf5-omp', 'phdf5-omp-debug', 'phdf5-omp-optimize',
|
|
'petsc', 'petsc-debug', 'petsc-optimize',
|
|
'phdf5-petsc', 'phdf5-petsc-debug', 'phdf5-petsc-optimize',
|
|
'omp-phdf5-petsc', 'omp-phdf5-petsc-debug',
|
|
'omp-phdf5-petsc-optimize']
|
|
if len(sys.argv) > 1:
|
|
flags = [i for i in sys.argv[1:] if i.startswith('-')]
|
|
tests_ = [i for i in sys.argv[1:] if not i.startswith('-')]
|
|
|
|
# Check for special subsets of tests
|
|
tests__ = []
|
|
for i in tests_:
|
|
|
|
# All tests will run all the tests except for compile unless
|
|
# it is also specified on the command line. Note that specifying
|
|
# compile all-tests is the same as not specifying any args
|
|
if i == 'all-tests':
|
|
tests__ = tests
|
|
try:
|
|
idx = tests_.index('compile') # check for compile test
|
|
except ValueError:
|
|
del tests__[0]
|
|
finally:
|
|
break # don't need to check for anything else
|
|
|
|
# This checks for any subsets of tests. The string after
|
|
# all-XXXX will be used to search through all tests.
|
|
# Specifying XXXX=normal will run tests that don't contain
|
|
# debug or optimize substring.
|
|
if i.startswith('all-'):
|
|
suffix = i.split('all-')[1]
|
|
if suffix == 'normal':
|
|
for j in tests:
|
|
if j.rfind('debug') == -1 and \
|
|
j.rfind('optimize') == -1:
|
|
tests__.append(j)
|
|
else:
|
|
for j in tests:
|
|
if j.rfind(suffix) != -1:
|
|
if suffix == 'omp' and j == 'compile':
|
|
continue
|
|
if j == 'compile':
|
|
continue
|
|
tests__.append(j)
|
|
else:
|
|
tests__.append(i) # append specific test (e.g., mpi-debug)
|
|
tests = tests__ if tests__ else tests
|
|
|
|
# Run tests
|
|
results = []
|
|
for name in tests:
|
|
if name == 'compile':
|
|
run_compile()
|
|
elif name in ['normal', 'debug', 'optimize',
|
|
'hdf5', 'hdf5-debug', 'hdf5-optimize',
|
|
'omp', 'omp-debug', 'omp-optimize',
|
|
'omp-hdf5', 'omp-hdf5-debug', 'omp-hdf5-optimize']:
|
|
run_suite(name=name)
|
|
elif name in ['mpi', 'mpi-debug', 'mpi-optimize',
|
|
'mpi-omp', 'mpi-omp-debug', 'mpi-omp-optimize',
|
|
'phdf5', 'phdf5-debug', 'phdf5-optimize',
|
|
'phdf5-omp', 'phdf5-omp-debug', 'phdf5-omp-optimize',
|
|
'petsc', 'petsc-debug', 'petsc-optimize',
|
|
'phdf5-petsc', 'phdf5-petsc-debug', 'phdf5-petsc-optimize',
|
|
'omp-phdf5-petsc', 'omp-phdf5-petsc-debug',
|
|
'omp-phdf5-petsc-optimize']:
|
|
run_suite(name=name, mpi=True)
|
|
|
|
# print out summary of results
|
|
print('\n' + '='*54)
|
|
print('Summary of Compilation Option Testing:\n')
|
|
|
|
OK = '\033[92m'
|
|
FAIL = '\033[91m'
|
|
ENDC = '\033[0m'
|
|
BOLD = '\033[1m'
|
|
for name, result in results:
|
|
print(name + '.'*(50 - len(name)), end='')
|
|
if result:
|
|
print(BOLD + OK + '[OK]' + ENDC)
|
|
else:
|
|
print(BOLD + FAIL + '[FAILED]' + ENDC)
|