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);
+      }
+    }
   }
 }