diff --git a/tests/test_ListAffectationProcessor.cpp b/tests/test_ListAffectationProcessor.cpp index 23a05f19fc244d4a0dac6abe8de2110ce983ec78..219b9a2f16907f3d6010d3144b7d2b903455d6fa 100644 --- a/tests/test_ListAffectationProcessor.cpp +++ b/tests/test_ListAffectationProcessor.cpp @@ -98,6 +98,12 @@ TEST_CASE("ListAffectationProcessor", "[language]") SECTION("lists with tuples affectation") { + auto stringify = [](auto&& value) { + std::ostringstream os; + os << std::boolalpha << value; + return os.str(); + }; + SECTION("with (B)") { SECTION("from value") @@ -563,5 +569,173 @@ let (X,a): (R^3x3)*Z, (X,a) = (X0,3); CHECK_AFFECTATION_RESULT(data, "a", 3l); } } + + SECTION("with (string)") + { + SECTION("from value") + { + std::string_view data = R"( +let n: N, n = 3; +let (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11) + : (string)*(string)*(string)*(string)*(string)*(string)*(string)*(string)*(string)*(string)*(string), + (s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11) = (false, n, 1, 1.3, [1], [1,2], [1,2,3], [[1]], [[1,2],[3,4]], [[1,2,3],[4,5,6],[7,8,9]], "foo"); +)"; + + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{stringify(false)})); + CHECK_AFFECTATION_RESULT(data, "s2", (std::vector<std::string>{stringify(3ul)})); + CHECK_AFFECTATION_RESULT(data, "s3", (std::vector<std::string>{stringify(1l)})); + CHECK_AFFECTATION_RESULT(data, "s4", (std::vector<std::string>{stringify(double{1.3})})); + CHECK_AFFECTATION_RESULT(data, "s5", (std::vector<std::string>{stringify(TinyVector<1>{1})})); + CHECK_AFFECTATION_RESULT(data, "s6", (std::vector<std::string>{stringify(TinyVector<2>{1, 2})})); + CHECK_AFFECTATION_RESULT(data, "s7", (std::vector<std::string>{stringify(TinyVector<3>{1, 2, 3})})); + CHECK_AFFECTATION_RESULT(data, "s8", (std::vector<std::string>{stringify(TinyMatrix<1>{1})})); + CHECK_AFFECTATION_RESULT(data, "s9", (std::vector<std::string>{stringify(TinyMatrix<2>{1, 2, 3, 4})})); + CHECK_AFFECTATION_RESULT(data, "s10", + (std::vector<std::string>{stringify(TinyMatrix<3>{1, 2, 3, 4, 5, 6, 7, 8, 9})})); + CHECK_AFFECTATION_RESULT(data, "s11", (std::vector<std::string>{stringify("foo")})); + } + + SECTION("from list") + { + std::string_view data = R"( +let n: N, n = 3; +let (s1,s2): (string)*string, + (s1,s2) = ((false, n, 1, 1.3, [1], [1,2], [1,2,3], [[1]], [[1,2],[3,4]], [[1,2,3],[4,5,6],[7,8,9]], "foo"), "bar"); +)"; + + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(false), stringify(3ul), stringify(1l), + stringify(double{1.3}), stringify(TinyVector<1>{1}), + stringify(TinyVector<2>{1, 2}), + stringify(TinyVector<3>{1, 2, 3}), + stringify(TinyMatrix<1>{1}), + stringify(TinyMatrix<2>{1, 2, 3, 4}), + stringify(TinyMatrix<3>{1, 2, 3, 4, 5, 6, 7, 8, 9}), + stringify("foo")})); + CHECK_AFFECTATION_RESULT(data, "s2", std::string("bar")); + } + + SECTION("from (B)") + { + std::string_view data = R"( +let b : (B), b = (true, false); +let (s1,b2) : (string)*B, (s1,b2) = (b, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{stringify(true), stringify(false)})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (N)") + { + std::string_view data = R"( +let n : (N), n = (1, 2); +let (s1,b2) : (string)*B, (s1,b2) = (n, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{stringify(1ul), stringify(2ul)})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (Z)") + { + std::string_view data = R"( +let z : (Z), z = (1, -2); +let (s1,b2) : (string)*B, (s1,b2) = (z, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{stringify(1l), stringify(-2l)})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R)") + { + std::string_view data = R"( +let r : (R), r = (1, -2.3); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{stringify(double{1}), stringify(double{-2.3})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^1)") + { + std::string_view data = R"( +let r : (R^1), r = (1, -2.3); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyVector<1>{1}), + stringify(TinyVector<1>{-2.3})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^2)") + { + std::string_view data = R"( +let r : (R^2), r = ([1,2],[-2.3,4]); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyVector<2>{1, 2}), + stringify(TinyVector<2>{-2.3, 4})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^3)") + { + std::string_view data = R"( +let r : (R^3), r = ([1,2,3],[-2.3,4,7]); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyVector<3>{1, 2, 3}), + stringify(TinyVector<3>{-2.3, 4, 7})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^1x1)") + { + std::string_view data = R"( +let r : (R^1x1), r = (1, -2.3); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyMatrix<1>{1}), + stringify(TinyMatrix<1>{-2.3})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^2x2)") + { + std::string_view data = R"( +let r : (R^2x2), r = ([[1,2],[3,4]], [[-2.3,4],[7,2]]); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyMatrix<2>{1, 2, 3, 4}), + stringify(TinyMatrix<2>{-2.3, 4, 7, 2})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (R^3)") + { + std::string_view data = R"( +let r : (R^3x3), r = ([[1,2,3],[4,5,6],[7,8,9]], [[-2.3,4,7],[6,2,1],[8,3,4]]); +let (s1,b2) : (string)*B, (s1,b2) = (r, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", + (std::vector<std::string>{stringify(TinyMatrix<3>{1, 2, 3, 4, 5, 6, 7, 8, 9}), + stringify(TinyMatrix<3>{-2.3, 4, 7, 6, 2, 1, 8, 3, 4})})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + + SECTION("from (string)") + { + std::string_view data = R"( +let s : (string), s = ("foo", "bar", "foobar"); +let (s1,b2) : (string)*B, (s1,b2) = (s, false); +)"; + CHECK_AFFECTATION_RESULT(data, "s1", (std::vector<std::string>{"foo", "bar", "foobar"})); + CHECK_AFFECTATION_RESULT(data, "b2", false); + } + } } }