summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkuramoto-fj <72247780+kuramoto-fj@users.noreply.github.com>2021-02-25 01:35:27 +0900
committerGitHub <noreply@github.com>2021-02-24 10:35:27 -0600
commitd65002a6761cd2d745b76eae0592a50056255b7f (patch)
tree34f13a38616523e3e0f24c756cadcd974e38bb73
parente53595c0dcab66c869856fa7f5ea42d9bf7c7305 (diff)
downloadspack-d65002a6761cd2d745b76eae0592a50056255b7f.tar.gz
spack-d65002a6761cd2d745b76eae0592a50056255b7f.tar.bz2
spack-d65002a6761cd2d745b76eae0592a50056255b7f.tar.xz
spack-d65002a6761cd2d745b76eae0592a50056255b7f.zip
n2p2: Add new package (#21709)
* n2p2: Add new package * remove , * Resurrection of , and changed " to single * changed example.command to example.co * n2p2: Added v2.1.1 * n2p2: Changed the type of depends_on.
-rw-r--r--var/spack/repos/builtin/packages/n2p2/interface-makefile.patch18
-rw-r--r--var/spack/repos/builtin/packages/n2p2/interface-makefile211.patch17
-rw-r--r--var/spack/repos/builtin/packages/n2p2/libnnp-makefile.patch30
-rw-r--r--var/spack/repos/builtin/packages/n2p2/nnp_test.h.patch10
-rw-r--r--var/spack/repos/builtin/packages/n2p2/package.py138
-rw-r--r--var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.0.txt271
-rw-r--r--var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.1.txt272
-rwxr-xr-xvar/spack/repos/builtin/packages/n2p2/test/result-check.sh12
8 files changed, 768 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/n2p2/interface-makefile.patch b/var/spack/repos/builtin/packages/n2p2/interface-makefile.patch
new file mode 100644
index 0000000000..f987c9cb54
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/interface-makefile.patch
@@ -0,0 +1,18 @@
+--- a/src/interface/makefile
++++ b/src/interface/makefile
+@@ -45,10 +45,11 @@ lammps-nnp:
+ tar -xzf $(LAMMPS_VERSION).tar.gz && mv lammps-$(LAMMPS_VERSION) lammps-nnp
+ ln -s $(PROJECT_DIR)/../../ lammps-nnp/lib/nnp
+ cp -r ./LAMMPS/src/USER-NNP lammps-nnp/src/
+- sed -i "s/^CC .*$$/CC = $(PROJECT_MPICC)/" lammps-nnp/src/MAKE/Makefile.mpi
+- sed -i "s/^CCFLAGS .*$$/CCFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)/" lammps-nnp/src/MAKE/Makefile.mpi
+- sed -i "s/^LINK .*$$/LINK = $(PROJECT_MPICC)/" lammps-nnp/src/MAKE/Makefile.mpi
+- sed -i "s/^LINKFLAGS .*$$/LINKFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)/" lammps-nnp/src/MAKE/Makefile.mpi
++ sed -i "s/final(/final2(/g" lammps-nnp/src/hashlittle.cpp
++ sed -i "s|^CC .*$$|CC = $(PROJECT_MPICC)|" lammps-nnp/src/MAKE/Makefile.mpi
++ sed -i "s|^CCFLAGS .*$$|CCFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)|" lammps-nnp/src/MAKE/Makefile.mpi
++ sed -i "s|^LINK .*$$|LINK = $(PROJECT_MPICC)|" lammps-nnp/src/MAKE/Makefile.mpi
++ sed -i "s|^LINKFLAGS .*$$|LINKFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)|" lammps-nnp/src/MAKE/Makefile.mpi
+ if [ "$(MODE)" = "test" ]; then \
+ sed -i "/^CCFLAGS =/ s/$$/ $(PROJECT_DEBUG) $(PROJECT_TEST)/" lammps-nnp/src/MAKE/Makefile.mpi; \
+ sed -i "/^LINKFLAGS =/ s/$$/ $(PROJECT_DEBUG) $(PROJECT_TEST)/" lammps-nnp/src/MAKE/Makefile.mpi; \
diff --git a/var/spack/repos/builtin/packages/n2p2/interface-makefile211.patch b/var/spack/repos/builtin/packages/n2p2/interface-makefile211.patch
new file mode 100644
index 0000000000..e4317b3c12
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/interface-makefile211.patch
@@ -0,0 +1,17 @@
+--- a/src/interface/makefile
++++ b/src/interface/makefile
+@@ -46,10 +46,10 @@ lammps-nnp:
+ tar -xzf $(LAMMPS_VERSION).tar.gz && mv lammps-$(LAMMPS_VERSION) lammps-nnp
+ ln -s $(PROJECT_DIR)/../../ lammps-nnp/lib/nnp
+ cp -r ./LAMMPS/src/USER-NNP lammps-nnp/src/
+- @sed -i.bak "s/^CC .*$$/CC = $(PROJECT_MPICC)/" lammps-nnp/src/MAKE/Makefile.mpi
+- @sed -i.bak "s/^CCFLAGS .*$$/CCFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)/" lammps-nnp/src/MAKE/Makefile.mpi
+- @sed -i.bak "s/^LINK .*$$/LINK = $(PROJECT_MPICC)/" lammps-nnp/src/MAKE/Makefile.mpi
+- @sed -i.bak "s/^LINKFLAGS .*$$/LINKFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)/" lammps-nnp/src/MAKE/Makefile.mpi
++ @sed -i.bak "s|^CC .*$$|CC = $(PROJECT_MPICC)|" lammps-nnp/src/MAKE/Makefile.mpi
++ @sed -i.bak "s|^CCFLAGS .*$$|CCFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)|" lammps-nnp/src/MAKE/Makefile.mpi
++ @sed -i.bak "s|^LINK .*$$|LINK = $(PROJECT_MPICC)|" lammps-nnp/src/MAKE/Makefile.mpi
++ @sed -i.bak "s|^LINKFLAGS .*$$|LINKFLAGS = $(PROJECT_CFLAGS) $(PROJECT_CFLAGS_MPI)|" lammps-nnp/src/MAKE/Makefile.mpi
+ if [ "$(MODE)" = "test" ]; then \
+ sed -i.bak "/^CCFLAGS =/ s/$$/ $(LAMMPS_DEBUG) $(PROJECT_TEST)/" lammps-nnp/src/MAKE/Makefile.mpi; \
+ sed -i.bak "/^LINKFLAGS =/ s/$$/ $(LAMMPS_DEBUG) $(PROJECT_TEST)/" lammps-nnp/src/MAKE/Makefile.mpi; \
diff --git a/var/spack/repos/builtin/packages/n2p2/libnnp-makefile.patch b/var/spack/repos/builtin/packages/n2p2/libnnp-makefile.patch
new file mode 100644
index 0000000000..0405845a34
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/libnnp-makefile.patch
@@ -0,0 +1,30 @@
+--- a/src/libnnp/makefile
++++ b/src/libnnp/makefile
+@@ -72,11 +72,11 @@ headers: version
+
+ version:
+ @$(eval GIT_VERSION = $(shell git describe --tags --always))
+- @sed -i.bak -E "s/(NNP_GIT_VERSION) .*/\1 \"$(GIT_VERSION)\"/" version.h
++ @sed -i.bak -E "s|(NNP_GIT_VERSION) .*|\1 \"$(GIT_VERSION)\"|" version.h
+ @$(eval GIT_REV = $(shell git rev-parse HEAD))
+- @sed -i.bak -E "s/(NNP_GIT_REV) .*/\1 \"$(GIT_REV)\"/" version.h
++ @sed -i.bak -E "s|(NNP_GIT_REV) .*|\1 \"$(GIT_REV)\"|" version.h
+ @$(eval GIT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD))
+- @sed -i.bak -E "s/(NNP_GIT_BRANCH) .*/\1 \"$(GIT_BRANCH)\"/" version.h
++ @sed -i.bak -E "s|(NNP_GIT_BRANCH) .*|\1 \"$(GIT_BRANCH)\"|" version.h
+ @rm version.h.bak
+
+ $(LIB).so: CFLAGS+= -fPIC
+@@ -97,9 +97,9 @@ clean: clean-version clean-headers
+ $(RM) $(PROJECT_LIB)/$(LIB).so $(PROJECT_LIB)/$(LIB).a
+
+ clean-version:
+- @sed -i.bak -E "s/(NNP_GIT_VERSION) .*/\1 \"\"/" version.h
+- @sed -i.bak -E "s/(NNP_GIT_REV) .*/\1 \"\"/" version.h
+- @sed -i.bak -E "s/(NNP_GIT_BRANCH) .*/\1 \"\"/" version.h
++ @sed -i.bak -E "s|(NNP_GIT_VERSION) .*|\1 \"\"|" version.h
++ @sed -i.bak -E "s|(NNP_GIT_REV) .*|\1 \"\"|" version.h
++ @sed -i.bak -E "s|(NNP_GIT_BRANCH) .*|\1 \"\"|" version.h
+ @rm version.h.bak
+
+ clean-headers:
diff --git a/var/spack/repos/builtin/packages/n2p2/nnp_test.h.patch b/var/spack/repos/builtin/packages/n2p2/nnp_test.h.patch
new file mode 100644
index 0000000000..d5296ba1e4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/nnp_test.h.patch
@@ -0,0 +1,10 @@
+--- a/test/cpp/nnp_test.h
++++ b/test/cpp/nnp_test.h
+@@ -7,6 +7,7 @@
+ #include <boost/process.hpp>
+ #include <boost/filesystem.hpp>
+ #include <iostream>
++#include <boost/asio.hpp>
+ #include "fileHelpers.h"
+
+ namespace bdata = boost::unit_test::data;
diff --git a/var/spack/repos/builtin/packages/n2p2/package.py b/var/spack/repos/builtin/packages/n2p2/package.py
new file mode 100644
index 0000000000..0d8ffda8e4
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/package.py
@@ -0,0 +1,138 @@
+# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
+# Spack Project Developers. See the top-level COPYRIGHT file for details.
+#
+# SPDX-License-Identifier: (Apache-2.0 OR MIT)
+
+from spack import *
+
+
+class N2p2(MakefilePackage):
+ """N2p2 (The neural network potential package) provides ready-to-use
+ software for high-dimensional neural network potentials
+ in computational physics and chemistry."""
+
+ homepage = "https://github.com/CompPhysVienna/n2p2"
+ url = "https://github.com/CompPhysVienna/n2p2/archive/v2.1.0.tar.gz"
+
+ version(
+ "2.1.1",
+ sha256="90fbc0756132984d0d7e6d92d2f53358c120e75f148910d90c027158163251b9",
+ )
+ version(
+ "2.1.0",
+ sha256="283c00e9a5b964f4c84a70c5f1cef7167e9b881080b50a221da08799e5ede400",
+ )
+
+ variant("doc", default=False, description="build documentation with Doxygen")
+
+ patch("interface-makefile.patch", when="@2.1.0")
+ patch("interface-makefile211.patch", when="@2.1.1")
+ patch("libnnp-makefile.patch")
+ patch("nnp_test.h.patch")
+
+ depends_on("mpi")
+ depends_on("blas")
+ depends_on("gsl", type=("build", "run", "link"))
+ depends_on("eigen", type=("build", "run", "link"))
+ depends_on("doxygen", type="build", when="+doc")
+ depends_on("texlive", type="build", when="+doc")
+ depends_on("py-cython", type=("build", "run"))
+ depends_on("py-breathe", type="build", when="+doc")
+ depends_on("py-sphinx", type="build", when="+doc")
+ depends_on("py-sphinx-rtd-theme", type="build", when="+doc")
+
+ depends_on("boost", type="link")
+ depends_on("lcov", type=("build", "run"))
+ depends_on("py-pytest", type=("build", "run"))
+ depends_on("py-pytest-cov", type="run")
+ depends_on("py-coverage@4.5.4", type="run")
+ depends_on("py-packaging", type="run")
+ depends_on("python", type=("build", "run"))
+
+ test_requires_compiler = True
+
+ def edit(self, spec, prefix):
+ makefile = FileFilter(join_path("src", "makefile.gnu"))
+ blas_libs = self.spec["blas"].libs
+ makefile.filter("PROJECT_CC=.*", "PROJECT_CC={0}".format(spack_cxx))
+ makefile.filter(
+ "PROJECT_MPICC=.*", "PROJECT_MPICC={0}".format(self.spec["mpi"].mpicxx)
+ )
+ makefile.filter(
+ "PROJECT_CFLAGS=.*", "PROJECT_CFLAGS={0}".format(self.compiler.cxx11_flag)
+ )
+ makefile.filter(
+ "PROJECT_LDFLAGS_BLAS.*",
+ "PROJECT_LDFLAGS_BLAS={0} -lgsl -lgslcblas".format(blas_libs.ld_flags),
+ )
+
+ def build(self, spec, prefix):
+ with working_dir("src"):
+ make()
+ make("lammps-nnp")
+ make("pynnp")
+ if "+doc" in self.spec:
+ make("doc")
+
+ def install(self, spec, prefix):
+ install_tree("bin", prefix.bin)
+ if "+doc" in self.spec:
+ install_tree("doc", prefix.doc)
+ install_tree("examples", prefix.examples)
+ install_tree("include", prefix.include)
+ install_tree("lib", prefix.lib)
+ install_tree("tools", prefix.tools)
+
+ @run_after("install")
+ def setup_build_tests(self):
+ """Copy the build test files after the package is installed to an
+ install test subdirectory for use during `spack test run`."""
+ self.cache_extra_test_sources(".")
+
+ def test(self):
+ with working_dir(join_path(self.install_test_root, "test"), create=False):
+ make("clean")
+
+ with working_dir(join_path(self.install_test_root, "src"), create=False):
+ make("clean")
+ make(
+ "MODE=test",
+ "PROJECT_GSL={0}".format(self.spec["gsl"].prefix.include),
+ "PROJECT_EIGEN={0}".format(self.spec["eigen"].prefix.include.eigen3),
+ )
+ make(
+ "MODE=test",
+ "lammps-nnp",
+ "PROJECT_GSL={0}".format(self.spec["gsl"].prefix.include),
+ "PROJECT_EIGEN={0}".format(self.spec["eigen"].prefix.include.eigen3),
+ )
+ make("pynnp", "MODE=test")
+
+ with working_dir(join_path(self.install_test_root, "test"), create=False):
+ if self.spec.satisfies("%fj"):
+ f = FileFilter(join_path("cpp", "nnp_test.h"))
+ f.filter(
+ "(example.co",
+ '("{0} -n 1 " + example.co'.format(
+ self.spec["mpi"].prefix.bin.mpirun
+ ),
+ string=True,
+ )
+
+ f = FileFilter(join_path("cpp", "makefile"))
+ f.filter(
+ "log_level=.*", "log_level=$(LOG_LEVEL) 2>&1 | tee -a ../output_cpp.txt"
+ )
+
+ f = FileFilter(join_path("python", "makefile"))
+ f.filter("term\\s-v.*", "term -v | tee -a ../output_python.txt")
+
+ make("cpp", parallel=False)
+ make("python", parallel=False)
+
+ test_dir = self.test_suite.current_test_data_dir
+ expected_file = join_path(
+ test_dir, "expected-result-{0}.txt".format(self.version)
+ )
+ check_n2p2 = Executable(join_path(test_dir, "result-check.sh"))
+ check_n2p2("./output_cpp.txt", "./output_python.txt", expected_file)
diff --git a/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.0.txt b/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.0.txt
new file mode 100644
index 0000000000..8fabaf2abd
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.0.txt
@@ -0,0 +1,271 @@
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+test_Atom.py::Test___cinit__::test_skeleton_initialization PASSED [ 0%]
+test_Atom.py::Test___cinit__::test_empty_initialization PASSED [ 0%]
+test_Atom.py::Test_hasNeighborList::test_correct_type PASSED [ 1%]
+test_Atom.py::Test_hasNeighborList::test_set_and_get PASSED [ 1%]
+test_Atom.py::Test_hasSymmetryFunctions::test_correct_type PASSED [ 1%]
+test_Atom.py::Test_hasSymmetryFunctions::test_set_and_get PASSED [ 2%]
+test_Atom.py::Test_hasSymmetryFunctionDerivatives::test_correct_type PASSED [ 2%]
+test_Atom.py::Test_hasSymmetryFunctionDerivatives::test_set_and_get PASSED [ 3%]
+test_Atom.py::Test_index::test_correct_type PASSED [ 3%]
+test_Atom.py::Test_index::test_set_and_get PASSED [ 3%]
+test_Atom.py::Test_indexStructure::test_correct_type PASSED [ 4%]
+test_Atom.py::Test_indexStructure::test_set_and_get PASSED [ 4%]
+test_Atom.py::Test_tag::test_correct_type PASSED [ 5%]
+test_Atom.py::Test_tag::test_set_and_get PASSED [ 5%]
+test_Atom.py::Test_element::test_correct_type PASSED [ 5%]
+test_Atom.py::Test_element::test_set_and_get PASSED [ 6%]
+test_Atom.py::Test_numNeighbors::test_correct_type PASSED [ 6%]
+test_Atom.py::Test_numNeighbors::test_set_and_get PASSED [ 7%]
+test_Atom.py::Test_numNeighborsUnique::test_correct_type PASSED [ 7%]
+test_Atom.py::Test_numNeighborsUnique::test_set_and_get PASSED [ 7%]
+test_Atom.py::Test_numSymmetryFunctions::test_correct_type PASSED [ 8%]
+test_Atom.py::Test_numSymmetryFunctions::test_set_and_get PASSED [ 8%]
+test_Atom.py::Test_energy::test_correct_type PASSED [ 9%]
+test_Atom.py::Test_energy::test_set_and_get PASSED [ 9%]
+test_Atom.py::Test_charge::test_correct_type PASSED [ 9%]
+test_Atom.py::Test_charge::test_set_and_get PASSED [ 10%]
+test_Atom.py::Test_r::test_correct_type PASSED [ 10%]
+test_Atom.py::Test_r::test_set_and_get PASSED [ 10%]
+test_Atom.py::Test_f::test_correct_type PASSED [ 11%]
+test_Atom.py::Test_f::test_set_and_get PASSED [ 11%]
+test_Atom.py::Test_fRef::test_correct_type PASSED [ 12%]
+test_Atom.py::Test_fRef::test_set_and_get PASSED [ 12%]
+test_Atom.py::Test_neighborsUnique::test_correct_type PASSED [ 12%]
+test_Atom.py::Test_numNeighborsPerElement::test_correct_type PASSED [ 13%]
+test_Atom.py::Test_G::test_correct_type PASSED [ 13%]
+test_Atom.py::Test_dEdG::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_dGdr::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_neighbors::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_info::test_return_list PASSED [ 15%]
+test_CutoffFunction.py::Test___cinit__::test_skeleton_initialization PASSED [ 15%]
+test_CutoffFunction.py::Test___cinit__::test_empty_initialization PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[0] PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[1] PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[2] PASSED [ 17%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[3] PASSED [ 17%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[4] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[5] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[6] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[7] PASSED [ 19%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[8] PASSED [ 19%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_unknown_type PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffRadius::test_set_float_value PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffRadius::test_set_wrong_argument PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_float_value PASSED [ 21%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_wrong_float_value PASSED [ 21%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_wrong_argument PASSED [ 21%]
+test_CutoffFunction.py::Test_f::test_boundaries[0] PASSED [ 22%]
+test_CutoffFunction.py::Test_f::test_boundaries[1] PASSED [ 22%]
+test_CutoffFunction.py::Test_f::test_boundaries[2] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[3] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[4] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[5] PASSED [ 24%]
+test_CutoffFunction.py::Test_f::test_boundaries[6] PASSED [ 24%]
+test_CutoffFunction.py::Test_f::test_boundaries[7] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_boundaries[8] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[0-1.0] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[1-0.1464466094067261] PASSED [ 26%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[2-0.00768915371206977] PASSED [ 26%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[3-0.01740635089776903] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[4-0.27645304662956416] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[5-0.1562499999999999] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[6-0.10351562500000003] PASSED [ 28%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[7-0.07055664062499914] PASSED [ 28%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[8-0.04892730712890944] PASSED [ 29%]
+test_CutoffFunction.py::Test_f::test_nonfloat_argument PASSED [ 29%]
+test_CutoffFunction.py::Test_df::test_boundaries[0] PASSED [ 29%]
+test_CutoffFunction.py::Test_df::test_boundaries[1] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[2] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[3] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[4] PASSED [ 31%]
+test_CutoffFunction.py::Test_df::test_boundaries[5] PASSED [ 31%]
+test_CutoffFunction.py::Test_df::test_boundaries[6] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_boundaries[7] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_boundaries[8] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[0-0.0] PASSED [ 33%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[1--0.46280030605816297] PASSED [ 33%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[2--0.0374393678577051] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[3--0.08475351107871792] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[4--0.9027038257291898] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[5--0.4687499999999999] PASSED [ 35%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[6--0.43945312499999917] PASSED [ 35%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[7--0.38452148437500033] PASSED [ 36%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[8--0.32444000244141674] PASSED [ 36%]
+test_CutoffFunction.py::Test_df::test_nonfloat_argument PASSED [ 36%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[0] PASSED [ 37%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[1] PASSED [ 37%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[2] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[3] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[4] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[5] PASSED [ 39%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[6] PASSED [ 39%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[7] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[8] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[0-1.0-0.0] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[1-0.1464466094067261--0.46280030605816297] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[2-0.00768915371206977--0.0374393678577051] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[3-0.01740635089776903--0.08475351107871792] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[4-0.27645304662956416--0.9027038257291898] PASSED [ 42%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[5-0.1562499999999999--0.4687499999999999] PASSED [ 42%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[6-0.10351562500000003--0.43945312499999917] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[7-0.07055664062499914--0.38452148437500033] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[8-0.04892730712890944--0.32444000244141674] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonfloat_argument PASSED [ 44%]
+test_ElementMap.py::Test___cinit__::test_skeleton_initialization PASSED [ 44%]
+test_ElementMap.py::Test___cinit__::test_empty_initialization PASSED [ 45%]
+test_ElementMap.py::Test_registerElements::test_nonstring_argument PASSED [ 45%]
+test_ElementMap.py::Test_registerElements::test_correct_elements_registered PASSED [ 45%]
+test_ElementMap.py::Test___getitem__::test_correct_element_index PASSED [ 46%]
+test_ElementMap.py::Test___getitem__::test_correct_element_symbol PASSED [ 46%]
+test_ElementMap.py::Test___getitem__::test_out_of_bounds_index PASSED [ 47%]
+test_ElementMap.py::Test___getitem__::test_unknown_symbol PASSED [ 47%]
+test_ElementMap.py::Test___getitem__::test_wrong_argument_type PASSED [ 47%]
+test_ElementMap.py::Test_size::test_correct_empty_size_returned PASSED [ 48%]
+test_ElementMap.py::Test_size::test_correct_size_returned PASSED [ 48%]
+test_ElementMap.py::Test_index::test_correct_element_index PASSED [ 49%]
+test_ElementMap.py::Test_index::test_wrong_argument_type PASSED [ 49%]
+test_ElementMap.py::Test_symbol::test_correct_element_index PASSED [ 49%]
+test_ElementMap.py::Test_symbol::test_wrong_argument_type PASSED [ 50%]
+test_ElementMap.py::Test_deregisterElements::test_empty_map PASSED [ 50%]
+test_ElementMap.py::Test_symbolFromAtomicNumber::test_some_elements PASSED [ 50%]
+test_ElementMap.py::Test_info::test_return_list PASSED [ 51%]
+test_Log.py::Test___cinit__::test_skeleton_initialization PASSED [ 51%]
+test_Log.py::Test___cinit__::test_empty_initialization PASSED [ 52%]
+test_Log.py::Test_addLogEntry::test_add_string_entry PASSED [ 52%]
+test_Log.py::Test_addLogEntry::test_add_nonstring_entry PASSED [ 52%]
+test_Log.py::Test_getLog::test_read_two_entries PASSED [ 53%]
+test_Log.py::Test_writeToStdout::test_correct_type PASSED [ 53%]
+test_Log.py::Test_writeToStdout::test_set_and_get PASSED [ 54%]
+test_Neighbor.py::Test___cinit__::test_skeleton_initialization PASSED [ 54%]
+test_Neighbor.py::Test___cinit__::test_empty_initialization PASSED [ 54%]
+test_Neighbor.py::Test_index::test_correct_type PASSED [ 55%]
+test_Neighbor.py::Test_index::test_set_and_get PASSED [ 55%]
+test_Neighbor.py::Test_tag::test_correct_type PASSED [ 56%]
+test_Neighbor.py::Test_tag::test_set_and_get PASSED [ 56%]
+test_Neighbor.py::Test_element::test_correct_type PASSED [ 56%]
+test_Neighbor.py::Test_element::test_set_and_get PASSED [ 57%]
+test_Neighbor.py::Test_d::test_correct_type PASSED [ 57%]
+test_Neighbor.py::Test_d::test_set_and_get PASSED [ 58%]
+test_Neighbor.py::Test_dr::test_correct_type PASSED [ 58%]
+test_Neighbor.py::Test_dr::test_set_and_get PASSED [ 58%]
+test_Neighbor.py::Test_dGdr::test_correct_type PASSED [ 59%]
+test_Neighbor.py::Test___eq__::test_not_equal PASSED [ 59%]
+test_Neighbor.py::Test___eq__::test_element_different PASSED [ 60%]
+test_Neighbor.py::Test___eq__::test_distance_different PASSED [ 60%]
+test_Neighbor.py::Test___eq__::test_equal PASSED [ 60%]
+test_Neighbor.py::Test___ne__::test_element_different PASSED [ 61%]
+test_Neighbor.py::Test___ne__::test_distance_different PASSED [ 61%]
+test_Neighbor.py::Test___ne__::test_equal PASSED [ 61%]
+test_Neighbor.py::Test___lt__::test_less_than PASSED [ 62%]
+test_Neighbor.py::Test___lt__::test_greater_than PASSED [ 62%]
+test_Neighbor.py::Test___lt__::test_equal_distance PASSED [ 63%]
+test_Neighbor.py::Test___lt__::test_equal_element PASSED [ 63%]
+test_Neighbor.py::Test___lt__::test_equal PASSED [ 63%]
+test_Neighbor.py::Test___gt__::test_less_than PASSED [ 64%]
+test_Neighbor.py::Test___gt__::test_greater_than PASSED [ 64%]
+test_Neighbor.py::Test___gt__::test_equal_distance PASSED [ 65%]
+test_Neighbor.py::Test___gt__::test_equal_element PASSED [ 65%]
+test_Neighbor.py::Test___gt__::test_equal PASSED [ 65%]
+test_Neighbor.py::Test___le__::test_less_than PASSED [ 66%]
+test_Neighbor.py::Test___le__::test_greater_than PASSED [ 66%]
+test_Neighbor.py::Test___le__::test_equal_distance PASSED [ 67%]
+test_Neighbor.py::Test___le__::test_equal_element PASSED [ 67%]
+test_Neighbor.py::Test___le__::test_equal PASSED [ 67%]
+test_Neighbor.py::Test___ge__::test_less_than PASSED [ 68%]
+test_Neighbor.py::Test___ge__::test_greater_than PASSED [ 68%]
+test_Neighbor.py::Test___ge__::test_equal_distance PASSED [ 69%]
+test_Neighbor.py::Test___ge__::test_equal_element PASSED [ 69%]
+test_Neighbor.py::Test___ge__::test_equal PASSED [ 69%]
+test_Settings.py::Test___cinit__::test_skeleton_initialization PASSED [ 70%]
+test_Settings.py::Test___cinit__::test_empty_initialization PASSED [ 70%]
+test_Settings.py::Test_loadFile::test_file_read[setups/Settings] PASSED [ 70%]
+test_Settings.py::Test___getitem__::test_existing_key[setups/Settings] PASSED [ 71%]
+test_Settings.py::Test___getitem__::test_nonexisting_key[setups/Settings] PASSED [ 71%]
+test_Settings.py::Test___getitem__::test_nonstring_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_existing_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_nonexisting_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_nonstring_key[setups/Settings] PASSED [ 73%]
+test_Settings.py::Test_getValue::test_existing_key[setups/Settings] PASSED [ 73%]
+test_Settings.py::Test_getValue::test_nonexisting_key[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_getValue::test_nonstring_key[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_info::test_return_list[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_getSettingsLines::test_return_list[setups/Settings] PASSED [ 75%]
+test_Vec3D.py::Test___cinit__::test_skeleton_initialization PASSED [ 75%]
+test_Vec3D.py::Test___cinit__::test_empty_initialization PASSED [ 76%]
+test_Vec3D.py::Test___cinit__::test_float_initialization PASSED [ 76%]
+test_Vec3D.py::Test___cinit__::test_Vec3D_initialization PASSED [ 76%]
+test_Vec3D.py::Test___getitem__::test_no_integer_index PASSED [ 77%]
+test_Vec3D.py::Test___getitem__::test_negative_index PASSED [ 77%]
+test_Vec3D.py::Test___getitem__::test_large_index PASSED [ 78%]
+test_Vec3D.py::Test___getitem__::test_components PASSED [ 78%]
+test_Vec3D.py::Test___setitem__::test_no_integer_index PASSED [ 78%]
+test_Vec3D.py::Test___setitem__::test_negative_index PASSED [ 79%]
+test_Vec3D.py::Test___setitem__::test_large_index PASSED [ 79%]
+test_Vec3D.py::Test___setitem__::test_wrong_type PASSED [ 80%]
+test_Vec3D.py::Test___setitem__::test_components PASSED [ 80%]
+test_Vec3D.py::Test___str__::test_return_string PASSED [ 80%]
+test_Vec3D.py::Test___str__::test_string_content PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_wrong_type PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_correct_addition PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_added_Vec3D_unchanged PASSED [ 82%]
+test_Vec3D.py::Test___isub__::test_wrong_type PASSED [ 82%]
+test_Vec3D.py::Test___isub__::test_correct_subtraction PASSED [ 83%]
+test_Vec3D.py::Test___isub__::test_subtracted_Vec3D_unchanged PASSED [ 83%]
+test_Vec3D.py::Test___imul__::test_wrong_type PASSED [ 83%]
+test_Vec3D.py::Test___imul__::test_correct_float_multiplication PASSED [ 84%]
+test_Vec3D.py::Test___itruediv__::test_wrong_type PASSED [ 84%]
+test_Vec3D.py::Test___itruediv__::test_correct_float_division PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_wrong_type PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_scalar_product PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_right_float_multiplication PASSED [ 86%]
+test_Vec3D.py::Test___mul__::test_left_float_multiplication PASSED [ 86%]
+test_Vec3D.py::Test___eq__::test_wrong_type PASSED [ 87%]
+test_Vec3D.py::Test___eq__::test_equal_components PASSED [ 87%]
+test_Vec3D.py::Test___ne__::test_wrong_type PASSED [ 87%]
+test_Vec3D.py::Test___ne__::test_one_different_component PASSED [ 88%]
+test_Vec3D.py::Test_norm::test_correct_result PASSED [ 88%]
+test_Vec3D.py::Test_norm2::test_correct_result PASSED [ 89%]
+test_Vec3D.py::Test_normalize::test_correct_result PASSED [ 89%]
+test_Vec3D.py::Test_cross::test_wrong_type PASSED [ 89%]
+test_Vec3D.py::Test_cross::test_correct_return_type PASSED [ 90%]
+test_Vec3D.py::Test_cross::test_correct_result PASSED [ 90%]
+test_Vec3D.py::Test___add__::test_wrong_type PASSED [ 90%]
+test_Vec3D.py::Test___add__::test_correct_return_type PASSED [ 91%]
+test_Vec3D.py::Test___add__::test_new_object_returned PASSED [ 91%]
+test_Vec3D.py::Test___add__::test_correct_result PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_wrong_type PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_correct_return_type PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_new_object_returned PASSED [ 93%]
+test_Vec3D.py::Test___sub__::test_correct_result PASSED [ 93%]
+test_Vec3D.py::Test___neg__::test_correct_return_type PASSED [ 94%]
+test_Vec3D.py::Test___neg__::test_new_object_returned PASSED [ 94%]
+test_Vec3D.py::Test___neg__::test_correct_result PASSED [ 94%]
+test_Vec3D.py::Test___truediv__::test_wrong_type PASSED [ 95%]
+test_Vec3D.py::Test___truediv__::test_correct_return_type PASSED [ 95%]
+test_Vec3D.py::Test___truediv__::test_new_object_returned PASSED [ 96%]
+test_Vec3D.py::Test___truediv__::test_correct_result PASSED [ 96%]
+test_Vec3D.py::Test_r::test_getter_correct_type PASSED [ 96%]
+test_Vec3D.py::Test_r::test_getter_correct_size PASSED [ 97%]
+test_Vec3D.py::Test_r::test_getter_correct_content PASSED [ 97%]
+test_Vec3D.py::Test_r::test_setter_wrong_size PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_wrong_type PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_wrong_list_size PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_correct_assignment PASSED [ 99%]
+test_Vec3D.py::Test_r::test_setter_correct_assignment_to_Vec3D PASSED [ 99%]
+test_Vec3D.py::Test_r::test_setter_index_assignment_not_possible PASSED [100%]
diff --git a/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.1.txt b/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.1.txt
new file mode 100644
index 0000000000..26fb530a38
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/test/expected-result-2.1.1.txt
@@ -0,0 +1,272 @@
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+*** No errors detected
+test_Atom.py::Test___cinit__::test_skeleton_initialization PASSED [ 0%]
+test_Atom.py::Test___cinit__::test_empty_initialization PASSED [ 0%]
+test_Atom.py::Test_hasNeighborList::test_correct_type PASSED [ 1%]
+test_Atom.py::Test_hasNeighborList::test_set_and_get PASSED [ 1%]
+test_Atom.py::Test_hasSymmetryFunctions::test_correct_type PASSED [ 1%]
+test_Atom.py::Test_hasSymmetryFunctions::test_set_and_get PASSED [ 2%]
+test_Atom.py::Test_hasSymmetryFunctionDerivatives::test_correct_type PASSED [ 2%]
+test_Atom.py::Test_hasSymmetryFunctionDerivatives::test_set_and_get PASSED [ 3%]
+test_Atom.py::Test_index::test_correct_type PASSED [ 3%]
+test_Atom.py::Test_index::test_set_and_get PASSED [ 3%]
+test_Atom.py::Test_indexStructure::test_correct_type PASSED [ 4%]
+test_Atom.py::Test_indexStructure::test_set_and_get PASSED [ 4%]
+test_Atom.py::Test_tag::test_correct_type PASSED [ 5%]
+test_Atom.py::Test_tag::test_set_and_get PASSED [ 5%]
+test_Atom.py::Test_element::test_correct_type PASSED [ 5%]
+test_Atom.py::Test_element::test_set_and_get PASSED [ 6%]
+test_Atom.py::Test_numNeighbors::test_correct_type PASSED [ 6%]
+test_Atom.py::Test_numNeighbors::test_set_and_get PASSED [ 7%]
+test_Atom.py::Test_numNeighborsUnique::test_correct_type PASSED [ 7%]
+test_Atom.py::Test_numNeighborsUnique::test_set_and_get PASSED [ 7%]
+test_Atom.py::Test_numSymmetryFunctions::test_correct_type PASSED [ 8%]
+test_Atom.py::Test_numSymmetryFunctions::test_set_and_get PASSED [ 8%]
+test_Atom.py::Test_energy::test_correct_type PASSED [ 9%]
+test_Atom.py::Test_energy::test_set_and_get PASSED [ 9%]
+test_Atom.py::Test_charge::test_correct_type PASSED [ 9%]
+test_Atom.py::Test_charge::test_set_and_get PASSED [ 10%]
+test_Atom.py::Test_r::test_correct_type PASSED [ 10%]
+test_Atom.py::Test_r::test_set_and_get PASSED [ 10%]
+test_Atom.py::Test_f::test_correct_type PASSED [ 11%]
+test_Atom.py::Test_f::test_set_and_get PASSED [ 11%]
+test_Atom.py::Test_fRef::test_correct_type PASSED [ 12%]
+test_Atom.py::Test_fRef::test_set_and_get PASSED [ 12%]
+test_Atom.py::Test_neighborsUnique::test_correct_type PASSED [ 12%]
+test_Atom.py::Test_numNeighborsPerElement::test_correct_type PASSED [ 13%]
+test_Atom.py::Test_G::test_correct_type PASSED [ 13%]
+test_Atom.py::Test_dEdG::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_dGdr::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_neighbors::test_correct_type PASSED [ 14%]
+test_Atom.py::Test_info::test_return_list PASSED [ 15%]
+test_CutoffFunction.py::Test___cinit__::test_skeleton_initialization PASSED [ 15%]
+test_CutoffFunction.py::Test___cinit__::test_empty_initialization PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[0] PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[1] PASSED [ 16%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[2] PASSED [ 17%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[3] PASSED [ 17%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[4] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[5] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[6] PASSED [ 18%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[7] PASSED [ 19%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_correct_type[8] PASSED [ 19%]
+test_CutoffFunction.py::Test_setCutoffType::test_set_unknown_type PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffRadius::test_set_float_value PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffRadius::test_set_wrong_argument PASSED [ 20%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_float_value PASSED [ 21%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_wrong_float_value PASSED [ 21%]
+test_CutoffFunction.py::Test_setCutoffParameter::test_set_wrong_argument PASSED [ 21%]
+test_CutoffFunction.py::Test_f::test_boundaries[0] PASSED [ 22%]
+test_CutoffFunction.py::Test_f::test_boundaries[1] PASSED [ 22%]
+test_CutoffFunction.py::Test_f::test_boundaries[2] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[3] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[4] PASSED [ 23%]
+test_CutoffFunction.py::Test_f::test_boundaries[5] PASSED [ 24%]
+test_CutoffFunction.py::Test_f::test_boundaries[6] PASSED [ 24%]
+test_CutoffFunction.py::Test_f::test_boundaries[7] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_boundaries[8] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[0-1.0] PASSED [ 25%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[1-0.1464466094067261] PASSED [ 26%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[2-0.00768915371206977] PASSED [ 26%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[3-0.01740635089776903] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[4-0.27645304662956416] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[5-0.1562499999999999] PASSED [ 27%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[6-0.10351562500000003] PASSED [ 28%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[7-0.07055664062499914] PASSED [ 28%]
+test_CutoffFunction.py::Test_f::test_nonzero_radius[8-0.04892730712890944] PASSED [ 29%]
+test_CutoffFunction.py::Test_f::test_nonfloat_argument PASSED [ 29%]
+test_CutoffFunction.py::Test_df::test_boundaries[0] PASSED [ 29%]
+test_CutoffFunction.py::Test_df::test_boundaries[1] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[2] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[3] PASSED [ 30%]
+test_CutoffFunction.py::Test_df::test_boundaries[4] PASSED [ 31%]
+test_CutoffFunction.py::Test_df::test_boundaries[5] PASSED [ 31%]
+test_CutoffFunction.py::Test_df::test_boundaries[6] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_boundaries[7] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_boundaries[8] PASSED [ 32%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[0-0.0] PASSED [ 33%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[1--0.46280030605816297] PASSED [ 33%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[2--0.0374393678577051] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[3--0.08475351107871792] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[4--0.9027038257291898] PASSED [ 34%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[5--0.4687499999999999] PASSED [ 35%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[6--0.43945312499999917] PASSED [ 35%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[7--0.38452148437500033] PASSED [ 36%]
+test_CutoffFunction.py::Test_df::test_nonzero_radius[8--0.32444000244141674] PASSED [ 36%]
+test_CutoffFunction.py::Test_df::test_nonfloat_argument PASSED [ 36%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[0] PASSED [ 37%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[1] PASSED [ 37%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[2] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[3] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[4] PASSED [ 38%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[5] PASSED [ 39%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[6] PASSED [ 39%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[7] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_boundaries[8] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[0-1.0-0.0] PASSED [ 40%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[1-0.1464466094067261--0.46280030605816297] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[2-0.00768915371206977--0.0374393678577051] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[3-0.01740635089776903--0.08475351107871792] PASSED [ 41%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[4-0.27645304662956416--0.9027038257291898] PASSED [ 42%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[5-0.1562499999999999--0.4687499999999999] PASSED [ 42%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[6-0.10351562500000003--0.43945312499999917] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[7-0.07055664062499914--0.38452148437500033] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonzero_radius[8-0.04892730712890944--0.32444000244141674] PASSED [ 43%]
+test_CutoffFunction.py::Test_fdf::test_nonfloat_argument PASSED [ 44%]
+test_ElementMap.py::Test___cinit__::test_skeleton_initialization PASSED [ 44%]
+test_ElementMap.py::Test___cinit__::test_empty_initialization PASSED [ 45%]
+test_ElementMap.py::Test_registerElements::test_nonstring_argument PASSED [ 45%]
+test_ElementMap.py::Test_registerElements::test_correct_elements_registered PASSED [ 45%]
+test_ElementMap.py::Test___getitem__::test_correct_element_index PASSED [ 46%]
+test_ElementMap.py::Test___getitem__::test_correct_element_symbol PASSED [ 46%]
+test_ElementMap.py::Test___getitem__::test_out_of_bounds_index PASSED [ 47%]
+test_ElementMap.py::Test___getitem__::test_unknown_symbol PASSED [ 47%]
+test_ElementMap.py::Test___getitem__::test_wrong_argument_type PASSED [ 47%]
+test_ElementMap.py::Test_size::test_correct_empty_size_returned PASSED [ 48%]
+test_ElementMap.py::Test_size::test_correct_size_returned PASSED [ 48%]
+test_ElementMap.py::Test_index::test_correct_element_index PASSED [ 49%]
+test_ElementMap.py::Test_index::test_wrong_argument_type PASSED [ 49%]
+test_ElementMap.py::Test_symbol::test_correct_element_index PASSED [ 49%]
+test_ElementMap.py::Test_symbol::test_wrong_argument_type PASSED [ 50%]
+test_ElementMap.py::Test_deregisterElements::test_empty_map PASSED [ 50%]
+test_ElementMap.py::Test_symbolFromAtomicNumber::test_some_elements PASSED [ 50%]
+test_ElementMap.py::Test_info::test_return_list PASSED [ 51%]
+test_Log.py::Test___cinit__::test_skeleton_initialization PASSED [ 51%]
+test_Log.py::Test___cinit__::test_empty_initialization PASSED [ 52%]
+test_Log.py::Test_addLogEntry::test_add_string_entry PASSED [ 52%]
+test_Log.py::Test_addLogEntry::test_add_nonstring_entry PASSED [ 52%]
+test_Log.py::Test_getLog::test_read_two_entries PASSED [ 53%]
+test_Log.py::Test_writeToStdout::test_correct_type PASSED [ 53%]
+test_Log.py::Test_writeToStdout::test_set_and_get PASSED [ 54%]
+test_Neighbor.py::Test___cinit__::test_skeleton_initialization PASSED [ 54%]
+test_Neighbor.py::Test___cinit__::test_empty_initialization PASSED [ 54%]
+test_Neighbor.py::Test_index::test_correct_type PASSED [ 55%]
+test_Neighbor.py::Test_index::test_set_and_get PASSED [ 55%]
+test_Neighbor.py::Test_tag::test_correct_type PASSED [ 56%]
+test_Neighbor.py::Test_tag::test_set_and_get PASSED [ 56%]
+test_Neighbor.py::Test_element::test_correct_type PASSED [ 56%]
+test_Neighbor.py::Test_element::test_set_and_get PASSED [ 57%]
+test_Neighbor.py::Test_d::test_correct_type PASSED [ 57%]
+test_Neighbor.py::Test_d::test_set_and_get PASSED [ 58%]
+test_Neighbor.py::Test_dr::test_correct_type PASSED [ 58%]
+test_Neighbor.py::Test_dr::test_set_and_get PASSED [ 58%]
+test_Neighbor.py::Test_dGdr::test_correct_type PASSED [ 59%]
+test_Neighbor.py::Test___eq__::test_not_equal PASSED [ 59%]
+test_Neighbor.py::Test___eq__::test_element_different PASSED [ 60%]
+test_Neighbor.py::Test___eq__::test_distance_different PASSED [ 60%]
+test_Neighbor.py::Test___eq__::test_equal PASSED [ 60%]
+test_Neighbor.py::Test___ne__::test_element_different PASSED [ 61%]
+test_Neighbor.py::Test___ne__::test_distance_different PASSED [ 61%]
+test_Neighbor.py::Test___ne__::test_equal PASSED [ 61%]
+test_Neighbor.py::Test___lt__::test_less_than PASSED [ 62%]
+test_Neighbor.py::Test___lt__::test_greater_than PASSED [ 62%]
+test_Neighbor.py::Test___lt__::test_equal_distance PASSED [ 63%]
+test_Neighbor.py::Test___lt__::test_equal_element PASSED [ 63%]
+test_Neighbor.py::Test___lt__::test_equal PASSED [ 63%]
+test_Neighbor.py::Test___gt__::test_less_than PASSED [ 64%]
+test_Neighbor.py::Test___gt__::test_greater_than PASSED [ 64%]
+test_Neighbor.py::Test___gt__::test_equal_distance PASSED [ 65%]
+test_Neighbor.py::Test___gt__::test_equal_element PASSED [ 65%]
+test_Neighbor.py::Test___gt__::test_equal PASSED [ 65%]
+test_Neighbor.py::Test___le__::test_less_than PASSED [ 66%]
+test_Neighbor.py::Test___le__::test_greater_than PASSED [ 66%]
+test_Neighbor.py::Test___le__::test_equal_distance PASSED [ 67%]
+test_Neighbor.py::Test___le__::test_equal_element PASSED [ 67%]
+test_Neighbor.py::Test___le__::test_equal PASSED [ 67%]
+test_Neighbor.py::Test___ge__::test_less_than PASSED [ 68%]
+test_Neighbor.py::Test___ge__::test_greater_than PASSED [ 68%]
+test_Neighbor.py::Test___ge__::test_equal_distance PASSED [ 69%]
+test_Neighbor.py::Test___ge__::test_equal_element PASSED [ 69%]
+test_Neighbor.py::Test___ge__::test_equal PASSED [ 69%]
+test_Settings.py::Test___cinit__::test_skeleton_initialization PASSED [ 70%]
+test_Settings.py::Test___cinit__::test_empty_initialization PASSED [ 70%]
+test_Settings.py::Test_loadFile::test_file_read[setups/Settings] PASSED [ 70%]
+test_Settings.py::Test___getitem__::test_existing_key[setups/Settings] PASSED [ 71%]
+test_Settings.py::Test___getitem__::test_nonexisting_key[setups/Settings] PASSED [ 71%]
+test_Settings.py::Test___getitem__::test_nonstring_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_existing_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_nonexisting_key[setups/Settings] PASSED [ 72%]
+test_Settings.py::Test_keywordExists::test_nonstring_key[setups/Settings] PASSED [ 73%]
+test_Settings.py::Test_getValue::test_existing_key[setups/Settings] PASSED [ 73%]
+test_Settings.py::Test_getValue::test_nonexisting_key[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_getValue::test_nonstring_key[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_info::test_return_list[setups/Settings] PASSED [ 74%]
+test_Settings.py::Test_getSettingsLines::test_return_list[setups/Settings] PASSED [ 75%]
+test_Vec3D.py::Test___cinit__::test_skeleton_initialization PASSED [ 75%]
+test_Vec3D.py::Test___cinit__::test_empty_initialization PASSED [ 76%]
+test_Vec3D.py::Test___cinit__::test_float_initialization PASSED [ 76%]
+test_Vec3D.py::Test___cinit__::test_Vec3D_initialization PASSED [ 76%]
+test_Vec3D.py::Test___getitem__::test_no_integer_index PASSED [ 77%]
+test_Vec3D.py::Test___getitem__::test_negative_index PASSED [ 77%]
+test_Vec3D.py::Test___getitem__::test_large_index PASSED [ 78%]
+test_Vec3D.py::Test___getitem__::test_components PASSED [ 78%]
+test_Vec3D.py::Test___setitem__::test_no_integer_index PASSED [ 78%]
+test_Vec3D.py::Test___setitem__::test_negative_index PASSED [ 79%]
+test_Vec3D.py::Test___setitem__::test_large_index PASSED [ 79%]
+test_Vec3D.py::Test___setitem__::test_wrong_type PASSED [ 80%]
+test_Vec3D.py::Test___setitem__::test_components PASSED [ 80%]
+test_Vec3D.py::Test___str__::test_return_string PASSED [ 80%]
+test_Vec3D.py::Test___str__::test_string_content PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_wrong_type PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_correct_addition PASSED [ 81%]
+test_Vec3D.py::Test___iadd__::test_added_Vec3D_unchanged PASSED [ 82%]
+test_Vec3D.py::Test___isub__::test_wrong_type PASSED [ 82%]
+test_Vec3D.py::Test___isub__::test_correct_subtraction PASSED [ 83%]
+test_Vec3D.py::Test___isub__::test_subtracted_Vec3D_unchanged PASSED [ 83%]
+test_Vec3D.py::Test___imul__::test_wrong_type PASSED [ 83%]
+test_Vec3D.py::Test___imul__::test_correct_float_multiplication PASSED [ 84%]
+test_Vec3D.py::Test___itruediv__::test_wrong_type PASSED [ 84%]
+test_Vec3D.py::Test___itruediv__::test_correct_float_division PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_wrong_type PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_scalar_product PASSED [ 85%]
+test_Vec3D.py::Test___mul__::test_right_float_multiplication PASSED [ 86%]
+test_Vec3D.py::Test___mul__::test_left_float_multiplication PASSED [ 86%]
+test_Vec3D.py::Test___eq__::test_wrong_type PASSED [ 87%]
+test_Vec3D.py::Test___eq__::test_equal_components PASSED [ 87%]
+test_Vec3D.py::Test___ne__::test_wrong_type PASSED [ 87%]
+test_Vec3D.py::Test___ne__::test_one_different_component PASSED [ 88%]
+test_Vec3D.py::Test_norm::test_correct_result PASSED [ 88%]
+test_Vec3D.py::Test_norm2::test_correct_result PASSED [ 89%]
+test_Vec3D.py::Test_normalize::test_correct_result PASSED [ 89%]
+test_Vec3D.py::Test_cross::test_wrong_type PASSED [ 89%]
+test_Vec3D.py::Test_cross::test_correct_return_type PASSED [ 90%]
+test_Vec3D.py::Test_cross::test_correct_result PASSED [ 90%]
+test_Vec3D.py::Test___add__::test_wrong_type PASSED [ 90%]
+test_Vec3D.py::Test___add__::test_correct_return_type PASSED [ 91%]
+test_Vec3D.py::Test___add__::test_new_object_returned PASSED [ 91%]
+test_Vec3D.py::Test___add__::test_correct_result PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_wrong_type PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_correct_return_type PASSED [ 92%]
+test_Vec3D.py::Test___sub__::test_new_object_returned PASSED [ 93%]
+test_Vec3D.py::Test___sub__::test_correct_result PASSED [ 93%]
+test_Vec3D.py::Test___neg__::test_correct_return_type PASSED [ 94%]
+test_Vec3D.py::Test___neg__::test_new_object_returned PASSED [ 94%]
+test_Vec3D.py::Test___neg__::test_correct_result PASSED [ 94%]
+test_Vec3D.py::Test___truediv__::test_wrong_type PASSED [ 95%]
+test_Vec3D.py::Test___truediv__::test_correct_return_type PASSED [ 95%]
+test_Vec3D.py::Test___truediv__::test_new_object_returned PASSED [ 96%]
+test_Vec3D.py::Test___truediv__::test_correct_result PASSED [ 96%]
+test_Vec3D.py::Test_r::test_getter_correct_type PASSED [ 96%]
+test_Vec3D.py::Test_r::test_getter_correct_size PASSED [ 97%]
+test_Vec3D.py::Test_r::test_getter_correct_content PASSED [ 97%]
+test_Vec3D.py::Test_r::test_setter_wrong_size PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_wrong_type PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_wrong_list_size PASSED [ 98%]
+test_Vec3D.py::Test_r::test_setter_correct_assignment PASSED [ 99%]
+test_Vec3D.py::Test_r::test_setter_correct_assignment_to_Vec3D PASSED [ 99%]
+test_Vec3D.py::Test_r::test_setter_index_assignment_not_possible PASSED [100%]
diff --git a/var/spack/repos/builtin/packages/n2p2/test/result-check.sh b/var/spack/repos/builtin/packages/n2p2/test/result-check.sh
new file mode 100755
index 0000000000..cc7acd780a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/n2p2/test/result-check.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+grep -e "No errors detected" "$1" > test-result.txt
+grep -e "PASSED" "$2" >> test-result.txt
+
+if cmp -s $3 test-result.txt; then
+ echo "Test of n2p2 PASSED !"
+else
+ echo "Test of n2p2 Failed !"
+fi
+
+rm $1 $2 test-result.txt