36#include <boost/test/tools/floating_point_comparison.hpp>
37#include <boost/test/unit_test.hpp>
41namespace LinearSystemUnitTests
45 double matrix_buf[] = {10, 5, 2};
47 double b_buf[] = {20, 50, 10};
49 std::shared_ptr<NekMatrix<double>>
A(
68 double expected_result_buf[] = {2, 10, 5};
71 BOOST_CHECK_EQUAL(result1, expectedResult);
72 BOOST_CHECK_EQUAL(result2, expectedResult);
73 BOOST_CHECK_EQUAL(result3, expectedResult);
74 BOOST_CHECK_EQUAL(result4, expectedResult);
75 BOOST_CHECK_EQUAL(result5, expectedResult);
76 BOOST_CHECK_EQUAL(result6, expectedResult);
77 BOOST_CHECK_EQUAL(result7, expectedResult);
78 BOOST_CHECK_EQUAL(result8, expectedResult);
83 double matrix_buf[] = {10, 5, 2};
85 double b_buf[] = {20, 50, 10};
87 std::shared_ptr<NekMatrix<double>>
A(
100 double expected_result_buf[] = {2, 10, 5};
103 linsys.
Solve(b1, result1);
104 linsys.
Solve(b2, result3);
105 linsys.
Solve(b3, result4);
106 linsys.
Solve(b4, result2);
108 BOOST_CHECK_EQUAL(result1, expectedResult);
109 BOOST_CHECK_EQUAL(*result2, expectedResult);
110 BOOST_CHECK_EQUAL(result3, expectedResult);
111 BOOST_CHECK_EQUAL(*result4, expectedResult);
116 double matrix_buf[] = {10, 5, 2};
118 double result_buf[] = {20, 50, 10};
120 std::shared_ptr<NekMatrix<double>>
A(
128 double expected_result_buf[] = {2, 10, 5};
131 BOOST_CHECK_EQUAL(result, expectedResult);
132 std::shared_ptr<NekVector<double>> b1 = b;
134 BOOST_CHECK_EQUAL(result1, expectedResult);
137 BOOST_CHECK_EQUAL(expectedResult, result2);
142 double matrix_buf[] = {10.0, 0.0, 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 2.0};
144 double result_buf[] = {20, 50, 10};
146 std::shared_ptr<NekMatrix<double>>
A(
154 double epsilon = 1e-14;
156 BOOST_CHECK_CLOSE(result[0], 2.0, epsilon);
157 BOOST_CHECK_CLOSE(result[1], 10.0, epsilon);
158 BOOST_CHECK_CLOSE(result[2], 5.0, epsilon);
164 double matrix_buf[] = {81, -5, -28, 4};
166 double b_buf[] = {-941, 348};
168 std::shared_ptr<NekMatrix<double>>
A(
174 double epsilon = 1e-11;
176 BOOST_CHECK_CLOSE(result[0], 32.5, epsilon);
177 BOOST_CHECK_CLOSE(result[1], 127.625, epsilon);
180 BOOST_CHECK_CLOSE(result[0], -11.0, epsilon);
181 BOOST_CHECK_CLOSE(result[1], 10.0, epsilon);
188 double matrix_buf[] = {
189 -85, -55, -37, -35, 97, 50, 79, 56, 49, 63, 57, -59, 45,
190 -8, -93, 92, 43, -62, 77, 66, 54, -5, 99, -61, -50, -12,
191 -18, 31, -26, -62, 1, -47, -91, -47, -61, 41, -58, -90, 53,
192 -1, 94, 83, -86, 23, -84, 19, -50, 88, -53, 85, 49, 78,
193 17, 72, -99, -85, -86, 30, 80, 72, 66, -29, -91, -53, -19,
194 -47, 68, -72, -87, 79, 43, -66, -53, -61, -23, -37, 31, -34,
195 -42, 88, -76, -65, 25, 28, -61, -60, 9, 29, -66, -32, 78,
196 39, 94, 68, -17, -98, -36, 40, 22, 5};
198 double b_buf[] = {12719, -3169, -16810, 7408, -14945,
199 -6822, 10166, 7023, 8679, -11826};
201 std::shared_ptr<NekMatrix<double>>
A(
207 double epsilon = 1e-11;
208 BOOST_CHECK_CLOSE(result[0], -88.0, epsilon);
209 BOOST_CHECK_CLOSE(result[1], -43.0, epsilon);
210 BOOST_CHECK_CLOSE(result[2], -73.0, epsilon);
211 BOOST_CHECK_CLOSE(result[3], 25.0, epsilon);
212 BOOST_CHECK_CLOSE(result[4], 4.0, epsilon);
213 BOOST_CHECK_CLOSE(result[5], -59.0, epsilon);
214 BOOST_CHECK_CLOSE(result[6], 62.0, epsilon);
215 BOOST_CHECK_CLOSE(result[7], -55.0, epsilon);
216 BOOST_CHECK_CLOSE(result[8], 25.0, epsilon);
217 BOOST_CHECK_CLOSE(result[9], 9.0, epsilon);
259 double matrix_buf[] = {
260 -85, -55, -37, -35, 97, 50, 79, 56, 49, 63, 57, -59, 45,
261 -8, -93, 92, 43, -62, 77, 66, 54, -5, 99, -61, -50, -12,
262 -18, 31, -26, -62, 1, -47, -91, -47, -61, 41, -58, -90, 53,
263 -1, 94, 83, -86, 23, -84, 19, -50, 88, -53, 85, 49, 78,
264 17, 72, -99, -85, -86, 30, 80, 72, 66, -29, -91, -53, -19,
265 -47, 68, -72, -87, 79, 43, -66, -53, -61, -23, -37, 31, -34,
266 -42, 88, -76, -65, 25, 28, -61, -60, 9, 29, -66, -32, 78,
267 39, 94, 68, -17, -98, -36, 40, 22, 5};
269 double b_buf[] = {12719, -3169, -16810, 7408, -14945,
270 -6822, 10166, 7023, 8679, -11826};
271 double result_buf[10];
273 std::shared_ptr<NekMatrix<double>>
A(
275 std::shared_ptr<NekVector<double>> b(
282 double epsilon = 1e-11;
283 BOOST_CHECK_CLOSE(result[0], -88.0, epsilon);
284 BOOST_CHECK_CLOSE(result[1], -43.0, epsilon);
285 BOOST_CHECK_CLOSE(result[2], -73.0, epsilon);
286 BOOST_CHECK_CLOSE(result[3], 25.0, epsilon);
287 BOOST_CHECK_CLOSE(result[4], 4.0, epsilon);
288 BOOST_CHECK_CLOSE(result[5], -59.0, epsilon);
289 BOOST_CHECK_CLOSE(result[6], 62.0, epsilon);
290 BOOST_CHECK_CLOSE(result[7], -55.0, epsilon);
291 BOOST_CHECK_CLOSE(result[8], 25.0, epsilon);
292 BOOST_CHECK_CLOSE(result[9], 9.0, epsilon);
298 m.SetValue(0, 0, 3.0);
299 m.SetValue(0, 1, 4.0);
303 m.SetValue(2, 2, 11);
305 BOOST_CHECK_EQUAL(4.0, m(1, 0));
307 double b_buf[] = {-20.0, 30.0, -20.0};
314 double epsilon = 1e-11;
315 BOOST_CHECK_CLOSE(x[0], 3.0, epsilon);
316 BOOST_CHECK_CLOSE(x[1], 4.0, epsilon);
317 BOOST_CHECK_CLOSE(x[2], -5.0, epsilon);
318 BOOST_CHECK_CLOSE(xt[0], 3.0, epsilon);
319 BOOST_CHECK_CLOSE(xt[1], 4.0, epsilon);
320 BOOST_CHECK_CLOSE(xt[2], -5.0, epsilon);
RawType_t< VectorType > SolveTranspose(const VectorType &b)
RawType_t< VectorType > Solve(const VectorType &b)
BOOST_AUTO_TEST_CASE(TestLinearSystemSolveWithReturnValue)
The above copyright notice and this permission notice shall be included.