11 #ifndef TEST_INTERFACE_OBSAUXINCREMENT_H_
12 #define TEST_INTERFACE_OBSAUXINCREMENT_H_
20 #define ECKIT_TESTING_SELF_REGISTER_CASES 0
22 #include <boost/noncopyable.hpp>
24 #include "eckit/config/LocalConfiguration.h"
25 #include "eckit/testing/Test.h"
30 #include "oops/util/DateTime.h"
31 #include "oops/util/dot_product.h"
46 static const eckit::Configuration &
config(
const size_t ii) {
return getInstance().conf_.at(ii);}
52 return theObsAuxIncrementFixture;
63 ~ObsAuxIncrementFixture<OBS>() {}
65 std::vector<eckit::LocalConfiguration>
conf_;
66 std::vector<std::shared_ptr<Covariance_> >
covar_;
76 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
77 AuxIncr_ dx(Test_::obspace()[jj], AuxTest_::config(jj));
78 EXPECT(dx.norm() == 0.0);
89 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
90 if (AuxTest_::config(jj).has(
"obs bias")) {
91 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
95 EXPECT(dx2.norm() > 0.0);
96 EXPECT(dx2.norm() == dx1.norm());
100 EXPECT(dx2.norm() == 0.0);
112 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
113 if (AuxTest_::config(jj).has(
"obs bias")) {
114 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
117 AuxIncr_ dx2(dx1, AuxTest_::config(jj));
118 EXPECT(dx2.norm() > 0.0);
119 EXPECT(dx2.norm() == dx1.norm());
123 EXPECT(dx2.norm() == 0.0);
135 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
136 if (AuxTest_::config(jj).has(
"obs bias")) {
137 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
139 AuxIncr_ dx2(Test_::obspace()[jj], AuxTest_::config(jj));
143 double dot1 = dx1.norm();
146 double dot2 = dx2.norm();
150 double dot3 = dx2.norm();
153 EXPECT(dot3 <= dot1 + dot2);
165 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
166 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
175 EXPECT(dx2.norm() < 1e-8);
186 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
187 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
189 AuxIncr_ dx2(Test_::obspace()[jj], AuxTest_::config(jj));
193 double zz1 = dot_product(dx1, dx2);
194 double zz2 = dot_product(dx2, dx1);
207 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
208 AuxIncr_ dx(Test_::obspace()[jj], AuxTest_::config(jj));
210 EXPECT(dx.norm() > 0.0);
214 EXPECT(dx.norm() == 0.0);
225 for (std::size_t jj = 0; jj < Test_::obspace().size(); ++jj) {
226 AuxIncr_ dx1(Test_::obspace()[jj], AuxTest_::config(jj));
237 EXPECT(dx2.norm() < 1e-8);
243 template <
typename OBS>
252 std::string
testid()
const override {
return "test::ObsAuxIncrement<" + OBS::name() +
">";}
255 std::vector<eckit::testing::Test>& ts = eckit::testing::specification();
257 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementConstructor")
258 { testObsAuxIncrementConstructor<OBS>(); });
259 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementCopyConstructor")
260 { testObsAuxIncrementCopyConstructor<OBS>(); });
261 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementChangeRes")
262 { testObsAuxIncrementChangeRes<OBS>(); });
263 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementTriangle")
264 { testObsAuxIncrementTriangle<OBS>(); });
265 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementOpPlusEq")
266 { testObsAuxIncrementOpPlusEq<OBS>(); });
267 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementDotProduct")
268 { testObsAuxIncrementDotProduct<OBS>(); });
269 ts.emplace_back(
CASE(
"interface/ObsAuxIncrement/testObsAuxIncrementAxpy")
270 { testObsAuxIncrementAxpy<OBS>(); });
282 #endif // TEST_INTERFACE_OBSAUXINCREMENT_H_