118 for (
size_t i = 0; i <
m1.GetNumRows(); ++i)
120 for (
size_t j = 0; j <
m1.GetNumCols(); ++j)
132 "The number of rows in resulting matrix is not correct");
135 "The number of cols in resulting matrix is not correct");
138 "The number of rows and cols should be equal");
145 "The element value should be " <<
m1.GetNumCols());
157 "The values are not equal");
179 "The number of rows in resulting matrix is not correct");
182 "The number of cols in resulting matrix is not correct");
185 "The number of rows and cols should be equal");
195 "The element value should be " << m5.
GetNumCols());
210 std::valarray<int> a{0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};
211 std::valarray<int> b{0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4};
212 std::valarray<T> aCasted(a.size());
213 std::valarray<T> bCasted(b.size());
214 for (
size_t i = 0; i < a.size(); ++i)
216 aCasted[i] =
static_cast<T
>(a[i]);
218 for (
size_t i = 0; i < b.size(); ++i)
220 bCasted[i] =
static_cast<T
>(b[i]);
228 NS_LOG_INFO(
"m8 (5, 3, 1) = m5.Transpose ()" << m8);
235 "Creation of vector is not correct.");
258 a = {0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5};
259 b = {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1};
260 std::valarray<int> c{2, 3, 4, 6, 2, 3, 4, 6};
261 aCasted = std::valarray<T>(a.size());
262 bCasted = std::valarray<T>(b.size());
263 std::valarray<T> cCasted = std::valarray<T>(c.size());
265 for (
size_t i = 0; i < a.size(); ++i)
267 aCasted[i] =
static_cast<T
>(a[i]);
269 for (
size_t i = 0; i < b.size(); ++i)
271 bCasted[i] =
static_cast<T
>(b[i]);
273 for (
size_t i = 0; i < c.size(); ++i)
275 cCasted[i] =
static_cast<T
>(c[i]);
283 "The number of columns is not as expected.");
286 "The number of rows is not as expected.");
296 a = std::valarray<int>(
297 {0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5, 0, 1, 0, 1, 2, 3, 2, 3, 4, 5, 4, 5});
298 b = std::valarray<int>({0, 1, 0, 1, 0, 1, 0, 10, 0, 10, 0, 10});
299 c = std::valarray<int>({2, 3, 2, 3, 4, 6, 4, 6, 20, 30, 20, 30, 40, 60, 40, 60});
300 aCasted = std::valarray<T>(a.size());
301 bCasted = std::valarray<T>(b.size());
302 cCasted = std::valarray<T>(c.size());
304 for (
size_t i = 0; i < a.size(); ++i)
306 aCasted[i] =
static_cast<T
>(a[i]);
308 for (
size_t i = 0; i < b.size(); ++i)
310 bCasted[i] =
static_cast<T
>(b[i]);
312 for (
size_t i = 0; i < c.size(); ++i)
314 cCasted[i] =
static_cast<T
>(c[i]);
323 "The number of columns is not as expected.");
326 "The number of rows is not as expected.");
336 a = std::valarray<int>({5, 4, 5, 5, 4, 5});
337 b = std::valarray<int>({0, 1, 0, 1, 0, 1, 1, 2, 3, 10, 100, 1000});
338 c = std::valarray<int>({4, 10, 28, 5450});
339 aCasted = std::valarray<T>(a.size());
340 bCasted = std::valarray<T>(b.size());
341 cCasted = std::valarray<T>(c.size());
343 for (
size_t i = 0; i < a.size(); ++i)
345 aCasted[i] =
static_cast<T
>(a[i]);
347 for (
size_t i = 0; i < b.size(); ++i)
349 bCasted[i] =
static_cast<T
>(b[i]);
351 for (
size_t i = 0; i < c.size(); ++i)
353 cCasted[i] =
static_cast<T
>(c[i]);
362 "The number of columns is not as expected.");
365 "The number of rows is not as expected.");
372 std::valarray<int> d{1, 1, 1};
373 std::valarray<int> e{1, 1};
374 std::valarray<int> f{1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3};
375 std::valarray<int> g{12, 12};
376 std::valarray<T> dCasted(d.size());
377 std::valarray<T> eCasted(e.size());
378 std::valarray<T> fCasted(f.size());
379 std::valarray<T> gCasted(g.size());
380 for (
size_t i = 0; i < d.size(); ++i)
382 dCasted[i] =
static_cast<T
>(d[i]);
384 for (
size_t i = 0; i < e.size(); ++i)
386 eCasted[i] =
static_cast<T
>(e[i]);
388 for (
size_t i = 0; i < f.size(); ++i)
390 fCasted[i] =
static_cast<T
>(f[i]);
392 for (
size_t i = 0; i < g.size(); ++i)
394 gCasted[i] =
static_cast<T
>(g[i]);
404 std::valarray<int> h{1, 3, 2, 2, 4, 0};
405 std::valarray<int> j{2, 2, 3, 4, 1, 3, 0, 5};
406 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};
407 std::valarray<int> l{144, 132, 128, 104, 144, 132, 128, 104};
408 std::valarray<T> hCasted(h.size());
409 std::valarray<T> jCasted(j.size());
410 std::valarray<T> kCasted(k.size());
411 std::valarray<T> lCasted(l.size());
412 for (
size_t i = 0; i < h.size(); ++i)
414 hCasted[i] =
static_cast<T
>(h[i]);
416 for (
size_t i = 0; i < j.size(); ++i)
418 jCasted[i] =
static_cast<T
>(j[i]);
420 for (
size_t i = 0; i < k.size(); ++i)
422 kCasted[i] =
static_cast<T
>(k[i]);
424 for (
size_t i = 0; i < l.size(); ++i)
426 lCasted[i] =
static_cast<T
>(l[i]);
440 size_t lCastedSize = lCasted.size();
441 NS_LOG_INFO(
"size() of lCasted before move: " << lCasted.size());
446 size_t hCastedSize = hCasted.size();
447 NS_LOG_INFO(
"size() of hCasted before move: " << hCasted.size());
452 size_t jCastedSize = jCasted.size();
453 NS_LOG_INFO(
"size() of jCasted before move: " << jCasted.size());
460 std::vector<std::pair<std::valarray<int>, T>> detTestCases{
462 {{1, 0, 7, 4, 2, 0, 6, 5, 3}, 62},
464 {{1, 4, 6, 0, 2, 5, 7, 0, 3}, 62},
466 {{1, 0, 0, 0, 1, 0, 0, 0, 1}, 1},
468 {{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}, 1},
470 {{0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0}, -1},
472 {{36, -5, -5, 43}, 1523},
476 for (
const auto& [detVal, detRef] : detTestCases)
478 std::valarray<T> detCast(detVal.size());
480 auto side = sqrt(detVal.size());
483 static_cast<T
>(detRef),
484 "The determinants are not equal.");
488 std::valarray<int> multiPageMatrixValues{
519 std::valarray<T> castMultiPageMatrixValues(multiPageMatrixValues.size());
523 multiPageMatrixValues.size() / 9,
524 std::move(castMultiPageMatrixValues));
526 std::vector<int> determinants = {1, -1, 62, 60, -315, 4, 0};
528 for (
size_t page = 0; page < multiPageMatrix.
GetNumPages(); page++)
531 static_cast<T
>(determinants[page]),
532 "The determinants from the page " << std::to_string(page)
533 <<
" are not equal.");
537 std::vector<double> fnorms = {sqrt(3), sqrt(3), 11.8322, 15.3297, 14.7309, 3.4641, 2};
539 for (
size_t page = 0; page < multiPageMatrix.
GetNumPages(); page++)
542 std::abs(
static_cast<T
>(fnorms[page])),
544 "The Frobenius norm from the page " << std::to_string(page)
545 <<
" are not equal.");
549 for (
size_t noOfCopies = 1; noOfCopies < 4; noOfCopies++)
554 "Creating " << std::to_string(noOfCopies) <<
" copies failed.");
557 "The copy doesn't have the same number of rows as the original.");
560 "The copy doesn't have the same number of columns as the original.");
561 for (
size_t page = 0; page < copies.GetNumPages(); page++)
564 for (
size_t row = 0; row < copies.GetNumRows(); row++)
566 for (
size_t col = 0; col < copies.GetNumCols(); col++)
568 diff += m27(row, col, 0) - copies(row, col, page);
576 std::vector<MatrixArray<T>> pages{multiPageMatrix.
ExtractPage(1),
582 for (
size_t page = 0; page < jointPagesMatrix.GetNumPages(); page++)
585 for (
size_t row = 0; row < jointPagesMatrix.GetNumRows(); row++)
587 for (
size_t col = 0; col < jointPagesMatrix.GetNumCols(); col++)
589 diff += multiPageMatrix(row, col, 1 - page) - jointPagesMatrix(row, col, page);
596 auto identityRank3Reference = multiPageMatrix.
ExtractPage(0);