OPALX (Object Oriented Parallel Accelerator Library for Exascal) master (dc2a29eed580)
OPALX
Loading...
Searching...
No Matches
TestOpalPolynomialTimeDependence.cpp
Go to the documentation of this file.
1//
2// Copyright (c) 2026, Paul Scherrer Institute, Villigen PSI, Switzerland
3// All rights reserved
4//
5// This file is part of OPAL.
6//
7// OPAL is free software: you can redistribute it and/or modify
8// it under the terms of the GNU General Public License as published by
9// the Free Software Foundation, either version 3 of the License, or
10// (at your option) any later version.
11//
12// You should have received a copy of the GNU General License
13// along with OPAL. If not, see <https://www.gnu.org/licenses/>.
14//
15
16#include <sstream>
21#include "gtest/gtest.h"
22
23TEST(TestOpalPolynomialTimeDependence, ConstructorTest) {
25 const OpalPolynomialTimeDependence* dep_clone = dep.clone("new name");
26 EXPECT_EQ(dep_clone->getOpalName(), "new name");
27}
28
29TEST(TestOpalPolynomialTimeDependence, PrintTest) {
31 std::stringstream _string;
32 dep.print(_string);
33 EXPECT_EQ(_string.str(), "POLYNOMIAL_TIME_DEPENDENCE;\n");
34}
35
36TEST(TestOpalPolynomialTimeDependence, UpdateTest) {
38 dependence.setOpalName("SCALE1");
43 dependence.update();
44 const auto dep = AbstractTimeDependence::getTimeDependence("SCALE1");
45 const auto value = dep->getValue(0.1);
46 constexpr auto shouldBe = 1.0 + 2.0 * 0.1 + 3.0 * 0.1 * 0.1 + 4.0 * 0.1 * 0.1 * 0.1;
47 EXPECT_DOUBLE_EQ(value, shouldBe);
48}
49
50TEST(TestOpalPolynomialTimeDependence, UpdateTest2) {
52 dependence.setOpalName("SCALE1");
54 dependence.itsAttr[OpalPolynomialTimeDependence::COEFFICIENTS], {1.0, 2.0, 3.0, 4.0});
55 dependence.update();
56 const auto dep = AbstractTimeDependence::getTimeDependence("SCALE1");
57 const auto value = dep->getValue(0.1);
58 constexpr auto shouldBe = 1.0 + 2.0 * 0.1 + 3.0 * 0.1 * 0.1 + 4.0 * 0.1 * 0.1 * 0.1;
59 EXPECT_DOUBLE_EQ(value, shouldBe);
60}
61
62TEST(TestOpalPolynomialTimeDependence, UpdateTest3) {
64 dependence.setOpalName("SCALE1");
66 dependence.itsAttr[OpalPolynomialTimeDependence::COEFFICIENTS], {1.0, 2.0, 3.0, 4.0});
71 EXPECT_ANY_THROW(dependence.update());
72}
73
74TEST(TestOpalPolynomialTimeDependence, UserInterfacePN) {
75 // Make the UI
77 // Set the attributes
82 // Update the object
83 EXPECT_NO_THROW(ui.update());
84 // Check the values
85 auto* myDependency = dynamic_cast<PolynomialTimeDependence*>(
86 AbstractTimeDependence::getTimeDependence("POLYNOMIAL_TIME_DEPENDENCE").get());
87 EXPECT_TRUE(myDependency);
88 EXPECT_NEAR(myDependency->getCoefficients()[0], 2, 1e-10);
89 EXPECT_NEAR(myDependency->getCoefficients()[1], 3, 1e-10);
90 EXPECT_NEAR(myDependency->getCoefficients()[2], 4, 1e-10);
91 EXPECT_NEAR(myDependency->getCoefficients()[3], 5, 1e-10);
92 EXPECT_EQ(myDependency->getCoefficients().size(), 4);
93}
94
95TEST(TestOpalPolynomialTimeDependence, UserInterfaceCoeffs) {
96 // Make the UI
98 // Set the attributes
101 // Update the object
102 EXPECT_NO_THROW(ui.update());
103 // Check the values
104 auto* myDependency = dynamic_cast<PolynomialTimeDependence*>(
105 AbstractTimeDependence::getTimeDependence("POLYNOMIAL_TIME_DEPENDENCE").get());
106 EXPECT_TRUE(myDependency);
107 EXPECT_NEAR(myDependency->getCoefficients()[0], 2, 1e-10);
108 EXPECT_NEAR(myDependency->getCoefficients()[1], 3, 1e-10);
109 EXPECT_NEAR(myDependency->getCoefficients()[2], 4, 1e-10);
110 EXPECT_NEAR(myDependency->getCoefficients()[3], 5, 1e-10);
111 EXPECT_NEAR(myDependency->getCoefficients()[4], 6, 1e-10);
112 EXPECT_EQ(myDependency->getCoefficients().size(), 5);
113}
114
115TEST(TestOpalPolynomialTimeDependence, UserInterfaceBoth) {
116 // Make the UI
118 // Set the attributes
125 // Update the object
126 EXPECT_THROW(ui.update(), std::invalid_argument);
127}
TEST(TestOpalPolynomialTimeDependence, ConstructorTest)
static std::shared_ptr< AbstractTimeDependence > getTimeDependence(const std::string &name)
const std::string & getOpalName() const
Return object name.
Definition Object.cpp:267
void setOpalName(const std::string &name)
Set object name.
Definition Object.cpp:281
std::vector< Attribute > itsAttr
The object attributes.
Definition Object.h:210
OpalPolynomialTimeDependence * clone(const std::string &name) override
void print(std::ostream &) const override
void setRealArray(Attribute &attr, const std::vector< double > &value)
Set array value.
void setReal(Attribute &attr, double val)
Set real value.