Skip to content
Snippets Groups Projects
Commit 84bb6539 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Add tests for AffectationProcessor and ListAffectationProcessor

parent 65f6955e
No related branches found
No related tags found
1 merge request!71Feature/language tiny matrices
...@@ -479,7 +479,9 @@ class AffectationProcessor final : public INodeProcessor ...@@ -479,7 +479,9 @@ class AffectationProcessor final : public INodeProcessor
// LCOV_EXCL_STOP // LCOV_EXCL_STOP
} }
} else { } else {
throw UnexpectedError(""); // LCOV_EXCL_START
throw UnexpectedError("invalid subscript expression");
// LCOV_EXCL_STOP
} }
} else { } else {
// LCOV_EXCL_START // LCOV_EXCL_START
...@@ -937,7 +939,9 @@ class ListAffectationProcessor final : public INodeProcessor ...@@ -937,7 +939,9 @@ class ListAffectationProcessor final : public INodeProcessor
auto& index0_expression = *array_subscript_expression.children[1]; auto& index0_expression = *array_subscript_expression.children[1];
auto& index1_expression = *array_subscript_expression.children[2]; auto& index1_expression = *array_subscript_expression.children[2];
switch (array_expression.m_data_type.dimension()) { Assert(array_expression.m_data_type.nbRows() == array_expression.m_data_type.nbColumns());
switch (array_expression.m_data_type.nbRows()) {
case 1: { case 1: {
using ArrayTypeT = TinyMatrix<1>; using ArrayTypeT = TinyMatrix<1>;
if (not std::holds_alternative<ArrayTypeT>(value)) { if (not std::holds_alternative<ArrayTypeT>(value)) {
......
...@@ -102,7 +102,6 @@ TEST_CASE("AffectationProcessor", "[language]") ...@@ -102,7 +102,6 @@ TEST_CASE("AffectationProcessor", "[language]")
CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = -2.3;", "x", (TinyVector<1>{-2.3})); CHECK_AFFECTATION_RESULT("let x : R^1; x[0] = -2.3;", "x", (TinyVector<1>{-2.3}));
CHECK_AFFECTATION_RESULT("let x : R^1, x = 0;", "x", (TinyVector<1>{zero})); CHECK_AFFECTATION_RESULT("let x : R^1, x = 0;", "x", (TinyVector<1>{zero}));
CHECK_AFFECTATION_RESULT("let x : R^1; x = 0;", "x", (TinyVector<1>{zero}));
} }
SECTION("R^2") SECTION("R^2")
...@@ -115,7 +114,6 @@ TEST_CASE("AffectationProcessor", "[language]") ...@@ -115,7 +114,6 @@ TEST_CASE("AffectationProcessor", "[language]")
CHECK_AFFECTATION_RESULT("let x : R^2; x[0] = -0.3; x[1] = 12;", "x", (TinyVector<2>{-0.3, 12})); CHECK_AFFECTATION_RESULT("let x : R^2; x[0] = -0.3; x[1] = 12;", "x", (TinyVector<2>{-0.3, 12}));
CHECK_AFFECTATION_RESULT("let x : R^2, x = 0;", "x", (TinyVector<2>{zero})); CHECK_AFFECTATION_RESULT("let x : R^2, x = 0;", "x", (TinyVector<2>{zero}));
CHECK_AFFECTATION_RESULT("let x : R^2; x = 0;", "x", (TinyVector<2>{zero}));
} }
SECTION("R^3") SECTION("R^3")
...@@ -126,9 +124,51 @@ TEST_CASE("AffectationProcessor", "[language]") ...@@ -126,9 +124,51 @@ TEST_CASE("AffectationProcessor", "[language]")
(TinyVector<3>{-1, true, false})); (TinyVector<3>{-1, true, false}));
CHECK_AFFECTATION_RESULT("let x : R^3; x[0] = -0.3; x[1] = 12; x[2] = 6.2;", "x", (TinyVector<3>{-0.3, 12, 6.2})); CHECK_AFFECTATION_RESULT("let x : R^3; x[0] = -0.3; x[1] = 12; x[2] = 6.2;", "x", (TinyVector<3>{-0.3, 12, 6.2}));
CHECK_AFFECTATION_RESULT("let x : R^3, x = 0;", "x", (TinyVector<3>{zero}));
CHECK_AFFECTATION_RESULT("let x : R^3; x = 0;", "x", (TinyVector<3>{zero})); CHECK_AFFECTATION_RESULT("let x : R^3; x = 0;", "x", (TinyVector<3>{zero}));
} }
SECTION("R^1x1")
{
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = -1;", "x", (TinyMatrix<1>{-1}));
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = true;", "x", (TinyMatrix<1>{true}));
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = false;", "x", (TinyMatrix<1>{false}));
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = -2.3;", "x", (TinyMatrix<1>{-2.3}));
CHECK_AFFECTATION_RESULT("let x : R^1x1; x[0,0] = -1;", "x", (TinyMatrix<1>{-1}));
CHECK_AFFECTATION_RESULT("let x : R^1x1; x[0,0] = true;", "x", (TinyMatrix<1>{true}));
CHECK_AFFECTATION_RESULT("let x : R^1x1; x[0,0] = false;", "x", (TinyMatrix<1>{false}));
CHECK_AFFECTATION_RESULT("let x : R^1x1; x[0,0] = -2.3;", "x", (TinyMatrix<1>{-2.3}));
CHECK_AFFECTATION_RESULT("let x : R^1x1; x = 0;", "x", (TinyMatrix<1>{zero}));
}
SECTION("R^2x2")
{
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (-1, true, 3, 5);", "x", (TinyMatrix<2>{-1, true, 3, 5}));
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (true, false, 1==2, 2==2);", "x",
(TinyMatrix<2>{true, false, false, true}));
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (-0.3, 12, 2, -3);", "x", (TinyMatrix<2>{-0.3, 12, 2, -3}));
CHECK_AFFECTATION_RESULT("let x : R^2x2; x[0,0] = -1; x[0,1] = true; x[1,0] = 2; x[1,1] = 3.3;", "x",
(TinyMatrix<2>{-1, true, 2, 3.3}));
CHECK_AFFECTATION_RESULT("let x : R^2x2; x[0,0] = true; x[0,1] = false; x[1,0] = 2.1; x[1,1] = -1;", "x",
(TinyMatrix<2>{true, false, 2.1, -1}));
CHECK_AFFECTATION_RESULT("let x : R^2x2; x[0,0] = -0.3; x[0,1] = 12; x[1,0] = 1.3; x[1,1] = 7;", "x",
(TinyMatrix<2>{-0.3, 12, 1.3, 7}));
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = 0;", "x", (TinyMatrix<2>{zero}));
}
SECTION("R^3x3")
{
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = (-1, true, false, 2, 3.1, 4, -1, true, 2);", "x",
(TinyMatrix<3>{-1, true, false, 2, 3.1, 4, -1, true, 2}));
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = (-0.3, 12, 6.2, 7.1, 3.2, 2-3, 2, -1, 0);", "x",
(TinyMatrix<3>{-0.3, 12, 6.2, 7.1, 3.2, 2 - 3, 2, -1, 0}));
CHECK_AFFECTATION_RESULT("let x : R^3x3; x[0,0] = -1; x[0,1] = true; x[0,2] = false; x[1,0] = -11; x[1,1] = 4; "
"x[1,2] = 3; x[2,0] = 6; x[2,1] = -3; x[2,2] = 5;",
"x", (TinyMatrix<3>{-1, true, false, -11, 4, 3, 6, -3, 5}));
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = 0;", "x", (TinyMatrix<3>{zero}));
}
} }
SECTION("+=") SECTION("+=")
...@@ -281,6 +321,29 @@ TEST_CASE("AffectationProcessor", "[language]") ...@@ -281,6 +321,29 @@ TEST_CASE("AffectationProcessor", "[language]")
CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] *= -1; x[1] *= -3; x[2] *= 2;", "x", CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] *= -1; x[1] *= -3; x[2] *= 2;", "x",
(TinyVector<3>{-0.3 * -1, 12 * -3, 6.2 * 2})); (TinyVector<3>{-0.3 * -1, 12 * -3, 6.2 * 2}));
} }
SECTION("R^1x1")
{
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = 2; x *= 2;", "x", (TinyMatrix<1>{TinyMatrix<1>{2} *= 2}));
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = 2; x[0,0] *= 1.3;", "x", (TinyMatrix<1>{2 * 1.3}));
}
SECTION("R^2x2")
{
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (-1, true, 3, 6); x *= 3;", "x",
(TinyMatrix<2>{TinyMatrix<2>{-1, true, 3, 6} *= 3}));
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (-1, true, 3, 6); x[0,0] *= 2; x[1,1] *= 3;", "x",
(TinyMatrix<2>{-1 * 2, true, 3, 6 * 3}));
}
SECTION("R^3x3")
{
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = (-1, true, false, 2, -3, 11, 5, -4, 2); x*=5.2;", "x",
(TinyMatrix<3>{TinyMatrix<3>{-1, true, false, 2, -3, 11, 5, -4, 2} *= 5.2}));
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = (-0.3, 12, 6.2, 2, -3, 11, 5, -4, 2); x[0,0] *= -1; x[0,1] *= -3; "
"x[0,2] *= 2; x[1,1] *= 2; x[2,1] *= 6; x[2,2] *= 2;",
"x", (TinyMatrix<3>{-0.3 * -1, 12 * -3, 6.2 * 2, 2, -3 * 2, 11, 5, (-4) * 6, 2 * 2}));
}
} }
SECTION("/=") SECTION("/=")
...@@ -323,6 +386,28 @@ TEST_CASE("AffectationProcessor", "[language]") ...@@ -323,6 +386,28 @@ TEST_CASE("AffectationProcessor", "[language]")
CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] /= -1.2; x[1] /= -3.1; x[2] /= 2.4;", "x", CHECK_AFFECTATION_RESULT("let x : R^3, x = (-0.3, 12, 6.2); x[0] /= -1.2; x[1] /= -3.1; x[2] /= 2.4;", "x",
(TinyVector<3>{-0.3 / -1.2, 12 / -3.1, 6.2 / 2.4})); (TinyVector<3>{-0.3 / -1.2, 12 / -3.1, 6.2 / 2.4}));
} }
SECTION("R^1x1")
{
CHECK_AFFECTATION_RESULT("let x : R^1x1, x = 2; x[0,0] /= 1.3;", "x", (TinyMatrix<1>{2 / 1.3}));
}
SECTION("R^2x2")
{
CHECK_AFFECTATION_RESULT("let x : R^2x2, x = (-1, true, 3, 1); x[0,0] /= 2; x[0,1] /= 3; x[1,0] /= 0.5; x[1,1] "
"/= 4;",
"x", (TinyMatrix<2>{-1. / 2., true / 3., 3 / 0.5, 1. / 4}));
}
SECTION("R^3x3")
{
CHECK_AFFECTATION_RESULT("let x : R^3x3, x = (-0.3, 12, 6.2, 1.2, 3, 5, 1, 11, 2); x[0,0] /= -1.2; x[0,1] /= "
"-3.1; x[0,2] /= 2.4; x[1,0] /= -1.6; x[1,1] /= -3.1; x[1,2] /= 2.4; x[2,0] /= 0.4; "
"x[2,1] /= -1.7; x[2,2] /= 1.2;",
"x",
(TinyMatrix<3>{-0.3 / -1.2, 12 / -3.1, 6.2 / 2.4, 1.2 / -1.6, 3 / -3.1, 5 / 2.4, 1 / 0.4,
11 / -1.7, 2 / 1.2}));
}
} }
SECTION("errors") SECTION("errors")
......
...@@ -120,5 +120,15 @@ TEST_CASE("ListAffectationProcessor", "[language]") ...@@ -120,5 +120,15 @@ TEST_CASE("ListAffectationProcessor", "[language]")
CHECK_AFFECTATION_RESULT(R"(let x:R^2; (x[1], x[0]) = (3, 6);)", "x", (TinyVector<2>{6, 3})); CHECK_AFFECTATION_RESULT(R"(let x:R^2; (x[1], x[0]) = (3, 6);)", "x", (TinyVector<2>{6, 3}));
CHECK_AFFECTATION_RESULT(R"(let x:R^1; let y:R; (y, x[0]) = (4, 2.3);)", "x", (TinyVector<1>{2.3})); CHECK_AFFECTATION_RESULT(R"(let x:R^1; let y:R; (y, x[0]) = (4, 2.3);)", "x", (TinyVector<1>{2.3}));
} }
SECTION("compound with subscript values")
{
CHECK_AFFECTATION_RESULT(
R"(let x:R^3x3; (x[0,0], x[1,0], x[1,2], x[2,0], x[0,1], x[0,2], x[1,1], x[2,1], x[2,2]) = (1, 4, 6, 7, 2, 3, 5, 8, 9);)",
"x", (TinyMatrix<3>{1, 2, 3, 4, 5, 6, 7, 8, 9}));
CHECK_AFFECTATION_RESULT(R"(let x:R^2x2; (x[1,1], x[0,0], x[1,0], x[0,1]) = (3, 6, 2, 4);)", "x",
(TinyMatrix<2>{6, 4, 2, 3}));
CHECK_AFFECTATION_RESULT(R"(let x:R^1x1; let y:R; (y, x[0,0]) = (4, 2.3);)", "x", (TinyMatrix<1>{2.3}));
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment