Mercurial > hg > orthanc-stone
comparison UnitTestsSources/UnitTestsMain.cpp @ 163:8c5b24892ed2 wasm
LinearAlgebra::InvertMatrix
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 14 Feb 2018 14:26:26 +0100 |
parents | 77715c340767 |
children | 432b1f812d14 |
comparison
equal
deleted
inserted
replaced
162:77715c340767 | 163:8c5b24892ed2 |
---|---|
435 ASSERT_NEAR(cy[i], y + 256, 0.01); | 435 ASSERT_NEAR(cy[i], y + 256, 0.01); |
436 } | 436 } |
437 } | 437 } |
438 | 438 |
439 | 439 |
440 TEST(Matrix, Inverse1) | |
441 { | |
442 OrthancStone::Matrix a, b; | |
443 | |
444 ASSERT_THROW(OrthancStone::LinearAlgebra::InvertMatrix(b, a), Orthanc::OrthancException); | |
445 | |
446 a.resize(2, 3); | |
447 ASSERT_THROW(OrthancStone::LinearAlgebra::InvertMatrix(b, a), Orthanc::OrthancException); | |
448 | |
449 a.resize(1, 1); | |
450 a(0, 0) = 45.0; | |
451 | |
452 ASSERT_DOUBLE_EQ(45, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
453 OrthancStone::LinearAlgebra::InvertMatrix(b, a); | |
454 ASSERT_EQ(1u, b.size1()); | |
455 ASSERT_EQ(1u, b.size2()); | |
456 ASSERT_DOUBLE_EQ(1.0 / 45.0, b(0, 0)); | |
457 | |
458 a(0, 0) = 0; | |
459 ASSERT_DOUBLE_EQ(0, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
460 ASSERT_THROW(OrthancStone::LinearAlgebra::InvertMatrix(b, a), Orthanc::OrthancException); | |
461 } | |
462 | |
463 | |
464 TEST(Matrix, Inverse2) | |
465 { | |
466 OrthancStone::Matrix a, b; | |
467 a.resize(2, 2); | |
468 a(0, 0) = 4; | |
469 a(0, 1) = 3; | |
470 a(1, 0) = 3; | |
471 a(1, 1) = 2; | |
472 | |
473 ASSERT_DOUBLE_EQ(-1, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
474 OrthancStone::LinearAlgebra::InvertMatrix(b, a); | |
475 ASSERT_EQ(2u, b.size1()); | |
476 ASSERT_EQ(2u, b.size2()); | |
477 | |
478 ASSERT_DOUBLE_EQ(-2, b(0, 0)); | |
479 ASSERT_DOUBLE_EQ(3, b(0, 1)); | |
480 ASSERT_DOUBLE_EQ(3, b(1, 0)); | |
481 ASSERT_DOUBLE_EQ(-4, b(1, 1)); | |
482 | |
483 a(0, 0) = 1; | |
484 a(0, 1) = 2; | |
485 a(1, 0) = 3; | |
486 a(1, 1) = 4; | |
487 | |
488 ASSERT_DOUBLE_EQ(-2, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
489 OrthancStone::LinearAlgebra::InvertMatrix(b, a); | |
490 | |
491 ASSERT_DOUBLE_EQ(-2, b(0, 0)); | |
492 ASSERT_DOUBLE_EQ(1, b(0, 1)); | |
493 ASSERT_DOUBLE_EQ(1.5, b(1, 0)); | |
494 ASSERT_DOUBLE_EQ(-0.5, b(1, 1)); | |
495 } | |
496 | |
497 | |
498 TEST(Matrix, Inverse3) | |
499 { | |
500 OrthancStone::Matrix a, b; | |
501 a.resize(3, 3); | |
502 a(0, 0) = 7; | |
503 a(0, 1) = 2; | |
504 a(0, 2) = 1; | |
505 a(1, 0) = 0; | |
506 a(1, 1) = 3; | |
507 a(1, 2) = -1; | |
508 a(2, 0) = -3; | |
509 a(2, 1) = 4; | |
510 a(2, 2) = -2; | |
511 | |
512 ASSERT_DOUBLE_EQ(1, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
513 OrthancStone::LinearAlgebra::InvertMatrix(b, a); | |
514 ASSERT_EQ(3u, b.size1()); | |
515 ASSERT_EQ(3u, b.size2()); | |
516 | |
517 ASSERT_DOUBLE_EQ(-2, b(0, 0)); | |
518 ASSERT_DOUBLE_EQ(8, b(0, 1)); | |
519 ASSERT_DOUBLE_EQ(-5, b(0, 2)); | |
520 ASSERT_DOUBLE_EQ(3, b(1, 0)); | |
521 ASSERT_DOUBLE_EQ(-11, b(1, 1)); | |
522 ASSERT_DOUBLE_EQ(7, b(1, 2)); | |
523 ASSERT_DOUBLE_EQ(9, b(2, 0)); | |
524 ASSERT_DOUBLE_EQ(-34, b(2, 1)); | |
525 ASSERT_DOUBLE_EQ(21, b(2, 2)); | |
526 | |
527 | |
528 a(0, 0) = 1; | |
529 a(0, 1) = 2; | |
530 a(0, 2) = 2; | |
531 a(1, 0) = 1; | |
532 a(1, 1) = 0; | |
533 a(1, 2) = 1; | |
534 a(2, 0) = 1; | |
535 a(2, 1) = 2; | |
536 a(2, 2) = 1; | |
537 | |
538 ASSERT_DOUBLE_EQ(2, OrthancStone::LinearAlgebra::ComputeDeterminant(a)); | |
539 OrthancStone::LinearAlgebra::InvertMatrix(b, a); | |
540 ASSERT_EQ(3u, b.size1()); | |
541 ASSERT_EQ(3u, b.size2()); | |
542 | |
543 ASSERT_DOUBLE_EQ(-1, b(0, 0)); | |
544 ASSERT_DOUBLE_EQ(1, b(0, 1)); | |
545 ASSERT_DOUBLE_EQ(1, b(0, 2)); | |
546 ASSERT_DOUBLE_EQ(0, b(1, 0)); | |
547 ASSERT_DOUBLE_EQ(-0.5, b(1, 1)); | |
548 ASSERT_DOUBLE_EQ(0.5, b(1, 2)); | |
549 ASSERT_DOUBLE_EQ(1, b(2, 0)); | |
550 ASSERT_DOUBLE_EQ(0, b(2, 1)); | |
551 ASSERT_DOUBLE_EQ(-1, b(2, 2)); | |
552 } | |
553 | |
554 | |
440 int main(int argc, char **argv) | 555 int main(int argc, char **argv) |
441 { | 556 { |
442 Orthanc::Logging::Initialize(); | 557 Orthanc::Logging::Initialize(); |
443 Orthanc::Logging::EnableInfoLevel(true); | 558 Orthanc::Logging::EnableInfoLevel(true); |
444 | 559 |