From 1c3423bea425415c44dc567ff52d35fe83019638 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 12 Oct 2020 14:12:28 +0200 Subject: [PATCH] Fix affectation to tuple of R^d from a single '0' Add associate tests --- .../node_processor/AffectationProcessor.hpp | 3 ++ tests/test_ASTBuilder.cpp | 35 +++++++++++++++++++ tests/test_AffectationToTupleProcessor.cpp | 5 +++ 3 files changed, 43 insertions(+) diff --git a/src/language/node_processor/AffectationProcessor.hpp b/src/language/node_processor/AffectationProcessor.hpp index 1675793a6..c58ea1670 100644 --- a/src/language/node_processor/AffectationProcessor.hpp +++ b/src/language/node_processor/AffectationProcessor.hpp @@ -423,6 +423,9 @@ class AffectationToTupleProcessor final : public INodeProcessor } } else if constexpr (std::is_same_v<ValueT, TinyVector<1>> and std::is_arithmetic_v<T>) { *m_lhs = std::vector{TinyVector<1>{static_cast<double>(v)}}; + } else if constexpr (is_tiny_vector_v<ValueT> and std::is_same_v<T, int64_t>) { + Assert(v == 0); + *m_lhs = std::vector<ValueT>{zero}; } else { // LCOV_EXCL_START throw ParseError("unexpected error: unexpected right hand side type in affectation", m_node.begin()); diff --git a/tests/test_ASTBuilder.cpp b/tests/test_ASTBuilder.cpp index 2399a7861..7353fa9a4 100644 --- a/tests/test_ASTBuilder.cpp +++ b/tests/test_ASTBuilder.cpp @@ -620,6 +620,41 @@ clog << "log " << l << "\n"; +-(language::literal:"log ") +-(language::name:l) `-(language::literal:"\n") +)"; + CHECK_AST(data, result); + } + + SECTION("tuple list simplification") + { + std::string_view data = R"( +let x:(R^2), x=((0,0),(2,3)); +let y:(R^2), y=((0)); +)"; + + std::string_view result = R"( +(root) + +-(language::var_declaration) + | +-(language::name:x) + | +-(language::tuple_type_specifier) + | | `-(language::vector_type) + | | +-(language::R_set) + | | `-(language::integer:2) + | +-(language::name:x) + | `-(language::expression_list) + | +-(language::tuple_expression) + | | +-(language::integer:0) + | | `-(language::integer:0) + | `-(language::tuple_expression) + | +-(language::integer:2) + | `-(language::integer:3) + `-(language::var_declaration) + +-(language::name:y) + +-(language::tuple_type_specifier) + | `-(language::vector_type) + | +-(language::R_set) + | `-(language::integer:2) + +-(language::name:y) + `-(language::integer:0) )"; CHECK_AST(data, result); } diff --git a/tests/test_AffectationToTupleProcessor.cpp b/tests/test_AffectationToTupleProcessor.cpp index b778fdeae..bb7f8a299 100644 --- a/tests/test_AffectationToTupleProcessor.cpp +++ b/tests/test_AffectationToTupleProcessor.cpp @@ -122,6 +122,11 @@ let t :(R^2); t = ((1,2),0); )", "t", (std::vector<TinyVector<2>>{TinyVector<2>{1, 2}, TinyVector<2>{0, 0}})); + CHECK_AFFECTATION_RESULT(R"( +let t :(R^2); t = (0); +)", + "t", (std::vector<TinyVector<2>>{TinyVector<2>{0, 0}})); + CHECK_AFFECTATION_RESULT(R"( let x : R^1, x = 1; let t :(R^1); t = (x,2); -- GitLab