diff --git a/tests/test_OStreamProcessor.cpp b/tests/test_OStreamProcessor.cpp
index 2c2dec499ded521a58780f125d965d2361c51bbc..a88662b1a00f0dfaf4977da9a79b7d44dd2405f1 100644
--- a/tests/test_OStreamProcessor.cpp
+++ b/tests/test_OStreamProcessor.cpp
@@ -47,6 +47,25 @@ _replaceOStream(ASTNode& node, std::ostringstream& sout)
     REQUIRE(sout.str() == expected_value);                    \
   }
 
+#define CHECK_OSTREAM_EXPRESSION_THROWS(data, expected_error)                                   \
+  {                                                                                             \
+    static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>);              \
+    static_assert((std::is_same_v<std::decay_t<decltype(expected_error)>, std::string_view>) or \
+                  (std::is_same_v<std::decay_t<decltype(expected_error)>, std::string>));       \
+                                                                                                \
+    string_input input{data, "test.pgs"};                                                       \
+    auto ast = ASTBuilder::build(input);                                                        \
+                                                                                                \
+    ASTSymbolTableBuilder{*ast};                                                                \
+    ASTNodeDataTypeBuilder{*ast};                                                               \
+                                                                                                \
+    ASTNodeDeclarationToAffectationConverter{*ast};                                             \
+    ASTNodeTypeCleaner<language::var_declaration>{*ast};                                        \
+    ASTNodeTypeCleaner<language::fct_declaration>{*ast};                                        \
+                                                                                                \
+    REQUIRE_THROWS_WITH(ASTNodeExpressionBuilder{*ast}, expected_error);                        \
+  }
+
 // clazy:excludeall=non-pod-global-static
 
 TEST_CASE("OStreamProcessor", "[language]")
@@ -66,4 +85,15 @@ TEST_CASE("OStreamProcessor", "[language]")
     CHECK_OSTREAM_EXPRESSION_RESULT(R"(cerr << false;)", "false");
     CHECK_OSTREAM_EXPRESSION_RESULT(R"(cerr << "x=" << 2 << "\n";)", "x=2\n");
   }
+
+  SECTION("runtime error")
+  {
+    std::string_view data_type = R"(
+let f : R -> R, x -> 2;
+cerr << "f=" << f << "\n";
+)";
+
+    std::string error_msg = "invalid argument, cannot print a 'function'";
+    CHECK_OSTREAM_EXPRESSION_THROWS(data_type, error_msg);
+  }
 }