From da39b9064ae08566ca1c8e45560ff0f4a13c6ff1 Mon Sep 17 00:00:00 2001 From: philippun Date: Fri, 4 Aug 2023 10:46:46 +0200 Subject: [PATCH] added tests for Grid class --- src/Grid.cpp | 6 +- test/testGrid.cpp | 219 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 217 insertions(+), 8 deletions(-) diff --git a/src/Grid.cpp b/src/Grid.cpp index 9502a29..3327fb9 100644 --- a/src/Grid.cpp +++ b/src/Grid.cpp @@ -123,19 +123,19 @@ void Grid::setDomain(int domainLength) { if (dim != 1) { throw_invalid_argument("Grid is not one dimensional, you should probaly use the 2D domain setter!"); } - if (domainLength < 1) { + if (domainLength <= 0) { throw_invalid_argument("Given domain length is not positive!"); } this->domainCol = domainLength; - this->deltaCol = double(this->domainCol)/this->col; + this->deltaCol = double(this->domainCol)/double(this->col); } void Grid::setDomain(int domainRow, int domainCol) { if (dim != 2) { throw_invalid_argument("Grid is not two dimensional, you should probably use the 1D domain setter!"); } - if (domainRow < 1 || domainCol < 1) { + if (domainRow <= 0 || domainCol <= 0) { throw_invalid_argument("Given domain size is not positive!"); } diff --git a/test/testGrid.cpp b/test/testGrid.cpp index 55143e4..4963976 100644 --- a/test/testGrid.cpp +++ b/test/testGrid.cpp @@ -1,5 +1,21 @@ #include #include +#include + +TEST_CASE("1D Grid, too small length") { + int l = 2; + CHECK_THROWS(Grid(l)); +} + +TEST_CASE("2D Grid, too small side") { + int r = 2; + int c = 4; + CHECK_THROWS(Grid(r, c)); + + r = 4; + c = 2; + CHECK_THROWS(Grid(r, c)); +} TEST_CASE("1D Grid") { int l = 12; @@ -22,21 +38,214 @@ TEST_CASE("1D Grid") { CHECK_THROWS(grid.getDeltaRow()); } - SUBCASE("") { + SUBCASE("setting concentrations") { + // correct concentrations matrix + MatrixXd concentrations = MatrixXd::Constant(1, l, 3); + CHECK_NOTHROW(grid.setConcentrations(concentrations)); + // false concentrations matrix + MatrixXd wConcentrations = MatrixXd::Constant(2, l, 4); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + } + + SUBCASE("setting alpha") { + // correct alpha matrix + MatrixXd alpha = MatrixXd::Constant(1, l, 3); + CHECK_NOTHROW(grid.setAlpha(alpha)); + + CHECK_THROWS(grid.setAlpha(alpha, alpha)); + + grid.setAlpha(alpha); + CHECK_EQ(grid.getAlpha(), alpha); + CHECK_THROWS(grid.getAlphaX()); + CHECK_THROWS(grid.getAlphaY()); + + // false alpha matrix + MatrixXd wAlpha = MatrixXd::Constant(3, l, 2); + CHECK_THROWS(grid.setAlpha(wAlpha)); + } + + SUBCASE("setting domain") { + int d = 8; + // set 1D domain + CHECK_NOTHROW(grid.setDomain(d)); + + // set 2D domain + CHECK_THROWS(grid.setDomain(d, d)); + + grid.setDomain(d); + CHECK_EQ(grid.getDeltaCol(), double(d)/double(l)); + CHECK_THROWS(grid.getDeltaRow()); + + // set too small domain + d = 0; + CHECK_THROWS(grid.setDomain(d)); + d = -2; + CHECK_THROWS(grid.setDomain(d)); } } TEST_CASE("2D Grid quadratic") { - int r = 12; - int c = 12; + int rc = 12; + Grid grid(rc, rc); - // TODO + SUBCASE("correct construction") { + CHECK_EQ(grid.getDim(), 2); + CHECK_THROWS(grid.getLength()); + CHECK_EQ(grid.getCol(), rc); + CHECK_EQ(grid.getRow(), rc); + + CHECK_EQ(grid.getConcentrations().rows(), rc); + CHECK_EQ(grid.getConcentrations().cols(), rc); + CHECK_THROWS(grid.getAlpha()); + + CHECK_EQ(grid.getAlphaX().rows(), rc); + CHECK_EQ(grid.getAlphaX().cols(), rc); + CHECK_EQ(grid.getAlphaY().rows(), rc); + CHECK_EQ(grid.getAlphaY().cols(), rc); + CHECK_EQ(grid.getDeltaRow(), 1); + CHECK_EQ(grid.getDeltaCol(), 1); + } + + SUBCASE("setting concentrations") { + // correct concentrations matrix + MatrixXd concentrations = MatrixXd::Constant(rc, rc, 2); + CHECK_NOTHROW(grid.setConcentrations(concentrations)); + + + // false concentrations matrix + MatrixXd wConcentrations = MatrixXd::Constant(rc, rc+3, 1); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + wConcentrations = MatrixXd::Constant(rc+3, rc, 4); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + wConcentrations = MatrixXd::Constant(rc+2, rc+4, 6); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + } + + SUBCASE("setting alphas") { + // correct alpha matrices + MatrixXd alphax = MatrixXd::Constant(rc, rc, 2); + MatrixXd alphay = MatrixXd::Constant(rc, rc, 4); + CHECK_NOTHROW(grid.setAlpha(alphax, alphay)); + + CHECK_THROWS(grid.setAlpha(alphax)); + + grid.setAlpha(alphax, alphay); + CHECK_EQ(grid.getAlphaX(), alphax); + CHECK_EQ(grid.getAlphaY(), alphay); + CHECK_THROWS(grid.getAlpha()); + + // false alpha matrices + alphax = MatrixXd::Constant(rc+3, rc+1, 3); + CHECK_THROWS(grid.setAlpha(alphax, alphay)); + alphay = MatrixXd::Constant(rc+2, rc+1, 3); + CHECK_THROWS(grid.setAlpha(alphax, alphay)); + } + + SUBCASE("setting domain") { + int dr = 8; + int dc = 9; + + // set 1D domain + CHECK_THROWS(grid.setDomain(dr)); + + // set 2D domain + CHECK_NOTHROW(grid.setDomain(dr, dc)); + + grid.setDomain(dr, dc); + CHECK_EQ(grid.getDeltaCol(), double(dc)/double(rc)); + CHECK_EQ(grid.getDeltaRow(), double(dr)/double(rc)); + + // set too small domain + dr = 0; + CHECK_THROWS(grid.setDomain(dr, dc)); + dr = 8; + dc = 0; + CHECK_THROWS(grid.setDomain(dr, dc)); + dr = -2; + CHECK_THROWS(grid.setDomain(dr, dc)); + } } TEST_CASE("2D Grid non-quadratic") { int r = 12; int c = 15; + Grid grid(r, c); - // TODO + SUBCASE("correct construction") { + CHECK_EQ(grid.getDim(), 2); + CHECK_THROWS(grid.getLength()); + CHECK_EQ(grid.getCol(), c); + CHECK_EQ(grid.getRow(), r); + + CHECK_EQ(grid.getConcentrations().rows(), r); + CHECK_EQ(grid.getConcentrations().cols(), c); + CHECK_THROWS(grid.getAlpha()); + + CHECK_EQ(grid.getAlphaX().rows(), r); + CHECK_EQ(grid.getAlphaX().cols(), c); + CHECK_EQ(grid.getAlphaY().rows(), r); + CHECK_EQ(grid.getAlphaY().cols(), c); + CHECK_EQ(grid.getDeltaRow(), 1); + CHECK_EQ(grid.getDeltaCol(), 1); + } + + SUBCASE("setting concentrations") { + // correct concentrations matrix + MatrixXd concentrations = MatrixXd::Constant(r, c, 2); + CHECK_NOTHROW(grid.setConcentrations(concentrations)); + + + // false concentrations matrix + MatrixXd wConcentrations = MatrixXd::Constant(r, c+3, 6); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + wConcentrations = MatrixXd::Constant(r+3, c, 3); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + wConcentrations = MatrixXd::Constant(r+2, c+4, 2); + CHECK_THROWS(grid.setConcentrations(wConcentrations)); + } + + SUBCASE("setting alphas") { + // correct alpha matrices + MatrixXd alphax = MatrixXd::Constant(r, c, 2); + MatrixXd alphay = MatrixXd::Constant(r, c, 4); + CHECK_NOTHROW(grid.setAlpha(alphax, alphay)); + + CHECK_THROWS(grid.setAlpha(alphax)); + + grid.setAlpha(alphax, alphay); + CHECK_EQ(grid.getAlphaX(), alphax); + CHECK_EQ(grid.getAlphaY(), alphay); + CHECK_THROWS(grid.getAlpha()); + + // false alpha matrices + alphax = MatrixXd::Constant(r+3, c+1, 3); + CHECK_THROWS(grid.setAlpha(alphax, alphay)); + alphay = MatrixXd::Constant(r+2, c+1, 5); + CHECK_THROWS(grid.setAlpha(alphax, alphay)); + } + + SUBCASE("setting domain") { + int dr = 8; + int dc = 9; + + // set 1D domain + CHECK_THROWS(grid.setDomain(dr)); + + // set 2D domain + CHECK_NOTHROW(grid.setDomain(dr, dc)); + + grid.setDomain(dr, dc); + CHECK_EQ(grid.getDeltaCol(), double(dc)/double(c)); + CHECK_EQ(grid.getDeltaRow(), double(dr)/double(r)); + + // set too small domain + dr = 0; + CHECK_THROWS(grid.setDomain(dr, dc)); + dr = 8; + dc = -1; + CHECK_THROWS(grid.setDomain(dr, dc)); + dr = -2; + CHECK_THROWS(grid.setDomain(dr, dc)); + } } \ No newline at end of file