119 for (
size_t i = 0; i <
m1.GetNumRows(); ++i)
121 for (
size_t j = 0; j <
m1.GetNumCols(); ++j)
133 "The number of rows in resulting matrix is not correct");
136 "The number of cols in resulting matrix is not correct");
139 "The number of rows and cols should be equal");
146 "The element value should be " <<
m1.GetNumCols());
158 "The values are not equal");
180 "The number of rows in resulting matrix is not correct");
183 "The number of cols in resulting matrix is not correct");
186 "The number of rows and cols should be equal");
196 "The element value should be " << m5.
GetNumCols());
211 std::valarray<int> a{0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};
212 std::valarray<int> b{0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4};
213 std::valarray<T> aCasted(a.size());
214 std::valarray<T> bCasted(b.size());
215 for (
size_t i = 0; i < a.size(); ++i)
217 aCasted[i] =
static_cast<T
>(a[i]);
219 for (
size_t i = 0; i < b.size(); ++i)
221 bCasted[i] =
static_cast<T
>(b[i]);
229 NS_LOG_INFO(
"m8 (5, 3, 1) = m5.Transpose ()" << m8);
236 "Creation of vector is not correct.");
259 a = {0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5};
260 b = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
261 std::valarray<int> c{2, 3, 4, 6, 2, 3, 4, 6};
262 aCasted = std::valarray<T>(a.size());
263 bCasted = std::valarray<T>(b.size());
264 std::valarray<T> cCasted = std::valarray<T>(c.size());
266 for (
size_t i = 0; i < a.size(); ++i)
268 aCasted[i] =
static_cast<T
>(a[i]);
270 for (
size_t i = 0; i < b.size(); ++i)
272 bCasted[i] =
static_cast<T
>(b[i]);
274 for (
size_t i = 0; i < c.size(); ++i)
276 cCasted[i] =
static_cast<T
>(c[i]);
284 "The number of columns is not as expected.");
287 "The number of rows is not as expected.");
297 a = std::valarray<int>(
298 {0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5, 0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5});
299 b = std::valarray<int>({0, 1, 0, 1, 0, 1, 0, 10, 0, 10, 0, 10});
300 c = std::valarray<int>({2, 3, 2, 3, 4, 6, 4, 6, 20, 30, 20, 30, 40, 60, 40, 60});
301 aCasted = std::valarray<T>(a.size());
302 bCasted = std::valarray<T>(b.size());
303 cCasted = std::valarray<T>(c.size());
305 for (
size_t i = 0; i < a.size(); ++i)
307 aCasted[i] =
static_cast<T
>(a[i]);
309 for (
size_t i = 0; i < b.size(); ++i)
311 bCasted[i] =
static_cast<T
>(b[i]);
313 for (
size_t i = 0; i < c.size(); ++i)
315 cCasted[i] =
static_cast<T
>(c[i]);
324 "The number of columns is not as expected.");
327 "The number of rows is not as expected.");
337 a = std::valarray<int>({5, 4, 5, 5, 4, 5});
338 b = std::valarray<int>({0, 1, 0, 1, 0, 1, 1, 2, 3, 10, 100, 1000});
339 c = std::valarray<int>({4, 10, 28, 5450});
340 aCasted = std::valarray<T>(a.size());
341 bCasted = std::valarray<T>(b.size());
342 cCasted = std::valarray<T>(c.size());
344 for (
size_t i = 0; i < a.size(); ++i)
346 aCasted[i] =
static_cast<T
>(a[i]);
348 for (
size_t i = 0; i < b.size(); ++i)
350 bCasted[i] =
static_cast<T
>(b[i]);
352 for (
size_t i = 0; i < c.size(); ++i)
354 cCasted[i] =
static_cast<T
>(c[i]);
363 "The number of columns is not as expected.");
366 "The number of rows is not as expected.");
373 std::valarray<int> d{1, 1, 1};
374 std::valarray<int> e{1, 1};
375 std::valarray<int> f{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
376 std::valarray<int> g{12, 12};
377 std::valarray<T> dCasted(d.size());
378 std::valarray<T> eCasted(e.size());
379 std::valarray<T> fCasted(f.size());
380 std::valarray<T> gCasted(g.size());
381 for (
size_t i = 0; i < d.size(); ++i)
383 dCasted[i] =
static_cast<T
>(d[i]);
385 for (
size_t i = 0; i < e.size(); ++i)
387 eCasted[i] =
static_cast<T
>(e[i]);
389 for (
size_t i = 0; i < f.size(); ++i)
391 fCasted[i] =
static_cast<T
>(f[i]);
393 for (
size_t i = 0; i < g.size(); ++i)
395 gCasted[i] =
static_cast<T
>(g[i]);
405 std::valarray<int> h{1, 3, 2, 2, 4, 0};
406 std::valarray<int> j{2, 2, 3, 4, 1, 3, 0, 5};
407 std::valarray<int> k{1, 2, 0, 0, 2, 3, 4, 1, 2, 3, 4, 1, 1, 2, 0, 0, 2, 3, 4, 1, 2, 3, 4, 1};
408 std::valarray<int> l{144, 132, 128, 104, 144, 132, 128, 104};
409 std::valarray<T> hCasted(h.size());
410 std::valarray<T> jCasted(j.size());
411 std::valarray<T> kCasted(k.size());
412 std::valarray<T> lCasted(l.size());
413 for (
size_t i = 0; i < h.size(); ++i)
415 hCasted[i] =
static_cast<T
>(h[i]);
417 for (
size_t i = 0; i < j.size(); ++i)
419 jCasted[i] =
static_cast<T
>(j[i]);
421 for (
size_t i = 0; i < k.size(); ++i)
423 kCasted[i] =
static_cast<T
>(k[i]);
425 for (
size_t i = 0; i < l.size(); ++i)
427 lCasted[i] =
static_cast<T
>(l[i]);
441 size_t lCastedSize = lCasted.size();
442 NS_LOG_INFO(
"size() of lCasted before move: " << lCasted.size());
447 size_t hCastedSize = hCasted.size();
448 NS_LOG_INFO(
"size() of hCasted before move: " << hCasted.size());
453 size_t jCastedSize = jCasted.size();
454 NS_LOG_INFO(
"size() of jCasted before move: " << jCasted.size());
461 std::vector<std::pair<std::valarray<int>, T>> detTestCases{
463 {{1, 0, 7, 4, 2, 0, 6, 5, 3}, 62},
465 {{1, 4, 6, 0, 2, 5, 7, 0, 3}, 62},
467 {{1, 0, 0, 0, 1, 0, 0, 0, 1}, 1},
469 {{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, 1},
471 {{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}, -1},
473 {{36, -5, -5, 43}, 1523},
477 for (
const auto& [detVal, detRef] : detTestCases)
479 std::valarray<T> detCast(detVal.size());
481 auto side = sqrt(detVal.size());
484 static_cast<T
>(detRef),
485 "The determinants are not equal.");
489 std::valarray<int> multiPageMatrixValues{
520 std::valarray<T> castMultiPageMatrixValues(multiPageMatrixValues.size());
524 multiPageMatrixValues.size() / 9,
525 std::move(castMultiPageMatrixValues));
527 std::vector<int> determinants = {1, -1, 62, 60, -315, 4, 0};
529 for (
size_t page = 0; page < multiPageMatrix.
GetNumPages(); page++)
532 static_cast<T
>(determinants[page]),
533 "The determinants from the page " << std::to_string(page)
534 <<
" are not equal.");
538 std::vector<double> fnorms = {sqrt(3), sqrt(3), 11.8322, 15.3297, 14.7309, 3.4641, 2};
540 for (
size_t page = 0; page < multiPageMatrix.
GetNumPages(); page++)
543 std::abs(
static_cast<T
>(fnorms[page])),
545 "The Frobenius norm from the page " << std::to_string(page)
546 <<
" are not equal.");
550 for (
size_t noOfCopies = 1; noOfCopies < 4; noOfCopies++)
555 "Creating " << std::to_string(noOfCopies) <<
" copies failed.");
558 "The copy doesn't have the same number of rows as the original.");
561 "The copy doesn't have the same number of columns as the original.");
562 for (
size_t page = 0; page < copies.GetNumPages(); page++)
565 for (
size_t row = 0; row < copies.GetNumRows(); row++)
567 for (
size_t col = 0; col < copies.GetNumCols(); col++)
569 diff += m27(row, col, 0) - copies(row, col, page);
577 std::vector<MatrixArray<T>> pages{multiPageMatrix.
ExtractPage(1),
583 for (
size_t page = 0; page < jointPagesMatrix.GetNumPages(); page++)
586 for (
size_t row = 0; row < jointPagesMatrix.GetNumRows(); row++)
588 for (
size_t col = 0; col < jointPagesMatrix.GetNumCols(); col++)
590 diff += multiPageMatrix(row, col, 1 - page) - jointPagesMatrix(row, col, page);
597 auto identityRank3Reference = multiPageMatrix.
ExtractPage(0);