Skip to content

Commit fd8e28f

Browse files
pcaspersjenkins
authored andcommitted
QPR-12386 add simple unit test for double precision calc
1 parent 0d648cc commit fd8e28f

1 file changed

Lines changed: 46 additions & 0 deletions

File tree

QuantExt/test/computeenvironment.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,52 @@ BOOST_AUTO_TEST_CASE(testSimpleCalc) {
119119
}
120120
}
121121

122+
BOOST_AUTO_TEST_CASE(testSimpleCalcWithDoublePrecision) {
123+
ComputeEnvironmentFixture fixture;
124+
const std::size_t n = 1024;
125+
for (auto const& d : ComputeEnvironment::instance().getAvailableDevices()) {
126+
BOOST_TEST_MESSAGE("testing simple calc (double precision) on device '" << d << "'.");
127+
ComputeEnvironment::instance().selectContext(d);
128+
auto& c = ComputeEnvironment::instance().context();
129+
130+
if (!c.supportsDoublePrecision()) {
131+
BOOST_TEST_MESSAGE("device does not support double precision - skipping the test for this device.");
132+
continue;
133+
}
134+
135+
BOOST_TEST_MESSAGE(" do first calc");
136+
137+
double dblPrecNumber = 1.29382757483823819;
138+
139+
ComputeContext::Settings settings;
140+
settings.useDoublePrecision = true;
141+
auto [id, _] = c.initiateCalculation(n, 0, 0, settings);
142+
std::vector<double> rx(n, dblPrecNumber);
143+
auto x = c.createInputVariable(&rx[0]);
144+
auto y = c.createInputVariable(dblPrecNumber);
145+
auto z = c.applyOperation(RandomVariableOpCode::Add, {x, y});
146+
auto w = c.applyOperation(RandomVariableOpCode::Mult, {z, z});
147+
c.declareOutputVariable(w);
148+
std::vector<std::vector<double>> output(1, std::vector<double>(n));
149+
c.finalizeCalculation(output);
150+
for (auto const& v : output.front()) {
151+
BOOST_CHECK_CLOSE(v, (dblPrecNumber + dblPrecNumber) * (dblPrecNumber + dblPrecNumber), 1.0E-15);
152+
}
153+
154+
BOOST_TEST_MESSAGE(" do second calc using same kernel");
155+
156+
c.initiateCalculation(n, id, 0);
157+
std::vector<double> rx2(n, dblPrecNumber);
158+
c.createInputVariable(&rx2[0]);
159+
c.createInputVariable(dblPrecNumber);
160+
std::vector<std::vector<double>> output2(1, std::vector<double>(n));
161+
c.finalizeCalculation(output2);
162+
for (auto const& v : output2.front()) {
163+
BOOST_CHECK_CLOSE(v, (dblPrecNumber + dblPrecNumber) * (dblPrecNumber + dblPrecNumber), 1.0E-15);
164+
}
165+
}
166+
}
167+
122168
BOOST_AUTO_TEST_CASE(testLargeCalc) {
123169
ComputeEnvironmentFixture fixture;
124170

0 commit comments

Comments
 (0)