diff --git a/tests/test_AffectationProcessor.cpp b/tests/test_AffectationProcessor.cpp index 32f73803310e81025e6c947b2ba2e34c49113584..2f8c4bb92067614fe1eb62d527fc1656301c2d87 100644 --- a/tests/test_AffectationProcessor.cpp +++ b/tests/test_AffectationProcessor.cpp @@ -74,564 +74,91 @@ TEST_CASE("AffectationProcessor", "[language]") { SECTION("Affectations") { - SECTION("basic types") + SECTION("B") { - SECTION("B") - { - CHECK_AFFECTATION_RESULT("let b : B; b = true;", "b", true); - } - - SECTION("N") - { - CHECK_AFFECTATION_RESULT("let n : N, n = 1;", "n", 1ul); - CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = m;", "n", 2ul); - CHECK_AFFECTATION_RESULT("let n : N, n = true;", "n", 1ul); - CHECK_AFFECTATION_RESULT("let n : N, n = false;", "n", 0ul); - } - - SECTION("Z") - { - CHECK_AFFECTATION_RESULT("let z : Z, z = -1;", "z", -1l); - CHECK_AFFECTATION_RESULT("let z : Z, z = true;", "z", 1l); - CHECK_AFFECTATION_RESULT("let z : Z, z = false;", "z", 0l); - } - - SECTION("R") - { - CHECK_AFFECTATION_RESULT("let r : R, r = -1;", "r", double{-1}); - CHECK_AFFECTATION_RESULT("let r : R, r = true;", "r", double{1}); - CHECK_AFFECTATION_RESULT("let r : R, r = false;", "r", double{0}); - CHECK_AFFECTATION_RESULT("let r : R, r = -2.3;", "r", double{-2.3}); - } - - SECTION("R^1") - { - CHECK_AFFECTATION_RESULT("let x : R^1, x = -1;", "x", (TinyVector<1>{-1})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = true;", "x", (TinyVector<1>{true})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = false;", "x", (TinyVector<1>{false})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = -2.3;", "x", (TinyVector<1>{-2.3})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = [-1];", "x", (TinyVector<1>{-1})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = [true];", "x", (TinyVector<1>{true})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = [false];", "x", (TinyVector<1>{false})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = [-2.3];", "x", (TinyVector<1>{-2.3})); - CHECK_AFFECTATION_RESULT("let x : R^1, x = 0;", "x", (TinyVector<1>{zero})); - } - - SECTION("R^2") - { - CHECK_AFFECTATION_RESULT("let x : R^2, x = [-1, true];", "x", (TinyVector<2>{-1, true})); - CHECK_AFFECTATION_RESULT("let x : R^2, x = [true, false];", "x", (TinyVector<2>{true, false})); - CHECK_AFFECTATION_RESULT("let x : R^2, x = [-0.3, 12];", "x", (TinyVector<2>{-0.3, 12})); - CHECK_AFFECTATION_RESULT("let x : R^2, x = 0;", "x", (TinyVector<2>{zero})); - } - - SECTION("R^3") - { - CHECK_AFFECTATION_RESULT("let x : R^3, x = [-1, true, false];", "x", (TinyVector<3>{-1, true, false})); - CHECK_AFFECTATION_RESULT("let x : R^3, x = [-0.3, 12, 6.2];", "x", (TinyVector<3>{-0.3, 12, 6.2})); - 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 = [[-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;", "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;", "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;", "x", (TinyMatrix<3>{zero})); - } + CHECK_AFFECTATION_RESULT("let b : B; b = true;", "b", true); } - SECTION("lists") + SECTION("N") { - SECTION("with (B)") - { - SECTION("from value") - { - std::string_view data = R"( -let (b1,b2): (B)*(B), (b1,b2) = (false, true); -)"; - - CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{false})); - CHECK_AFFECTATION_RESULT(data, "b2", (std::vector<bool>{true})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (b1,b2): (B)*B, (b1,b2) = ((true,false), true); -)"; - - CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{true, false})); - CHECK_AFFECTATION_RESULT(data, "b2", true); - } - - SECTION("from (B)") - { - std::string_view data = R"( -let b : (B), b = (true, false); -let (b1,b2) : (B)*B, (b1,b2) = (b, false); -)"; - CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{true, false})); - CHECK_AFFECTATION_RESULT(data, "b2", false); - } - } - - SECTION("(N)") - { - SECTION("from value") - { - std::string_view data = R"( -let n:N, n = 9; -let (n1,n2,n3): (N)*(N)*(N), (n1,n2,n3) = (false, 1, n); -)"; - - CHECK_AFFECTATION_RESULT(data, "n1", (std::vector<uint64_t>{false})); - CHECK_AFFECTATION_RESULT(data, "n2", (std::vector<uint64_t>{1})); - CHECK_AFFECTATION_RESULT(data, "n3", (std::vector<uint64_t>{9})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (n,m) :(N)*N, (n,m) = ((1,2,3), 7); -)"; - CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "m", 7ul); - } - - SECTION("from (B)") - { - std::string_view data = R"( -let b :(B), b = (true,false,true); -let (n,m) :(N)*(N), (n,m) = (b, (false,true)); -)"; - CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 0, 1})); - CHECK_AFFECTATION_RESULT(data, "m", (std::vector<uint64_t>{0, 1})); - } - - SECTION("from (N)") - { - std::string_view data = R"( -let l:(N), l = (1,2,3); -let (n,m):(N)*(N), (n,m) = (l,(2,3,1)); -)"; - CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "m", (std::vector<uint64_t>{2, 3, 1})); - } - - SECTION("from (Z)") - { - std::string_view data = R"( -let z:(Z), z = (1,2,3); -let (n,x):(N)*R, (n,x) = (z,2.3); -)"; - CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "x", double{2.3}); - } - } + CHECK_AFFECTATION_RESULT("let n : N, n = 1;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let m : N, m = 2; let n : N, n = m;", "n", 2ul); + CHECK_AFFECTATION_RESULT("let n : N, n = true;", "n", 1ul); + CHECK_AFFECTATION_RESULT("let n : N, n = false;", "n", 0ul); + } - SECTION("(Z)") - { - SECTION("from value") - { - std::string_view data = R"( -let n:N, n = 9; -let (z1,z2,z3): (Z)*(Z)*(Z), (z1,z2,z3) = (false, -1, n); -)"; - - CHECK_AFFECTATION_RESULT(data, "z1", (std::vector<int64_t>{false})); - CHECK_AFFECTATION_RESULT(data, "z2", (std::vector<int64_t>{-1})); - CHECK_AFFECTATION_RESULT(data, "z3", (std::vector<int64_t>{9})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (z1,z2):(Z)*(Z), (z1,z2) = ((1,2,3),(2,1,3)); -)"; - CHECK_AFFECTATION_RESULT(data, "z1", (std::vector<int64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "z2", (std::vector<int64_t>{2, 1, 3})); - } - - SECTION("from (N)") - { - std::string_view data = R"( -let m : (N), m = (1,2,3); -let (z,n) : (Z)*N, (z,n) = (m,2); -)"; - CHECK_AFFECTATION_RESULT(data, "z", (std::vector<int64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "n", 2ul); - } - - SECTION("from (Z)") - { - std::string_view data = R"( -let z0:(Z), z0 = (1,2,3); -let (z,a): (Z)*Z, (z,a) = (z0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "z", (std::vector<int64_t>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + SECTION("Z") + { + CHECK_AFFECTATION_RESULT("let z : Z, z = -1;", "z", -1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = true;", "z", 1l); + CHECK_AFFECTATION_RESULT("let z : Z, z = false;", "z", 0l); + } - SECTION("(R)") - { - SECTION("from value") - { - std::string_view data = R"( -let n:N, n = 9; -let (r1,r2,r3,r4): (R)*(R)*(R)*(R), (r1,r2,r3,r4) = (false, -1, n, 2.3); -)"; - - CHECK_AFFECTATION_RESULT(data, "r1", (std::vector<double>{false})); - CHECK_AFFECTATION_RESULT(data, "r2", (std::vector<double>{-1})); - CHECK_AFFECTATION_RESULT(data, "r3", (std::vector<double>{9})); - CHECK_AFFECTATION_RESULT(data, "r4", (std::vector<double>{2.3})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (r1,r2):(R)*(R), (r1,r2) = ((1.2,2,3.1),(2.4,1,1.3)); -)"; - CHECK_AFFECTATION_RESULT(data, "r1", (std::vector<double>{1.2, 2, 3.1})); - CHECK_AFFECTATION_RESULT(data, "r2", (std::vector<double>{2.4, 1, 1.3})); - } - - SECTION("from (N)") - { - std::string_view data = R"( -let m : (N), m = (1,2,3); -let (r,n) : (R)*N, (r,n) = (m,2); -)"; - CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "n", 2ul); - } - - SECTION("from (Z)") - { - std::string_view data = R"( -let z0:(Z), z0 = (1,2,3); -let (r,a): (R)*Z, (r,a) = (z0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - - SECTION("from (R)") - { - std::string_view data = R"( -let r0:(R), r0 = (1.2,2,3); -let (r,a): (R)*Z, (r,a) = (r0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1.2, 2, 3})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + SECTION("R") + { + CHECK_AFFECTATION_RESULT("let r : R, r = -1;", "r", double{-1}); + CHECK_AFFECTATION_RESULT("let r : R, r = true;", "r", double{1}); + CHECK_AFFECTATION_RESULT("let r : R, r = false;", "r", double{0}); + CHECK_AFFECTATION_RESULT("let r : R, r = -2.3;", "r", double{-2.3}); + } - SECTION("(R^1)") - { - using R1 = TinyVector<1>; - - SECTION("from value") - { - std::string_view data = R"( -let n:N, n = 9; -let (X1,X2,X3,X4,X5): (R^1)*(R^1)*(R^1)*(R^1)*(R^1), (X1,X2,X3,X4,X5) = (false, -1, n, 2.3, [7.2]); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1>{R1(false)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1>{R1(-1)})); - CHECK_AFFECTATION_RESULT(data, "X3", (std::vector<R1>{R1(9)})); - CHECK_AFFECTATION_RESULT(data, "X4", (std::vector<R1>{R1(2.3)})); - CHECK_AFFECTATION_RESULT(data, "X5", (std::vector<R1>{R1(7.2)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^1)*(R^1), (X1,X2) = (([1.2],2,3.1),([2.4],1, true,1.3)); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1>{R1(1.2), R1(2), R1(3.1)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1>{R1(2.4), R1(1), R1(true), R1(1.3)})); - } - - SECTION("from (N)") - { - std::string_view data = R"( -let m : (N), m = (1,2,3); -let (X,n) : (R^1)*N, (X,n) = (m,2); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1), R1(2), R1(3)})); - CHECK_AFFECTATION_RESULT(data, "n", 2ul); - } - - SECTION("from (Z)") - { - std::string_view data = R"( -let z0:(Z), z0 = (1,2,3); -let (X,a): (R^1)*Z, (X,a) = (z0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1), R1(2), R1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - - SECTION("from (R)") - { - std::string_view data = R"( -let r0:(R), r0 = (1.2,2,3); -let (X,a): (R^1)*Z, (X,a) = (r0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1.2), R1(2), R1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - - SECTION("from (R^1)") - { - std::string_view data = R"( -let X0:(R^1), X0 = (1.2,2,3); -let (X,a): (R^1)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1.2), R1(2), R1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + SECTION("R^1") + { + CHECK_AFFECTATION_RESULT("let x : R^1, x = -1;", "x", (TinyVector<1>{-1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = true;", "x", (TinyVector<1>{true})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = false;", "x", (TinyVector<1>{false})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = -2.3;", "x", (TinyVector<1>{-2.3})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = [-1];", "x", (TinyVector<1>{-1})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = [true];", "x", (TinyVector<1>{true})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = [false];", "x", (TinyVector<1>{false})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = [-2.3];", "x", (TinyVector<1>{-2.3})); + CHECK_AFFECTATION_RESULT("let x : R^1, x = 0;", "x", (TinyVector<1>{zero})); + } - SECTION("R^2") - { - using R2 = TinyVector<2>; - - SECTION("from value") - { - std::string_view data = R"( -let (X1,X2): (R^2)*(R^2), (X1,X2) = ([1,2], 0); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2>{R2(1, 2)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2>{R2(0, 0)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^2)*(R^2), (X1,X2) = (([1.2, 2],0,[3,1]),([2.4,1],[true,1.3])); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2>{R2(1.2, 2), R2(0, 0), R2(3, 1)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2>{R2(2.4, 1), R2(true, 1.3)})); - } - - SECTION("from (R^2)") - { - std::string_view data = R"( -let X0:(R^2), X0 = ([1.2,2],[3,1],0); -let (X,a): (R^2)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R2>{R2(1.2, 2), R2(3, 1), R2(0, 0)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + SECTION("R^2") + { + CHECK_AFFECTATION_RESULT("let x : R^2, x = [-1, true];", "x", (TinyVector<2>{-1, true})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = [true, false];", "x", (TinyVector<2>{true, false})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = [-0.3, 12];", "x", (TinyVector<2>{-0.3, 12})); + CHECK_AFFECTATION_RESULT("let x : R^2, x = 0;", "x", (TinyVector<2>{zero})); + } - SECTION("R^3") - { - using R3 = TinyVector<3>; - - SECTION("from value") - { - std::string_view data = R"( -let (X1,X2): (R^3)*(R^3), (X1,X2) = ([1,2,3], 0); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3>{R3(1, 2, 3)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3>{R3(0, 0, 0)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^3)*(R^3), (X1,X2) = (([5, 1.2, 2],0,[3,6,1]),([2.4,1,1.3],[true,1.3,2])); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3>{R3(5, 1.2, 2), R3(0, 0, 0), R3(3, 6, 1)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3>{R3(2.4, 1, 1.3), R3(true, 1.3, 2)})); - } - - SECTION("from (R^3)") - { - std::string_view data = R"( -let X0:(R^3), X0 = ([1.2,-1.3,2],[3,1,5],0); -let (X,a): (R^3)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R3>{R3(1.2, -1.3, 2), R3(3, 1, 5), R3(0, 0, 0)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + SECTION("R^3") + { + CHECK_AFFECTATION_RESULT("let x : R^3, x = [-1, true, false];", "x", (TinyVector<3>{-1, true, false})); + CHECK_AFFECTATION_RESULT("let x : R^3, x = [-0.3, 12, 6.2];", "x", (TinyVector<3>{-0.3, 12, 6.2})); + CHECK_AFFECTATION_RESULT("let x : R^3; x = 0;", "x", (TinyVector<3>{zero})); + } - SECTION("R^1x1") - { - using R1x1 = TinyMatrix<1>; - - SECTION("from value") - { - std::string_view data = R"( -let n:N, n = 9; -let (X1,X2,X3,X4,X5): (R^1x1)*(R^1x1)*(R^1x1)*(R^1x1)*(R^1x1), (X1,X2,X3,X4,X5) = (false, -1, n, 2.3, [[7.2]]); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1x1>{R1x1(false)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1x1>{R1x1(-1)})); - CHECK_AFFECTATION_RESULT(data, "X3", (std::vector<R1x1>{R1x1(9)})); - CHECK_AFFECTATION_RESULT(data, "X4", (std::vector<R1x1>{R1x1(2.3)})); - CHECK_AFFECTATION_RESULT(data, "X5", (std::vector<R1x1>{R1x1(7.2)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^1x1)*(R^1x1), (X1,X2) = (([[1.2]],2,3.1),([[2.4]],1, true,1.3)); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3.1)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1x1>{R1x1(2.4), R1x1(1), R1x1(true), R1x1(1.3)})); - } - - SECTION("from (N)") - { - std::string_view data = R"( -let m : (N), m = (1,2,3); -let (X,n) : (R^1x1)*N, (X,n) = (m,2); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1), R1x1(2), R1x1(3)})); - CHECK_AFFECTATION_RESULT(data, "n", 2ul); - } - - SECTION("from (Z)") - { - std::string_view data = R"( -let z0:(Z), z0 = (1,2,3); -let (X,a): (R^1x1)*Z, (X,a) = (z0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1), R1x1(2), R1x1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - - SECTION("from (R)") - { - std::string_view data = R"( -let r0:(R), r0 = (1.2,2,3); -let (X,a): (R^1x1)*Z, (X,a) = (r0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - - SECTION("from (R^1x1)") - { - std::string_view data = R"( -let X0:(R^1x1), X0 = (1.2,2,3); -let (X,a): (R^1x1)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + 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 = [[-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;", "x", (TinyMatrix<1>{zero})); + } - SECTION("R^2x2") - { - using R2x2 = TinyMatrix<2>; - - SECTION("from value") - { - std::string_view data = R"( -let (X1,X2): (R^2x2)*(R^2x2), (X1,X2) = ([[1,2],[3,4]], 0); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2x2>{R2x2(1, 2, 3, 4)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2x2>{R2x2(0, 0, 0, 0)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^2x2)*(R^2x2), (X1,X2) = (([[1.2, 2],[7,4]],0,[[3,1],[5,2]]),([[2.4,1],[1,3]],[[true,1.3],[2,2]])); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", - (std::vector<R2x2>{R2x2(1.2, 2, 7, 4), R2x2(0, 0, 0, 0), R2x2(3, 1, 5, 2)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2x2>{R2x2(2.4, 1, 1, 3), R2x2(true, 1.3, 2, 2)})); - } - - SECTION("from (R^2x2)") - { - std::string_view data = R"( -let X0:(R^2x2), X0 = ([[1.2,2],[3,1]],[[3,1],[5,8]],0); -let (X,a): (R^2x2)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", - (std::vector<R2x2>{R2x2(1.2, 2, 3, 1), R2x2(3, 1, 5, 8), R2x2(0, 0, 0, 0)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + 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;", "x", (TinyMatrix<2>{zero})); + } - SECTION("R^3x3") - { - using R3x3 = TinyMatrix<3>; - - SECTION("from value") - { - std::string_view data = R"( -let (X1,X2): (R^3x3)*(R^3x3), (X1,X2) = ([[1,2,3],[4,5,6],[7,8,9]], 0); -)"; - - CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3x3>{R3x3(1, 2, 3, 4, 5, 6, 7, 8, 9)})); - CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3x3>{R3x3(0, 0, 0, 0, 0, 0, 0, 0, 0)})); - } - - SECTION("from list") - { - std::string_view data = R"( -let (X1,X2):(R^3x3)*(R^3x3), (X1,X2) = (([[1.2, 2, 1],[3,1,9],[7,5,4]],0,[[3,0.3,1],[5,7,2],[2,1,8]]),([[3,2.4,1],[2,1,3],[2.2,1.8,3]],[[true,2,1.3],[2.1,4,2],[1.2,2.4,1.2]])); -)"; - CHECK_AFFECTATION_RESULT(data, "X1", - (std::vector<R3x3>{R3x3(1.2, 2, 1, 3, 1, 9, 7, 5, 4), - R3x3(0, 0, 0, 0, 0, 0, 0, 0, 0), - R3x3(3, 0.3, 1, 5, 7, 2, 2, 1, 8)})); - CHECK_AFFECTATION_RESULT(data, "X2", - (std::vector<R3x3>{R3x3(3, 2.4, 1, 2, 1, 3, 2.2, 1.8, 3), - R3x3(true, 2, 1.3, 2.1, 4, 2, 1.2, 2.4, 1.2)})); - } - - SECTION("from (R^3x3)") - { - std::string_view data = R"( -let X0:(R^3x3), X0 = ([[1.2,7,2],[2,1,6],[1,3,1]],[[3,1,6],[2,7,1],[1,5,8]]); -let (X,a): (R^3x3)*Z, (X,a) = (X0,3); -)"; - CHECK_AFFECTATION_RESULT(data, "X", - (std::vector<R3x3>{R3x3(1.2, 7, 2, 2, 1, 6, 1, 3, 1), - R3x3(3, 1, 6, 2, 7, 1, 1, 5, 8)})); - CHECK_AFFECTATION_RESULT(data, "a", 3l); - } - } + 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;", "x", (TinyMatrix<3>{zero})); } } diff --git a/tests/test_ListAffectationProcessor.cpp b/tests/test_ListAffectationProcessor.cpp index 55f99e665441d9e4208c764f078680ad76d12527..23a05f19fc244d4a0dac6abe8de2110ce983ec78 100644 --- a/tests/test_ListAffectationProcessor.cpp +++ b/tests/test_ListAffectationProcessor.cpp @@ -55,7 +55,7 @@ TEST_CASE("ListAffectationProcessor", "[language]") return os.str(); }; - SECTION("ListAffectations") + SECTION("basic types list affectations") { SECTION("R*R^2*R^2x2*string") { @@ -95,4 +95,473 @@ TEST_CASE("ListAffectationProcessor", "[language]") CHECK_AFFECTATION_RESULT(R"(let (x,y,z):R^3x3*R^2x2*R^1x1, (x,y,z) = (0,0,0);)", "z", (TinyMatrix<1>{zero})); } } + + SECTION("lists with tuples affectation") + { + SECTION("with (B)") + { + SECTION("from value") + { + std::string_view data = R"( +let (b1,b2): (B)*(B), (b1,b2) = (false, true); +)"; + + CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{false})); + CHECK_AFFECTATION_RESULT(data, "b2", (std::vector<bool>{true})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (b1,b2): (B)*B, (b1,b2) = ((true,false), true); +)"; + + CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{true, false})); + CHECK_AFFECTATION_RESULT(data, "b2", true); + } + + SECTION("from (B)") + { + std::string_view data = R"( +let b : (B), b = (true, false); +let (b1,b2) : (B)*B, (b1,b2) = (b, false); +)"; + CHECK_AFFECTATION_RESULT(data, "b1", (std::vector<bool>{true, false})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + } + + SECTION("(N)") + { + SECTION("from value") + { + std::string_view data = R"( +let n:N, n = 9; +let (n1,n2,n3): (N)*(N)*(N), (n1,n2,n3) = (false, 1, n); +)"; + + CHECK_AFFECTATION_RESULT(data, "n1", (std::vector<uint64_t>{false})); + CHECK_AFFECTATION_RESULT(data, "n2", (std::vector<uint64_t>{1})); + CHECK_AFFECTATION_RESULT(data, "n3", (std::vector<uint64_t>{9})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (n,m) :(N)*N, (n,m) = ((1,2,3), 7); +)"; + CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "m", 7ul); + } + + SECTION("from (B)") + { + std::string_view data = R"( +let b :(B), b = (true,false,true); +let (n,m) :(N)*(N), (n,m) = (b, (false,true)); +)"; + CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 0, 1})); + CHECK_AFFECTATION_RESULT(data, "m", (std::vector<uint64_t>{0, 1})); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let l:(N), l = (1,2,3); +let (n,m):(N)*(N), (n,m) = (l,(2,3,1)); +)"; + CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "m", (std::vector<uint64_t>{2, 3, 1})); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z:(Z), z = (1,2,3); +let (n,x):(N)*R, (n,x) = (z,2.3); +)"; + CHECK_AFFECTATION_RESULT(data, "n", (std::vector<uint64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "x", double{2.3}); + } + } + + SECTION("(Z)") + { + SECTION("from value") + { + std::string_view data = R"( +let n:N, n = 9; +let (z1,z2,z3): (Z)*(Z)*(Z), (z1,z2,z3) = (false, -1, n); +)"; + + CHECK_AFFECTATION_RESULT(data, "z1", (std::vector<int64_t>{false})); + CHECK_AFFECTATION_RESULT(data, "z2", (std::vector<int64_t>{-1})); + CHECK_AFFECTATION_RESULT(data, "z3", (std::vector<int64_t>{9})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (z1,z2):(Z)*(Z), (z1,z2) = ((1,2,3),(2,1,3)); +)"; + CHECK_AFFECTATION_RESULT(data, "z1", (std::vector<int64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "z2", (std::vector<int64_t>{2, 1, 3})); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let m : (N), m = (1,2,3); +let (z,n) : (Z)*N, (z,n) = (m,2); +)"; + CHECK_AFFECTATION_RESULT(data, "z", (std::vector<int64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "n", 2ul); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z0:(Z), z0 = (1,2,3); +let (z,a): (Z)*Z, (z,a) = (z0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "z", (std::vector<int64_t>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("(R)") + { + SECTION("from value") + { + std::string_view data = R"( +let n:N, n = 9; +let (r1,r2,r3,r4): (R)*(R)*(R)*(R), (r1,r2,r3,r4) = (false, -1, n, 2.3); +)"; + + CHECK_AFFECTATION_RESULT(data, "r1", (std::vector<double>{false})); + CHECK_AFFECTATION_RESULT(data, "r2", (std::vector<double>{-1})); + CHECK_AFFECTATION_RESULT(data, "r3", (std::vector<double>{9})); + CHECK_AFFECTATION_RESULT(data, "r4", (std::vector<double>{2.3})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (r1,r2):(R)*(R), (r1,r2) = ((1.2,2,3.1),(2.4,1,1.3)); +)"; + CHECK_AFFECTATION_RESULT(data, "r1", (std::vector<double>{1.2, 2, 3.1})); + CHECK_AFFECTATION_RESULT(data, "r2", (std::vector<double>{2.4, 1, 1.3})); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let m : (N), m = (1,2,3); +let (r,n) : (R)*N, (r,n) = (m,2); +)"; + CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "n", 2ul); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z0:(Z), z0 = (1,2,3); +let (r,a): (R)*Z, (r,a) = (z0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + + SECTION("from (R)") + { + std::string_view data = R"( +let r0:(R), r0 = (1.2,2,3); +let (r,a): (R)*Z, (r,a) = (r0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "r", (std::vector<double>{1.2, 2, 3})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("(R^1)") + { + using R1 = TinyVector<1>; + + SECTION("from value") + { + std::string_view data = R"( +let n:N, n = 9; +let (X1,X2,X3,X4,X5): (R^1)*(R^1)*(R^1)*(R^1)*(R^1), (X1,X2,X3,X4,X5) = (false, -1, n, 2.3, [7.2]); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1>{R1(false)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1>{R1(-1)})); + CHECK_AFFECTATION_RESULT(data, "X3", (std::vector<R1>{R1(9)})); + CHECK_AFFECTATION_RESULT(data, "X4", (std::vector<R1>{R1(2.3)})); + CHECK_AFFECTATION_RESULT(data, "X5", (std::vector<R1>{R1(7.2)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^1)*(R^1), (X1,X2) = (([1.2],2,3.1),([2.4],1, true,1.3)); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1>{R1(1.2), R1(2), R1(3.1)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1>{R1(2.4), R1(1), R1(true), R1(1.3)})); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let m : (N), m = (1,2,3); +let (X,n) : (R^1)*N, (X,n) = (m,2); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1), R1(2), R1(3)})); + CHECK_AFFECTATION_RESULT(data, "n", 2ul); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z0:(Z), z0 = (1,2,3); +let (X,a): (R^1)*Z, (X,a) = (z0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1), R1(2), R1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + + SECTION("from (R)") + { + std::string_view data = R"( +let r0:(R), r0 = (1.2,2,3); +let (X,a): (R^1)*Z, (X,a) = (r0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1.2), R1(2), R1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + + SECTION("from (R^1)") + { + std::string_view data = R"( +let X0:(R^1), X0 = (1.2,2,3); +let (X,a): (R^1)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1>{R1(1.2), R1(2), R1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("R^2") + { + using R2 = TinyVector<2>; + + SECTION("from value") + { + std::string_view data = R"( +let (X1,X2): (R^2)*(R^2), (X1,X2) = ([1,2], 0); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2>{R2(1, 2)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2>{R2(0, 0)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^2)*(R^2), (X1,X2) = (([1.2, 2],0,[3,1]),([2.4,1],[true,1.3])); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2>{R2(1.2, 2), R2(0, 0), R2(3, 1)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2>{R2(2.4, 1), R2(true, 1.3)})); + } + + SECTION("from (R^2)") + { + std::string_view data = R"( +let X0:(R^2), X0 = ([1.2,2],[3,1],0); +let (X,a): (R^2)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R2>{R2(1.2, 2), R2(3, 1), R2(0, 0)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("R^3") + { + using R3 = TinyVector<3>; + + SECTION("from value") + { + std::string_view data = R"( +let (X1,X2): (R^3)*(R^3), (X1,X2) = ([1,2,3], 0); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3>{R3(1, 2, 3)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3>{R3(0, 0, 0)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^3)*(R^3), (X1,X2) = (([5, 1.2, 2],0,[3,6,1]),([2.4,1,1.3],[true,1.3,2])); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3>{R3(5, 1.2, 2), R3(0, 0, 0), R3(3, 6, 1)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3>{R3(2.4, 1, 1.3), R3(true, 1.3, 2)})); + } + + SECTION("from (R^3)") + { + std::string_view data = R"( +let X0:(R^3), X0 = ([1.2,-1.3,2],[3,1,5],0); +let (X,a): (R^3)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R3>{R3(1.2, -1.3, 2), R3(3, 1, 5), R3(0, 0, 0)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("R^1x1") + { + using R1x1 = TinyMatrix<1>; + + SECTION("from value") + { + std::string_view data = R"( +let n:N, n = 9; +let (X1,X2,X3,X4,X5): (R^1x1)*(R^1x1)*(R^1x1)*(R^1x1)*(R^1x1), (X1,X2,X3,X4,X5) = (false, -1, n, 2.3, [[7.2]]); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1x1>{R1x1(false)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1x1>{R1x1(-1)})); + CHECK_AFFECTATION_RESULT(data, "X3", (std::vector<R1x1>{R1x1(9)})); + CHECK_AFFECTATION_RESULT(data, "X4", (std::vector<R1x1>{R1x1(2.3)})); + CHECK_AFFECTATION_RESULT(data, "X5", (std::vector<R1x1>{R1x1(7.2)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^1x1)*(R^1x1), (X1,X2) = (([[1.2]],2,3.1),([[2.4]],1, true,1.3)); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3.1)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R1x1>{R1x1(2.4), R1x1(1), R1x1(true), R1x1(1.3)})); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let m : (N), m = (1,2,3); +let (X,n) : (R^1x1)*N, (X,n) = (m,2); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1), R1x1(2), R1x1(3)})); + CHECK_AFFECTATION_RESULT(data, "n", 2ul); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z0:(Z), z0 = (1,2,3); +let (X,a): (R^1x1)*Z, (X,a) = (z0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1), R1x1(2), R1x1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + + SECTION("from (R)") + { + std::string_view data = R"( +let r0:(R), r0 = (1.2,2,3); +let (X,a): (R^1x1)*Z, (X,a) = (r0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + + SECTION("from (R^1x1)") + { + std::string_view data = R"( +let X0:(R^1x1), X0 = (1.2,2,3); +let (X,a): (R^1x1)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", (std::vector<R1x1>{R1x1(1.2), R1x1(2), R1x1(3)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("R^2x2") + { + using R2x2 = TinyMatrix<2>; + + SECTION("from value") + { + std::string_view data = R"( +let (X1,X2): (R^2x2)*(R^2x2), (X1,X2) = ([[1,2],[3,4]], 0); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R2x2>{R2x2(1, 2, 3, 4)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2x2>{R2x2(0, 0, 0, 0)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^2x2)*(R^2x2), (X1,X2) = (([[1.2, 2],[7,4]],0,[[3,1],[5,2]]),([[2.4,1],[1,3]],[[true,1.3],[2,2]])); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", + (std::vector<R2x2>{R2x2(1.2, 2, 7, 4), R2x2(0, 0, 0, 0), R2x2(3, 1, 5, 2)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R2x2>{R2x2(2.4, 1, 1, 3), R2x2(true, 1.3, 2, 2)})); + } + + SECTION("from (R^2x2)") + { + std::string_view data = R"( +let X0:(R^2x2), X0 = ([[1.2,2],[3,1]],[[3,1],[5,8]],0); +let (X,a): (R^2x2)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", + (std::vector<R2x2>{R2x2(1.2, 2, 3, 1), R2x2(3, 1, 5, 8), R2x2(0, 0, 0, 0)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + + SECTION("R^3x3") + { + using R3x3 = TinyMatrix<3>; + + SECTION("from value") + { + std::string_view data = R"( +let (X1,X2): (R^3x3)*(R^3x3), (X1,X2) = ([[1,2,3],[4,5,6],[7,8,9]], 0); +)"; + + CHECK_AFFECTATION_RESULT(data, "X1", (std::vector<R3x3>{R3x3(1, 2, 3, 4, 5, 6, 7, 8, 9)})); + CHECK_AFFECTATION_RESULT(data, "X2", (std::vector<R3x3>{R3x3(0, 0, 0, 0, 0, 0, 0, 0, 0)})); + } + + SECTION("from list") + { + std::string_view data = R"( +let (X1,X2):(R^3x3)*(R^3x3), (X1,X2) = (([[1.2, 2, 1],[3,1,9],[7,5,4]],0,[[3,0.3,1],[5,7,2],[2,1,8]]),([[3,2.4,1],[2,1,3],[2.2,1.8,3]],[[true,2,1.3],[2.1,4,2],[1.2,2.4,1.2]])); +)"; + CHECK_AFFECTATION_RESULT(data, "X1", + (std::vector<R3x3>{R3x3(1.2, 2, 1, 3, 1, 9, 7, 5, 4), R3x3(0, 0, 0, 0, 0, 0, 0, 0, 0), + R3x3(3, 0.3, 1, 5, 7, 2, 2, 1, 8)})); + CHECK_AFFECTATION_RESULT(data, "X2", + (std::vector<R3x3>{R3x3(3, 2.4, 1, 2, 1, 3, 2.2, 1.8, 3), + R3x3(true, 2, 1.3, 2.1, 4, 2, 1.2, 2.4, 1.2)})); + } + + SECTION("from (R^3x3)") + { + std::string_view data = R"( +let X0:(R^3x3), X0 = ([[1.2,7,2],[2,1,6],[1,3,1]],[[3,1,6],[2,7,1],[1,5,8]]); +let (X,a): (R^3x3)*Z, (X,a) = (X0,3); +)"; + CHECK_AFFECTATION_RESULT(data, "X", + (std::vector<R3x3>{R3x3(1.2, 7, 2, 2, 1, 6, 1, 3, 1), + R3x3(3, 1, 6, 2, 7, 1, 1, 5, 8)})); + CHECK_AFFECTATION_RESULT(data, "a", 3l); + } + } + } }