diff --git a/README.md b/README.md index 57830a42f2942c8a3d9329c8d56330e78a2cdf14..c8fe4972fe7cfd100379dd0052363205ff080fe6 100644 --- a/README.md +++ b/README.md @@ -6,14 +6,13 @@ This is the main repository of the [NOMAD](http://nomad-lab.eu) parser for from cp2kparser import CP2KParser import matplotlib.pyplot as mpl - # 1. Initialize a parser by giving a path to the CP2K output file and a list of - # default units - path = "path/to/main.file" + # 1. Initialize a parser with a set of default units. default_units = ["eV"] - parser = CP2KParser(path, default_units=default_units) + parser = CP2KParser(default_units=default_units) - # 2. Parse - results = parser.parse() + # 2. Parse a file + path = "path/to/main.file" + results = parser.parse(path) # 3. Query the results with using the id's created specifically for NOMAD. scf_energies = results["energy_total_scf_iteration"] @@ -22,7 +21,7 @@ This is the main repository of the [NOMAD](http://nomad-lab.eu) parser for ``` # Installation -The code is python>=2.7 and python>=3.4 compatible. First download and install +The code is python 2 and python 3 compatible. First download and install the nomadcore package: ```sh @@ -47,15 +46,9 @@ cd parser-cp2k pip install -e . ``` -# Advanced +# Notes +The parser is based on CP2K 2.6.2. -The parser is designed to support multiple versions of CP2K with a [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself) -approach: The initial parser class is based on CP2K 2.6.2, and other versions -will be subclassed from it. By sublassing, all the previous functionality will -be preserved, new functionality can be easily created, and old functionality -overridden only where necesssary. - -# Upload Folder Structure, File Naming and CP2K Settings The CP2K input setting [PRINT_LEVEL](https://manual.cp2k.org/trunk/CP2K_INPUT/GLOBAL.html#PRINT_LEVEL) controls the amount of details that are outputted during the calculation. The @@ -66,12 +59,6 @@ they are located very deep inside some folder structure or outside the folder where the output file is, the parser will not be able to locate them. For this reason it is recommended to keep the upload structure as flat as possible. -## Testing -The regression tests for this parser are located in -**/cp2k/parser/parser-cp2k/cp2kparser/regtest**. You can run the tests by -running the run_tests.py file in one of the version directories. - -## Notes for CP2K Developers Here is a list of features/fixes that would make the parsing of CP2K results easier: - The pdb trajectory output doesn't seem to conform to the actual standard as diff --git a/parser/parser-cp2k/cp2kparser/parser.py b/parser/parser-cp2k/cp2kparser/parser.py index 1e5d089ba93600525942831f252f01124f9437bd..74bf4b51e0d03eaf79ace82f9a438a5aeff568c7 100644 --- a/parser/parser-cp2k/cp2kparser/parser.py +++ b/parser/parser-cp2k/cp2kparser/parser.py @@ -5,20 +5,23 @@ import re import logging import importlib from nomadcore.baseclasses import ParserInterface + +# Needs to be imported in order for the importlib calls to work in python 2.7 +import cp2kparser.versions.cp2k262.singlepointparser + logger = logging.getLogger("nomad") -#=============================================================================== class CP2KParser(ParserInterface): """This class handles the initial setup before any parsing can happen. It determines which version of CP2K was used to generate the output and then sets up a correct main parser. - After the implementation has been setup, you can parse the files with + After the implementation has been setup, you can parse files with parse(). """ - def __init__(self, main_file, metainfo_to_keep=None, backend=None, default_units=None, metainfo_units=None, debug=False, log_level=logging.ERROR, store=True): - super(CP2KParser, self).__init__(main_file, metainfo_to_keep, backend, default_units, metainfo_units, debug, log_level, store) + def __init__(self, metainfo_to_keep=None, backend=None, default_units=None, metainfo_units=None, debug=False, log_level=logging.ERROR, store=True): + super(CP2KParser, self).__init__(metainfo_to_keep, backend, default_units, metainfo_units, debug, log_level, store) def setup_version(self): """Setups the version by looking at the output file and the version @@ -84,10 +87,11 @@ class CP2KParser(ParserInterface): Args: version_id: An integer representing the CP2K version. The version - number is originally a string the form '2.6.2', but here the numbers - are just concatenated into a single integer number 262. - run_type: A string that identifies the RUN_TYPE for the calculation. - All the possible run types can be found in the CP2K reference manual. + number is originally a string the form '2.6.2', but here the + numbers are just concatenated into a single integer number 262. + run_type: A string that identifies the RUN_TYPE for the + calculation. All the possible run types can be found in the + CP2K reference manual. Returns: A python class that should be instantiated later with the correct @@ -110,7 +114,10 @@ class CP2KParser(ParserInterface): try: parser = parser_map[run_type] except KeyError: - logger.exception("A parser corresponding to the run_type '{}' could not be found.".format(run_type)) + logger.exception( + "A parser corresponding to the run_type '{}' could not be found." + .format(run_type) + ) raise # Currently the version id is a pure integer, so it can directly be mapped @@ -118,20 +125,32 @@ class CP2KParser(ParserInterface): base = "cp2kparser.versions.cp2k{}.{}".format(version_id, parser.lower()) parser_module = None parser_class = None + try: parser_module = importlib.import_module(base) except ImportError: - logger.warning("Could not find a parser for version '{}' and run type '{}'. Trying to default to the base implementation for CP2K 2.6.2".format(version_id, run_type)) + logger.warning( + "Could not find a parser for version '{}' and run type '{}'. " + "Trying to default to the base implementation for CP2K 2.6.2" + .format(version_id, run_type) + ) base = "cp2kparser.versions.cp2k262.{}".format(parser.lower()) try: parser_module = importlib.import_module(base) except ImportError: - logger.exception("Tried to default to the CP2K 2.6.2 implementation but could not find the correct modules for run_type '{}'.".format(run_type)) + logger.exception( + "Tried to default to the CP2K 2.6.2 implementation but " + "could not find the correct modules for run_type '{}'." + .format(run_type) + ) raise try: parser_class = getattr(parser_module, "CP2K{}".format(parser)) except AttributeError: - logger.exception("A parser class '{}' could not be found in the module '[]'.".format(parser_class, parser_module)) + logger.exception( + "A parser class '{}' could not be found in the module '[]'." + .format(parser_class, parser_module) + ) raise self.main_parser = parser_class(self.parser_context.main_file, self.parser_context) diff --git a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py index b260685518ea9d50de3ecf4817dcad99c23c1c3e..aa2d6e5b579cb130cadccd32520d2bb2a3cab6c0 100644 --- a/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py +++ b/parser/parser-cp2k/cp2kparser/tools/xmlpreparser.py @@ -24,7 +24,6 @@ from cp2kparser.generic.inputparsing import Section, Keyword, DefaultKeyword, Se logger = logging -#=============================================================================== def generate_object_tree(xml_file, for_metainfo=False): xml_element = ET.parse(xml_file) @@ -48,7 +47,6 @@ def generate_object_tree(xml_file, for_metainfo=False): return object_tree -#=============================================================================== def recursive_tree_generation(xml_element, for_metainfo=False, name_stack=[], ignore=True): # Make new section object for the root @@ -199,7 +197,6 @@ def recursive_tree_generation(xml_element, for_metainfo=False, name_stack=[], ig return section -#=============================================================================== def generate_input_metainfos(object_tree): json_root = { @@ -222,7 +219,6 @@ def generate_input_metainfos(object_tree): f.write(json.dumps(json_root, indent=2, separators=(',', ': '))) -#=============================================================================== def generate_metainfo_recursively(obj, parent, container, name_stack): json = None @@ -245,7 +241,6 @@ def generate_metainfo_recursively(obj, parent, container, name_stack): container.append(json) -#=============================================================================== def generate_input_object_metainfo_json(child, parent, name_stack): path = ".".join(name_stack) # if path.startswith("."): @@ -283,7 +278,6 @@ def generate_input_object_metainfo_json(child, parent, name_stack): return json_obj -#=============================================================================== def generate_section_metainfo_json(child, parent, name_stack): path = ".".join(name_stack[:-1]) json_obj = {} @@ -307,7 +301,6 @@ def generate_section_metainfo_json(child, parent, name_stack): return json_obj -#=============================================================================== # Run main function by default if __name__ == "__main__": diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonparser.py index 68e847a38f44199cbf66c4de77d46c454d7afefb..5b2bd274e075a61f556895ec3a4df1605bd64cb8 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/commonparser.py @@ -12,7 +12,6 @@ from collections import defaultdict logger = logging.getLogger("nomad") -#=============================================================================== class CP2KCommonParser(CommonParser): """ This class is used to store and instantiate common parts of the diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py index 72f5f5b0be3940f4c8336713589a0b785717f85d..3c1399dd24340c79b7e8973f8d0743676709e845 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/geooptparser.py @@ -12,7 +12,6 @@ import logging logger = logging.getLogger("nomad") -#=============================================================================== class CP2KGeoOptParser(MainHierarchicalParser): """Used to parse the CP2K calculation with run types: -GEO_OPT/GEOMETRY_OPTIMIZATION diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py index f1ab04f4ad5b169b051061fc01ef1258bc4faf77..65275a074b17a934bc5ee3e9e3f44c50510a4246 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/inputparser.py @@ -11,7 +11,6 @@ from cp2kparser.generic.inputparsing import metainfo_data_prefix, metainfo_secti logger = logging.getLogger("nomad") -#=============================================================================== class CP2KInputParser(AbstractBaseParser): """Used to parse out a CP2K input file. diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py index c82a17f020f559518ec2a1c7ca1081ff5c74e92c..4e126fce426709b65a3ad61941ded86f0b3ed3a6 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/mdparser.py @@ -13,7 +13,6 @@ import logging logger = logging.getLogger("nomad") -#=============================================================================== class CP2KMDParser(MainHierarchicalParser): """Used to parse the CP2K calculation with run types: -MD diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointforceparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointforceparser.py index dae4286237ca2c58ed25729af014dc26fa4ee2dc..ba3b529e006756613a488d9f1b9d0c1583bc8061 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointforceparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointforceparser.py @@ -4,7 +4,6 @@ from nomadcore.baseclasses import AbstractBaseParser logger = logging.getLogger("nomad") -#=============================================================================== class CP2KSinglePointForceParser(AbstractBaseParser): """Used to parse out a force file printed out by a CP2K single point calculation. It is not exactly an ZYX file, so here we define separate diff --git a/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointparser.py b/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointparser.py index 9fcdf7e4d35df2534b62737223c06bba47a00918..001fc04c16f77680a2041478bc076e376133b7cd 100644 --- a/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointparser.py +++ b/parser/parser-cp2k/cp2kparser/versions/cp2k262/singlepointparser.py @@ -1,14 +1,13 @@ from __future__ import absolute_import from nomadcore.simple_parser import SimpleMatcher as SM from nomadcore.baseclasses import MainHierarchicalParser -from .singlepointforceparser import CP2KSinglePointForceParser +from cp2kparser.versions.cp2k262.singlepointforceparser import CP2KSinglePointForceParser from nomadcore.caching_backend import CachingLevel -from .commonparser import CP2KCommonParser +from cp2kparser.versions.cp2k262.commonparser import CP2KCommonParser import logging logger = logging.getLogger("nomad") -#=============================================================================== class CP2KSinglePointParser(MainHierarchicalParser): """The main parser class. Used to parse the CP2K calculation with run types: -ENERGY diff --git a/regtest/README.md b/regtest/README.md deleted file mode 100644 index 550be2b7a0711f971e5cc927234a6c4b44181aff..0000000000000000000000000000000000000000 --- a/regtest/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Unit tests -This directory contains unit tests to evaluate the correctness of the parser in -a systematic way. Ideally each parsed metainfo should have at least one unit -test, and if the resulting values are predetermined, the available values -should all be tested individually. Also certain scenarios that should produce a -parsing error should be tested. diff --git a/regtest/cp2k_2.6.2/callgraph.py b/regtest/cp2k_2.6.2/callgraph.py deleted file mode 100644 index 99a928908cd235ac018d83eb7eb05b102578695f..0000000000000000000000000000000000000000 --- a/regtest/cp2k_2.6.2/callgraph.py +++ /dev/null @@ -1,8 +0,0 @@ -from pycallgraph import PyCallGraph -from pycallgraph.output import GraphvizOutput -from cp2kparser import CP2KParser - -with PyCallGraph(output=GraphvizOutput()): - filepath = "/home/lauri/Dropbox/nomad-dev/nomad-lab-base/parsers/cp2k/test/unittests/cp2k_2.6.2/energy_force/unittest.out" - parser = CP2KParser(filepath) - parser.parse() diff --git a/regtest/cp2k_2.6.2/profiling.py b/regtest/cp2k_2.6.2/profiling.py deleted file mode 100644 index 1f7de9af56169e736fc435fd74ce01189eb8531d..0000000000000000000000000000000000000000 --- a/regtest/cp2k_2.6.2/profiling.py +++ /dev/null @@ -1,17 +0,0 @@ -import cProfile -import pstats -from run_tests import get_results - - -def profile_energy_force(): - """Used to profile the CPU usage in parsing RUN_TYPE ENERGY_FORCE. - """ - profile = cProfile.Profile() - profile.run('get_results("energy_force", "section_run")') - stats = pstats.Stats(profile) - stats.strip_dirs() - stats.sort_stats("cumulative") - stats.print_stats(30) - -if __name__ == "__main__": - profile_energy_force() diff --git a/regtest/cp2k_2.6.2/BASIS_SET b/regtests/cp2k_2.6.2/cp2k_2.6.2/BASIS_SET similarity index 100% rename from regtest/cp2k_2.6.2/BASIS_SET rename to regtests/cp2k_2.6.2/cp2k_2.6.2/BASIS_SET diff --git a/regtest/cp2k_2.6.2/GTH_POTENTIALS b/regtests/cp2k_2.6.2/cp2k_2.6.2/GTH_POTENTIALS similarity index 100% rename from regtest/cp2k_2.6.2/GTH_POTENTIALS rename to regtests/cp2k_2.6.2/cp2k_2.6.2/GTH_POTENTIALS diff --git a/regtest/cp2k_2.6.2/XC_functional/b3lyp/b3lyp.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/b3lyp/b3lyp.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/b3lyp/b3lyp.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/b3lyp/b3lyp.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/b3lyp/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/b3lyp/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/b3lyp/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/b3lyp/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/blyp/blyp.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/blyp/blyp.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/blyp/blyp.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/blyp/blyp.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/blyp/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/blyp/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/blyp/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/blyp/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/hcth120/hcth120.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/hcth120/hcth120.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/hcth120/hcth120.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/hcth120/hcth120.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/hcth120/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/hcth120/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/hcth120/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/hcth120/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/lda/lda.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/lda/lda.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/lda/lda.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/lda/lda.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/lda/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/lda/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/lda/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/lda/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/olyp/olyp.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/olyp/olyp.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/olyp/olyp.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/olyp/olyp.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/olyp/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/olyp/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/olyp/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/olyp/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/pade/pade.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pade/pade.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pade/pade.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pade/pade.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/pade/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pade/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pade/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pade/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/pbe/pbe.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe/pbe.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pbe/pbe.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe/pbe.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/pbe/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pbe/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe/unittest.out diff --git a/regtest/cp2k_2.6.2/XC_functional/pbe0/pbe0.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe0/pbe0.inp similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pbe0/pbe0.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe0/pbe0.inp diff --git a/regtest/cp2k_2.6.2/XC_functional/pbe0/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe0/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/XC_functional/pbe0/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/XC_functional/pbe0/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/default/default.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/default/default.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/default/default.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/default/default.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/default/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/default/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/default/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/default/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/none/none.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/none/none.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/none/none.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/none/none.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/none/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/none/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/none/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/none/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/x/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/x/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/x/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/x/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/x/x.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/x/x.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/x/x.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/x/x.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xy/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xy/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xy/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xy/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xy/xy.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xy/xy.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xy/xy.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xy/xy.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xyz/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xyz/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xyz/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xyz/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xyz/xyz.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xyz/xyz.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xyz/xyz.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xyz/xyz.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xz/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xz/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xz/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xz/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/xz/xz.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xz/xz.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/xz/xz.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/xz/xz.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/y/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/y/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/y/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/y/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/y/y.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/y/y.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/y/y.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/y/y.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/yz/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/yz/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/yz/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/yz/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/yz/yz.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/yz/yz.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/yz/yz.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/yz/yz.inp diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/z/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/z/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/z/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/z/unittest.out diff --git a/regtest/cp2k_2.6.2/configuration_periodic_dimensions/z/z.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/z/z.inp similarity index 100% rename from regtest/cp2k_2.6.2/configuration_periodic_dimensions/z/z.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/configuration_periodic_dimensions/z/z.inp diff --git a/regtest/cp2k_2.6.2/convergence/converged/Si_bulk8-nonbonded_nl_p0-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/Si_bulk8-nonbonded_nl_p0-1.out similarity index 100% rename from regtest/cp2k_2.6.2/convergence/converged/Si_bulk8-nonbonded_nl_p0-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/Si_bulk8-nonbonded_nl_p0-1.out diff --git a/regtest/cp2k_2.6.2/convergence/converged/converged.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/converged.inp similarity index 100% rename from regtest/cp2k_2.6.2/convergence/converged/converged.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/converged.inp diff --git a/regtest/cp2k_2.6.2/convergence/converged/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/convergence/converged/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/converged/unittest.out diff --git a/regtest/cp2k_2.6.2/convergence/non_converged/non_converged.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/non_converged/non_converged.inp similarity index 100% rename from regtest/cp2k_2.6.2/convergence/non_converged/non_converged.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/non_converged/non_converged.inp diff --git a/regtest/cp2k_2.6.2/convergence/non_converged/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/non_converged/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/convergence/non_converged/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/convergence/non_converged/unittest.out diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_no_input/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_no_input/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_no_input/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_no_input/unittest.out diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-BFGS.Hessian b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-BFGS.Hessian similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-BFGS.Hessian rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-BFGS.Hessian diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag.inp similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/H2O-rks-diag.inp diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/RESTART-rks-diag b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/RESTART-rks-diag similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/RESTART-rks-diag rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/RESTART-rks-diag diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/dft_plus_u/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/dft_plus_u/unittest.out diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/mp2/H2O-01.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/mp2/H2O-01.inp similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/mp2/H2O-01.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/mp2/H2O-01.inp diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/mp2/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/mp2/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/mp2/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/mp2/unittest.out diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/rpa/H2O_gas.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/H2O_gas.xyz similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/rpa/H2O_gas.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/H2O_gas.xyz diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/rpa/RI_RPA_H2O.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/RI_RPA_H2O.inp similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/rpa/RI_RPA_H2O.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/RI_RPA_H2O.inp diff --git a/regtest/cp2k_2.6.2/electronic_structure_method/rpa/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/electronic_structure_method/rpa/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/electronic_structure_method/rpa/unittest.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p0-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p0-1.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p0-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p0-1.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p1-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p1-1.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p1-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p1-1.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p2-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p2-1.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p2-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p2-1.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p3-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p3-1.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p3-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8-nonbonded_nl_p3-1.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p1.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p1.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p2.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p2.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p2.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p2.out diff --git a/regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p3.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p3.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p3.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/Si_bulk8_localLog_p3.out diff --git a/regtest/cp2k_2.6.2/energy_force/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/energy_force/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/energy_force/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/energy_force/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/invalid_file/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/invalid_file/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/invalid_file/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/invalid_file/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/invalid_run_type/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/invalid_run_type/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/invalid_run_type/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/invalid_run_type/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_keyword/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_keyword/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_keyword/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_keyword/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_keyword/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_keyword/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_keyword/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_keyword/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_section/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_section/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_section/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_section/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_section_parameter/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section_parameter/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_section_parameter/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section_parameter/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/errors/unknown_input_section_parameter/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section_parameter/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_input_section_parameter/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_input_section_parameter/unittest.out diff --git a/regtest/cp2k_2.6.2/errors/unknown_version/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_version/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_version/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_version/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/errors/unknown_version/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_version/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/errors/unknown_version/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/errors/unknown_version/unittest.out diff --git a/regtest/cp2k_2.6.2/force_file/single_point/Si_bulk8-forces-1_0.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/Si_bulk8-forces-1_0.xyz similarity index 100% rename from regtest/cp2k_2.6.2/force_file/single_point/Si_bulk8-forces-1_0.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/Si_bulk8-forces-1_0.xyz diff --git a/regtest/cp2k_2.6.2/force_file/single_point/single_point.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/single_point.inp similarity index 100% rename from regtest/cp2k_2.6.2/force_file/single_point/single_point.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/single_point.inp diff --git a/regtest/cp2k_2.6.2/force_file/single_point/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/force_file/single_point/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/force_file/single_point/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/bfgs/H2O-BFGS.Hessian b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/H2O-BFGS.Hessian similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/bfgs/H2O-BFGS.Hessian rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/H2O-BFGS.Hessian diff --git a/regtest/cp2k_2.6.2/geo_opt/bfgs/H2O-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/H2O-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/bfgs/H2O-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/H2O-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/bfgs/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/bfgs/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/bfgs/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/bfgs/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/bfgs/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/cg/H2O-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/H2O-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/cg/H2O-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/H2O-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/cg/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/cg/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/cg/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/cg/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/cg/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/each/H2O-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/H2O-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/each/H2O-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/H2O-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/each/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/each/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/each/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/each/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/each/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/filename/H2O-customname-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/H2O-customname-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/filename/H2O-customname-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/H2O-customname-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/filename/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/filename/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/filename/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/filename/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/filename/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/H2O-geometry-pos-1.dcd b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/H2O-geometry-pos-1.dcd similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/H2O-geometry-pos-1.dcd rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/H2O-geometry-pos-1.dcd diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/dcd/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/dcd/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/H2O-geometry-pos-1.pdb b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/H2O-geometry-pos-1.pdb similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/H2O-geometry-pos-1.pdb rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/H2O-geometry-pos-1.pdb diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/pdb/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/pdb/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/H2O-geometry-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/H2O-geometry-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/H2O-geometry-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/H2O-geometry-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/geometry_formats/xyz/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/geometry_formats/xyz/unittest.out diff --git a/regtest/cp2k_2.6.2/geo_opt/lbfgs/H2O-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/H2O-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/lbfgs/H2O-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/H2O-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/geo_opt/lbfgs/geo_opt.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/geo_opt.inp similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/lbfgs/geo_opt.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/geo_opt.inp diff --git a/regtest/cp2k_2.6.2/geo_opt/lbfgs/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/geo_opt/lbfgs/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/geo_opt/lbfgs/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/comments/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/comments/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/comments/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/comments/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/comments/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/comments/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/comments/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/comments/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/include/global.inc b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/global.inc similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/include/global.inc rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/global.inc diff --git a/regtest/cp2k_2.6.2/input_preprocessing/include/main.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/main.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/include/main.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/main.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/include/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/include/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/include/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/tabseparator/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/tabseparator/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/tabseparator/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/tabseparator/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/tabseparator/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/tabseparator/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/tabseparator/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/tabseparator/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable/main.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable/main.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable/main.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable/main.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/global.inc b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/global.inc similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/global.inc rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/global.inc diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/main.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/main.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/main.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/main.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multifile/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multifile/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/PROJECT-nonbonded_nl_p0-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/PROJECT-nonbonded_nl_p0-1.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/PROJECT-nonbonded_nl_p0-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/PROJECT-nonbonded_nl_p0-1.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/main.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/main.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/main.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/main.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_multiple/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_multiple/unittest.out diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_redifinition/main.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_redifinition/main.inp similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_redifinition/main.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_redifinition/main.inp diff --git a/regtest/cp2k_2.6.2/input_preprocessing/variable_redifinition/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_redifinition/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/input_preprocessing/variable_redifinition/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/input_preprocessing/variable_redifinition/unittest.out diff --git a/regtest/cp2k_2.6.2/kinds/Si_bulk8-nonbonded_nl_p0-1.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/Si_bulk8-nonbonded_nl_p0-1.out similarity index 100% rename from regtest/cp2k_2.6.2/kinds/Si_bulk8-nonbonded_nl_p0-1.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/Si_bulk8-nonbonded_nl_p0-1.out diff --git a/regtest/cp2k_2.6.2/kinds/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/kinds/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/kinds/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/kinds/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/kinds/unittest.out diff --git a/regtest/cp2k_2.6.2/md/npt/H2O-md-1.cell b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-1.cell similarity index 100% rename from regtest/cp2k_2.6.2/md/npt/H2O-md-1.cell rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-1.cell diff --git a/regtest/cp2k_2.6.2/md/npt/H2O-md-1.ener b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-1.ener similarity index 100% rename from regtest/cp2k_2.6.2/md/npt/H2O-md-1.ener rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-1.ener diff --git a/regtest/cp2k_2.6.2/md/npt/H2O-md-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/md/npt/H2O-md-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/md/npt/H2O-md.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md.inp similarity index 100% rename from regtest/cp2k_2.6.2/md/npt/H2O-md.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/H2O-md.inp diff --git a/regtest/cp2k_2.6.2/md/npt/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/md/npt/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/npt/unittest.out diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-1.cell b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.cell similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-1.cell rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.cell diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-1.ener b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.ener similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-1.ener rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.ener diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-1.stress b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.stress similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-1.stress rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-1.stress diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-frc-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-frc-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-frc-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-frc-1.xyz diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32-vel-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-vel-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32-vel-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32-vel-1.xyz diff --git a/regtest/cp2k_2.6.2/md/nve/H2O-32.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32.inp similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/H2O-32.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/H2O-32.inp diff --git a/regtest/cp2k_2.6.2/md/nve/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/md/nve/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nve/unittest.out diff --git a/regtest/cp2k_2.6.2/md/nvt/H2O-md-1.ener b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md-1.ener similarity index 100% rename from regtest/cp2k_2.6.2/md/nvt/H2O-md-1.ener rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md-1.ener diff --git a/regtest/cp2k_2.6.2/md/nvt/H2O-md-pos-1.xyz b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md-pos-1.xyz similarity index 100% rename from regtest/cp2k_2.6.2/md/nvt/H2O-md-pos-1.xyz rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md-pos-1.xyz diff --git a/regtest/cp2k_2.6.2/md/nvt/H2O-md.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md.inp similarity index 100% rename from regtest/cp2k_2.6.2/md/nvt/H2O-md.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/H2O-md.inp diff --git a/regtest/cp2k_2.6.2/md/nvt/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/md/nvt/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/md/nvt/unittest.out diff --git a/regtest/cp2k_2.6.2/sic/ad/ad.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/ad/ad.inp similarity index 100% rename from regtest/cp2k_2.6.2/sic/ad/ad.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/ad/ad.inp diff --git a/regtest/cp2k_2.6.2/sic/ad/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/ad/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/sic/ad/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/ad/unittest.out diff --git a/regtest/cp2k_2.6.2/sic/explicit_orbitals/explicit_orbitals.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/explicit_orbitals/explicit_orbitals.inp similarity index 100% rename from regtest/cp2k_2.6.2/sic/explicit_orbitals/explicit_orbitals.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/explicit_orbitals/explicit_orbitals.inp diff --git a/regtest/cp2k_2.6.2/sic/explicit_orbitals/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/explicit_orbitals/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/sic/explicit_orbitals/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/explicit_orbitals/unittest.out diff --git a/regtest/cp2k_2.6.2/sic/mauri_spz/mauri_spz.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_spz/mauri_spz.inp similarity index 100% rename from regtest/cp2k_2.6.2/sic/mauri_spz/mauri_spz.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_spz/mauri_spz.inp diff --git a/regtest/cp2k_2.6.2/sic/mauri_spz/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_spz/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/sic/mauri_spz/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_spz/unittest.out diff --git a/regtest/cp2k_2.6.2/sic/mauri_us/mauri_us.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_us/mauri_us.inp similarity index 100% rename from regtest/cp2k_2.6.2/sic/mauri_us/mauri_us.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_us/mauri_us.inp diff --git a/regtest/cp2k_2.6.2/sic/mauri_us/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_us/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/sic/mauri_us/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/mauri_us/unittest.out diff --git a/regtest/cp2k_2.6.2/sic/no/no.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/no/no.inp similarity index 100% rename from regtest/cp2k_2.6.2/sic/no/no.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/no/no.inp diff --git a/regtest/cp2k_2.6.2/sic/no/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/sic/no/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/sic/no/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/sic/no/unittest.out diff --git a/regtest/cp2k_2.6.2/stress_tensor/analytical/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/analytical/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/analytical/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/analytical/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/stress_tensor/analytical/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/analytical/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/analytical/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/analytical/unittest.out diff --git a/regtest/cp2k_2.6.2/stress_tensor/diagonal_analytical/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_analytical/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/diagonal_analytical/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_analytical/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/stress_tensor/diagonal_analytical/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_analytical/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/diagonal_analytical/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_analytical/unittest.out diff --git a/regtest/cp2k_2.6.2/stress_tensor/diagonal_numerical/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_numerical/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/diagonal_numerical/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_numerical/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/stress_tensor/diagonal_numerical/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_numerical/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/diagonal_numerical/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/diagonal_numerical/unittest.out diff --git a/regtest/cp2k_2.6.2/stress_tensor/none/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/none/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/none/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/none/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/stress_tensor/none/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/none/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/none/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/none/unittest.out diff --git a/regtest/cp2k_2.6.2/stress_tensor/numerical/si_bulk8.inp b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/numerical/si_bulk8.inp similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/numerical/si_bulk8.inp rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/numerical/si_bulk8.inp diff --git a/regtest/cp2k_2.6.2/stress_tensor/numerical/unittest.out b/regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/numerical/unittest.out similarity index 100% rename from regtest/cp2k_2.6.2/stress_tensor/numerical/unittest.out rename to regtests/cp2k_2.6.2/cp2k_2.6.2/stress_tensor/numerical/unittest.out diff --git a/regtest/cp2k_2.6.2/run_tests.py b/regtests/cp2k_2.6.2/regtests.py similarity index 83% rename from regtest/cp2k_2.6.2/run_tests.py rename to regtests/cp2k_2.6.2/regtests.py index b75e17da4d12bd0a14aa4f6797c62100c4fe234a..5da0635207c5e3a3ff6d06d8208760d6a1389945 100644 --- a/regtest/cp2k_2.6.2/run_tests.py +++ b/regtests/cp2k_2.6.2/regtests.py @@ -1,15 +1,3 @@ -""" -This is a module for unit testing the CP2K parser. The unit tests are run with -a custom backend that outputs the results directly into native python object for -easier and faster analysis. - -Each property that has an enumerable list of different possible options is -assigned a new test class, that should ideally test through all the options. - -The properties that can have any value imaginable will be tested only for one -specific case inside a test class that is designed for a certain type of run -(MD, optimization, QM/MM, etc.) -""" import os import unittest import logging @@ -18,65 +6,75 @@ from cp2kparser import CP2KParser from nomadcore.unit_conversion.unit_conversion import convert_unit -#=============================================================================== -def get_results(folder, metainfo_to_keep=None): - """Get the given result from the calculation in the given folder by using - the Analyzer in the nomadtoolkit package. Tries to optimize the parsing by - giving the metainfo_to_keep argument. +def get_result(folder, metaname=None): + """Get the results from the calculation in the given folder. By default goes through different Args: folder: The folder relative to the directory of this script where the parsed calculation resides. - metaname: The quantity to extract. + metaname(str): Optional quantity to return. If not specified, returns + the full dictionary of results. """ dirname = os.path.dirname(__file__) - filename = os.path.join(dirname, folder, "unittest.out") + filename = os.path.join("cp2k_{}".format(VERSION), dirname, folder, "unittest.out") parser = CP2KParser(filename, None, debug=True, log_level=logging.CRITICAL) results = parser.parse() - return results - -#=============================================================================== -def get_result(folder, metaname, optimize=True): - if optimize: - results = get_results(folder, None) + if metaname is None: + return results else: - results = get_results(folder) - result = results[metaname] - return result + return results[metaname] -#=============================================================================== class TestErrors(unittest.TestCase): - """Test misc. error stuations which may occur during the parsing. + """Test error situations which may occur during the parsing. """ def test_no_file(self): - self.assertRaises(IOError, get_result, "errors/no_file", "XC_functional") + """File is not no present. + """ + with self.assertRaises(IOError): + get_result("errors/no_file", "XC_functional") def test_invalid_file(self): - self.assertRaises(RuntimeError, get_result, "errors/invalid_file", "XC_functional") + """Main file is invalid. + """ + with self.assertRaises(RuntimeError): + get_result("errors/invalid_file", "XC_functional") def test_invalid_run_type(self): - self.assertRaises(KeyError, get_result, "errors/invalid_run_type", "XC_functional") + """Unrecognized run type. + """ + with self.assertRaises(KeyError): + get_result("errors/invalid_run_type", "XC_functional") + +class TestUnknownInput(unittest.TestCase): + """Tests for cases where unknown information is encountered in the parsing. + """ def test_unknown_version(self): + """Test how a new version is handled. + """ get_result("errors/unknown_version", "XC_functional") def test_unknown_input_keyword(self): + """Test how an unknown input keyword is handled. + """ get_result("errors/unknown_input_keyword", "XC_functional") def test_unknown_input_section(self): + """Test unknown input file section. + """ get_result("errors/unknown_input_section", "XC_functional") def test_unknown_input_section_parameter(self): + """ + """ get_result("errors/unknown_input_section_parameter", "XC_functional") -#=============================================================================== class TestXCFunctional(unittest.TestCase): """Tests that the XC functionals can be properly parsed. """ - def test_pade(self): xc = get_result("XC_functional/pade", "XC_functional") self.assertEqual(xc, "1*LDA_XC_TETER93") @@ -110,12 +108,10 @@ class TestXCFunctional(unittest.TestCase): self.assertEqual(xc, "1*GGA_C_PBE+1*GGA_X_PBE") -#=============================================================================== class TestSCFConvergence(unittest.TestCase): """Tests whether the convergence status and number of SCF step can be parsed correctly. """ - def test_converged(self): result = get_result("convergence/converged", "single_configuration_calculation_converged") self.assertTrue(result) @@ -125,12 +121,10 @@ class TestSCFConvergence(unittest.TestCase): self.assertFalse(result) -#=============================================================================== class TestForceFiles(unittest.TestCase): """Tests that different force files that can be output, can actually be found and parsed. """ - def test_single_point(self): result = get_result("force_file/single_point", "atom_forces") @@ -150,11 +144,9 @@ class TestForceFiles(unittest.TestCase): self.assertTrue(np.array_equal(result, expected_result)) -#=============================================================================== class TestSelfInteractionCorrectionMethod(unittest.TestCase): """Tests that the self-interaction correction can be properly parsed. """ - def test_no(self): sic = get_result("sic/no", "self_interaction_correction_method") self.assertEqual(sic, "") @@ -176,89 +168,86 @@ class TestSelfInteractionCorrectionMethod(unittest.TestCase): self.assertEqual(sic, "SIC_MAURI_US") -#=============================================================================== class TestStressTensorMethods(unittest.TestCase): """Tests that the stress tensor can be properly parsed for different calculation methods. """ def test_none(self): - get_results("stress_tensor/none", "section_stress_tensor") + get_result("stress_tensor/none", "section_stress_tensor") def test_analytical(self): - results = get_results("stress_tensor/analytical", ["stress_tensor_method", "stress_tensor"]) + results = get_result("stress_tensor/analytical") method = results["stress_tensor_method"] results["stress_tensor"] self.assertEqual(method, "Analytical") def test_numerical(self): - results = get_results("stress_tensor/numerical", ["stress_tensor_method", "stress_tensor"]) + results = get_result("stress_tensor/numerical") method = results["stress_tensor_method"] results["stress_tensor"] self.assertEqual(method, "Numerical") def test_diagonal_analytical(self): - results = get_results("stress_tensor/diagonal_analytical", ["stress_tensor_method", "stress_tensor"]) + results = get_result("stress_tensor/diagonal_analytical") method = results["stress_tensor_method"] results["stress_tensor"] self.assertEqual(method, "Diagonal analytical") def test_diagonal_numerical(self): - results = get_results("stress_tensor/diagonal_numerical", ["stress_tensor_method", "stress_tensor"]) + results = get_result("stress_tensor/diagonal_numerical") method = results["stress_tensor_method"] results["stress_tensor"] self.assertEqual(method, "Diagonal numerical") -#=============================================================================== class TestConfigurationPeriodicDimensions(unittest.TestCase): """Tests that the self-interaction correction can be properly parsed. """ + folder = "configuration_periodic_dimensions/" def test_default(self): - result = get_result("configuration_periodic_dimensions/default", "configuration_periodic_dimensions") + result = get_result(self.folder+"default", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((True, True, True)))) def test_none(self): - result = get_result("configuration_periodic_dimensions/none", "configuration_periodic_dimensions") + result = get_result(self.folder+"none", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((False, False, False)))) def test_x(self): - result = get_result("configuration_periodic_dimensions/x", "configuration_periodic_dimensions") + result = get_result(self.folder+"x", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((True, False, False)))) def test_y(self): - result = get_result("configuration_periodic_dimensions/y", "configuration_periodic_dimensions") + result = get_result(self.folder+"y", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((False, True, False)))) def test_z(self): - result = get_result("configuration_periodic_dimensions/z", "configuration_periodic_dimensions") + result = get_result(self.folder+"z", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((False, False, True)))) def test_xy(self): - result = get_result("configuration_periodic_dimensions/xy", "configuration_periodic_dimensions") + result = get_result(self.folder+"xy", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((True, True, False)))) def test_xyz(self): - result = get_result("configuration_periodic_dimensions/xyz", "configuration_periodic_dimensions") + result = get_result(self.folder+"xyz", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((True, True, True)))) def test_xz(self): - result = get_result("configuration_periodic_dimensions/xz", "configuration_periodic_dimensions") + result = get_result(self.folder+"xz", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((True, False, True)))) def test_yz(self): - result = get_result("configuration_periodic_dimensions/yz", "configuration_periodic_dimensions") + result = get_result(self.folder+"yz", "configuration_periodic_dimensions") self.assertTrue(np.array_equal(result, np.array((False, True, True)))) -#=============================================================================== class TestEnergyForce(unittest.TestCase): """Tests for a CP2K calculation with RUN_TYPE ENERGY_FORCE. """ - @classmethod def setUpClass(cls): - cls.results = get_results("energy_force", "section_run") + cls.results = get_result("energy_force") # cls.results.print_summary() def test_energy_total_scf_iteration(self): @@ -482,36 +471,37 @@ class TestEnergyForce(unittest.TestCase): self.assertEqual(result, "gaussians") -#=============================================================================== class TestPreprocessor(unittest.TestCase): - + """Tests that the parser can read input files with preprocessor + declarations, such as variables. + """ def test_include(self): - result = get_result("input_preprocessing/include", "x_cp2k_input_GLOBAL.PRINT_LEVEL", optimize=False) + result = get_result("input_preprocessing/include", "x_cp2k_input_GLOBAL.PRINT_LEVEL") self.assertEqual(result, "LOW") def test_variable(self): - result = get_result("input_preprocessing/variable", "x_cp2k_input_GLOBAL.PROJECT_NAME", optimize=False) + result = get_result("input_preprocessing/variable", "x_cp2k_input_GLOBAL.PROJECT_NAME") self.assertEqual(result, "variable_test") def test_variable_multiple(self): - result = get_result("input_preprocessing/variable_multiple", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF", optimize=False) + result = get_result("input_preprocessing/variable_multiple", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF") self.assertEqual(result, "50") def test_comments(self): - result = get_result("input_preprocessing/comments", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF", optimize=False) + result = get_result("input_preprocessing/comments", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF") self.assertEqual(result, "120") def test_tabseparator(self): - result = get_result("input_preprocessing/tabseparator", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF", optimize=False) + result = get_result("input_preprocessing/tabseparator", "x_cp2k_input_FORCE_EVAL.DFT.MGRID.CUTOFF") self.assertEqual(result, "120") -#=============================================================================== class TestGeoOpt(unittest.TestCase): - + """Tests that geometry optimizations are correctly parsed. + """ @classmethod def setUpClass(cls): - cls.results = get_results("geo_opt/cg", "section_run") + cls.results = get_result("geo_opt/cg") def test_geometry_optimization_converged(self): result = self.results["geometry_optimization_converged"] @@ -595,12 +585,12 @@ class TestGeoOpt(unittest.TestCase): self.assertTrue(np.array_equal(result_end, expected_end)) -# =============================================================================== class TestGeoOptTrajFormats(unittest.TestCase): - + """Different trajectory formats in geometry optimization. + """ def test_xyz(self): - result = get_result("geo_opt/geometry_formats/xyz", "atom_positions", optimize=True) + result = get_result("geo_opt/geometry_formats/xyz", "atom_positions") expected_start = convert_unit( np.array([ [12.2353220000, 1.3766420000, 10.8698800000], @@ -623,7 +613,7 @@ class TestGeoOptTrajFormats(unittest.TestCase): self.assertTrue(np.array_equal(result_end, expected_end)) def test_pdb(self): - result = get_result("geo_opt/geometry_formats/pdb", "atom_positions", optimize=True) + result = get_result("geo_opt/geometry_formats/pdb", "atom_positions") expected_start = convert_unit( np.array([ [12.235, 1.377, 10.870], @@ -646,14 +636,14 @@ class TestGeoOptTrajFormats(unittest.TestCase): self.assertTrue(np.array_equal(result_end, expected_end)) def test_dcd(self): - result = get_result("geo_opt/geometry_formats/dcd", "atom_positions", optimize=True) + result = get_result("geo_opt/geometry_formats/dcd", "atom_positions") frames = result.shape[0] self.assertEqual(frames, 7) -#=============================================================================== class TestGeoOptOptimizers(unittest.TestCase): - + """Different optimization methods in gemoetry optimization. + """ def test_bfgs(self): result = get_result("geo_opt/bfgs", "geometry_optimization_method") self.assertEqual(result, "bfgs") @@ -663,14 +653,15 @@ class TestGeoOptOptimizers(unittest.TestCase): self.assertEqual(result, "bfgs") -#=============================================================================== class TestGeoOptTrajectory(unittest.TestCase): - + """Tests that the print settings for geometry optimization are handled + correctly. + """ def test_each_and_add_last(self): """Test that the EACH and ADD_LAST settings affect the parsing correctly. """ - results = get_results("geo_opt/each") + results = get_result("geo_opt/each") single_conf = results["section_single_configuration_calculation"] systems = results["section_system"] @@ -730,12 +721,12 @@ class TestGeoOptTrajectory(unittest.TestCase): i_conf += 1 -#=============================================================================== class TestMD(unittest.TestCase): - + """Molecular dynamics tests. + """ @classmethod def setUpClass(cls): - cls.results = get_results("md/nve", "section_run") + cls.results = get_result("md/nve") cls.temp = convert_unit( np.array([ 300.000000000, @@ -943,9 +934,9 @@ class TestMD(unittest.TestCase): self.assertTrue(np.array_equal(result, expected_result)) -#=============================================================================== class TestMDEnsembles(unittest.TestCase): - + """Different ensembles in MD. + """ @classmethod def setUpClass(cls): cls.pressure = convert_unit( @@ -966,12 +957,12 @@ class TestMDEnsembles(unittest.TestCase): ) def test_nvt(self): - results = get_results("md/nvt", "section_run") + results = get_result("md/nvt") ensemble = results["ensemble_type"] self.assertEqual(ensemble, "NVT") def test_npt(self): - results = get_results("md/npt", "section_run") + results = get_result("md/npt") ensemble = results["ensemble_type"] self.assertEqual(ensemble, "NPT") @@ -1022,46 +1013,50 @@ class TestMDEnsembles(unittest.TestCase): self.assertTrue(np.array_equal(expected_cell_end, simulation_cell[-1, :, :])) -#=============================================================================== class TestElectronicStructureMethod(unittest.TestCase): - + """Tests that different methods are recognized correctly. + """ def test_mp2(self): - results = get_results("electronic_structure_method/mp2", "section_run") + results = get_result("electronic_structure_method/mp2") result = results["electronic_structure_method"] self.assertEqual(result, "MP2") def test_dft_plus_u(self): - results = get_results("electronic_structure_method/dft_plus_u", "section_run") + results = get_result("electronic_structure_method/dft_plus_u") result = results["electronic_structure_method"] self.assertEqual(result, "DFT+U") def test_rpa(self): - results = get_results("electronic_structure_method/rpa", "section_run") + results = get_result("electronic_structure_method/rpa") result = results["electronic_structure_method"] self.assertEqual(result, "RPA") -#=============================================================================== if __name__ == '__main__': + logger = logging.getLogger("cp2kparser") logger.setLevel(logging.ERROR) - suites = [] - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestErrors)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestXCFunctional)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestEnergyForce)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestStressTensorMethods)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSelfInteractionCorrectionMethod)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestConfigurationPeriodicDimensions)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSCFConvergence)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestForceFiles)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestPreprocessor)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOpt)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajFormats)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptOptimizers)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajectory)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestMD)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestMDEnsembles)) - suites.append(unittest.TestLoader().loadTestsFromTestCase(TestElectronicStructureMethod)) - alltests = unittest.TestSuite(suites) - unittest.TextTestRunner(verbosity=0).run(alltests) + VERSIONS = ["2.6.2"] + + for VERSION in VERSIONS: + suites = [] + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestErrors)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestUnknownInput)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestXCFunctional)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestEnergyForce)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestStressTensorMethods)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSelfInteractionCorrectionMethod)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestConfigurationPeriodicDimensions)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestSCFConvergence)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestForceFiles)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestPreprocessor)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOpt)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajFormats)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptOptimizers)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestGeoOptTrajectory)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestMD)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestMDEnsembles)) + suites.append(unittest.TestLoader().loadTestsFromTestCase(TestElectronicStructureMethod)) + alltests = unittest.TestSuite(suites) + unittest.TextTestRunner(verbosity=0).run(alltests)