summaryrefslogtreecommitdiff
path: root/var
diff options
context:
space:
mode:
authorSergei Shudler <sergshu@gmail.com>2021-06-18 10:47:44 -0700
committerGitHub <noreply@github.com>2021-06-18 10:47:44 -0700
commit1b368e433c894c72dc7bc2d853afcd44d18cb248 (patch)
tree7d633508946efe7616a6c91cb3b66392a597dc74 /var
parent94d6d3951a85e892efe7e4d4f576e90bd794377c (diff)
downloadspack-1b368e433c894c72dc7bc2d853afcd44d18cb248.tar.gz
spack-1b368e433c894c72dc7bc2d853afcd44d18cb248.tar.bz2
spack-1b368e433c894c72dc7bc2d853afcd44d18cb248.tar.xz
spack-1b368e433c894c72dc7bc2d853afcd44d18cb248.zip
Heffte: Add e4s testsuite-inspired smoke test (#23652)
Diffstat (limited to 'var')
-rw-r--r--var/spack/repos/builtin/packages/heffte/package.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/heffte/package.py b/var/spack/repos/builtin/packages/heffte/package.py
index a90b7d3c1c..881280847b 100644
--- a/var/spack/repos/builtin/packages/heffte/package.py
+++ b/var/spack/repos/builtin/packages/heffte/package.py
@@ -15,6 +15,8 @@ class Heffte(CMakePackage):
maintainers = ['mkstoyanov']
+ test_requires_compiler = True
+
version('develop', branch='master')
version('2.0.0', sha256='12f2b49a1a36c416eac174cf0cc50e729d56d68a9f68886d8c34bd45a0be26b6')
version('1.0', sha256='0902479fb5b1bad01438ca0a72efd577a3529c3d8bad0028f3c18d3a4935ca74')
@@ -65,3 +67,62 @@ class Heffte(CMakePackage):
'-DBUILD_GPU={0:1s}'.format(
'ON' if ('+cuda' in self.spec and
'+fftw' in self.spec) else 'OFF'), ]
+
+ examples_src_dir = 'examples'
+
+ @run_after('install')
+ def cache_test_sources(self):
+ """Copy the example source files after the package is installed to an
+ install test subdirectory for use during `spack test run`."""
+ self.cache_extra_test_sources([self.examples_src_dir])
+
+ def test(self):
+ cmake_file = join_path(self.install_test_root, 'CMakeLists.txt')
+ test_bld_dir = join_path(self.install_test_root, '_build')
+ exe_files = []
+ mpi_procs = []
+
+ with open(cmake_file, 'w') as cmkf:
+ cmkf.write('cmake_minimum_required(VERSION 3.13)\n\n')
+ cmkf.write('project(heffte_example LANGUAGES CXX)\n\n')
+ cmkf.write('find_package(Heffte REQUIRED)\n\n')
+ if '+fftw' in self.spec:
+ src_file = '{0}/heffte_example_fftw.cpp'.format(
+ self.examples_src_dir)
+ cmkf.write(
+ 'add_executable(hf_fftw {0})\n'.format(src_file))
+ cmkf.write(
+ 'target_link_libraries(hf_fftw Heffte::Heffte)\n')
+ exe_files.append('./hf_fftw')
+ mpi_procs.append(4)
+ if '+cuda' in self.spec:
+ src_file = '{0}/heffte_example_cuda.cpp'.format(
+ self.examples_src_dir)
+ cmkf.write(
+ 'add_executable(hf_cuda {0})\n'.format(src_file))
+ cmkf.write(
+ 'target_link_libraries(hf_cuda Heffte::Heffte)\n')
+ exe_files.append('./hf_cuda')
+ mpi_procs.append(4)
+ if '+fortran' in self.spec:
+ src_file = '{0}/heffte_example_fftw.f90'.format(
+ self.examples_src_dir)
+ cmkf.write(
+ 'add_executable(hf_fort {0})\n'.format(src_file))
+ cmkf.write(
+ 'target_link_libraries(hf_fort Heffte::Fortran)\n')
+ exe_files.append('./hf_fort')
+ mpi_procs.append(2)
+
+ with working_dir(test_bld_dir, create=True):
+ cmake('..')
+ make()
+ test_args = ['-n', '4', ' ']
+ mpiexe_f = which('srun', 'mpirun', 'mpiexec')
+ if mpiexe_f:
+ for exf, procs in zip(exe_files, mpi_procs):
+ test_args[-1] = exf
+ test_args[-2] = str(procs)
+ reason_str = 'Heffte smoke test, exe: {0}'.format(exf)
+ self.run_test(mpiexe_f.command, test_args,
+ purpose=reason_str)