IODA
test-layoutodb.cpp
Go to the documentation of this file.
1 /*
2  * (C) Crown Copyright 2021 Met Office
3  *
4  * This software is licensed under the terms of the Apache Licence Version 2.0
5  * which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6  */
7 
8 #include "ioda/testconfig.h"
9 
10 #include "ioda/Exception.h"
11 
12 // This header is internal to ioda. It is not callable by end-users outside of the
13 // testing environment.
15 
16 #include <string>
17 #include <typeindex>
18 
19 #include "eckit/testing/Test.h"
20 
21 using namespace eckit::testing;
22 
23 namespace ioda {
24 namespace test {
25 
26 CASE("Concatenation mapping file; error checks of unit conversion methods") {
27  std::string yamlMappingFile
28  = std::string(IODA_ENGINES_TEST_SOURCE_DIR) + "/layouts/odb_concat_name_map.yaml";
29  ioda::detail::DataLayoutPolicy_ObsGroup_ODB dataLayoutPolicy(yamlMappingFile);
30  //existent variable in mapping file
31  EXPECT(dataLayoutPolicy.isComplementary("firstPart"));
32  EXPECT(dataLayoutPolicy.isComplementary("secondPart"));
33  EXPECT(dataLayoutPolicy.isComplementary("thirdPart"));
34  EXPECT_EQUAL(dataLayoutPolicy.getComplementaryPosition("firstPart"), 0);
35  EXPECT_EQUAL(dataLayoutPolicy.getComplementaryPosition("secondPart"), 1);
36  EXPECT_EQUAL(dataLayoutPolicy.getComplementaryPosition("thirdPart"), 2);
37  EXPECT_EQUAL(dataLayoutPolicy.getInputsNeeded("firstPart"), 3);
38  EXPECT_EQUAL(dataLayoutPolicy.getInputsNeeded("secondPart"), 3);
39  EXPECT_EQUAL(dataLayoutPolicy.getInputsNeeded("thirdPart"), 3);
40  EXPECT(dataLayoutPolicy.getMergeMethod("firstPart") ==
42  EXPECT(dataLayoutPolicy.getMergeMethod("secondPart") ==
44  EXPECT(dataLayoutPolicy.getMergeMethod("thirdPart") ==
46  EXPECT_EQUAL(dataLayoutPolicy.getOutputNameFromComponent("firstPart"),
47  std::string("combined"));
48  EXPECT_EQUAL(dataLayoutPolicy.getOutputNameFromComponent("firstPart"),
49  dataLayoutPolicy.getOutputNameFromComponent("secondPart"));
50  EXPECT_EQUAL(dataLayoutPolicy.getOutputNameFromComponent("firstPart"),
51  dataLayoutPolicy.getOutputNameFromComponent("thirdPart"));
52  EXPECT(dataLayoutPolicy.getOutputVariableDataType("firstPart") ==
53  std::type_index(typeid(std::string)));
54  EXPECT(dataLayoutPolicy.getOutputVariableDataType("firstPart") ==
55  dataLayoutPolicy.getOutputVariableDataType("secondPart"));
56  EXPECT(dataLayoutPolicy.getOutputVariableDataType("firstPart") ==
57  dataLayoutPolicy.getOutputVariableDataType("thirdPart"));
58  EXPECT_NOT(dataLayoutPolicy.isComplementary("notInMapping"));
59  EXPECT_THROWS(dataLayoutPolicy.getComplementaryPosition("notInMapping"));
60  EXPECT_THROWS(dataLayoutPolicy.getInputsNeeded("notInMapping"));
61  EXPECT_THROWS(dataLayoutPolicy.getMergeMethod("notInMapping"));
62  EXPECT_THROWS(dataLayoutPolicy.getOutputNameFromComponent("notInMapping"));
63  EXPECT_THROWS(dataLayoutPolicy.getOutputVariableDataType("notInMapping"));
64  // unit conversion methods
65  EXPECT_NOT(dataLayoutPolicy.isMapped("notInMapping"));
66  EXPECT_THROWS(dataLayoutPolicy.getUnit("notInMapping"));
67 }
68 CASE("Input data name matches the export data name") {
69  std::string yamlMappingFile = std::string(IODA_ENGINES_TEST_SOURCE_DIR)
70  + "/layouts/odb_matchinginputoutput_name_map.yaml";
71  EXPECT_THROWS(ioda::detail::DataLayoutPolicy_ObsGroup_ODB policy(yamlMappingFile));
72 }
73 //The vertical coordinate merge method is currently unsupported
74 CASE("Vertical coordinate mapping file") {
75  std::string yamlMappingFile = std::string(IODA_ENGINES_TEST_SOURCE_DIR)
76  + "/layouts/odb_verticalreference_name_map.yaml";
77  EXPECT_THROWS(ioda::detail::DataLayoutPolicy_ObsGroup_ODB dataLayoutPolicy(yamlMappingFile));
78 }
79 
80 } // namespace test
81 } // namespace ioda
82 
83 int main(int argc, char** argv) {
84  return run_tests(argc, argv);
85 }
IODA's error system.
Contains definitions for how ODB data are arranged in ioda internally.
DataLayoutPolicy::MergeMethod getMergeMethod(const std::string &) const override
size_t getInputsNeeded(const std::string &) const override
std::string getOutputNameFromComponent(const std::string &) const override
bool isComplementary(const std::string &) const override
Check if the named variable will be a part of a derived variable.
std::pair< bool, std::string > getUnit(const std::string &) const override
bool isMapped(const std::string &) const override
Check if the named variable is in the Variables section of the ODB mapping file.
size_t getComplementaryPosition(const std::string &) const override
std::type_index getOutputVariableDataType(const std::string &) const override
@ Concat
Concatenate complementary variables entry-by-entry.
CASE("Vertical coordinate mapping file")
int main(int argc, char **argv)