From 0e2bc83c9afb27ad3b5bb1a00734a7f2623c452a Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Wed, 12 Feb 2020 17:40:43 +0100 Subject: [PATCH] Add tests for tuple -> R^d conversion as function arguments --- .../test_ASTNodeFunctionExpressionBuilder.cpp | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/tests/test_ASTNodeFunctionExpressionBuilder.cpp b/tests/test_ASTNodeFunctionExpressionBuilder.cpp index 806ce8b80..802e2eeb6 100644 --- a/tests/test_ASTNodeFunctionExpressionBuilder.cpp +++ b/tests/test_ASTNodeFunctionExpressionBuilder.cpp @@ -584,6 +584,51 @@ f(0); CHECK_AST(data, result); } + + SECTION("Arguments tuple -> R^d") + { + std::string_view data = R"( +let f: R^3 -> R, x -> x[0]+x[1]+x[2]; +f((1,2,3)); +)"; + + std::string_view result = R"( +(root:ASTNodeListProcessor) + `-(language::function_evaluation:FunctionProcessor) + +-(language::name:f:NameProcessor) + `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor, 3ul>) + +-(language::integer:1:ValueProcessor) + +-(language::integer:2:ValueProcessor) + `-(language::integer:3:ValueProcessor) +)"; + + CHECK_AST(data, result); + } + + SECTION("Arguments compound with tuple") + { + std::string_view data = R"( +let f: R*R^3*R^2->R, (t,x,y) -> t*(x[0]+x[1]+x[2])*y[0]+y[1]; +f(2,(1,2,3),(2,1.3)); +)"; + + std::string_view result = R"( +(root:ASTNodeListProcessor) + `-(language::function_evaluation:FunctionProcessor) + +-(language::name:f:NameProcessor) + `-(language::function_argument_list:ASTNodeExpressionListProcessor) + +-(language::integer:2:ValueProcessor) + +-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor, 3ul>) + | +-(language::integer:1:ValueProcessor) + | +-(language::integer:2:ValueProcessor) + | `-(language::integer:3:ValueProcessor) + `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor, 2ul>) + +-(language::integer:2:ValueProcessor) + `-(language::real:1.3:ValueProcessor) +)"; + + CHECK_AST(data, result); + } } SECTION("errors") @@ -724,5 +769,68 @@ prev(3 + .24); CHECK_AST_THROWS_WITH(data, std::string{"invalid implicit conversion: R -> Z"}); } } + + SECTION("arguments invalid tuple -> R^d conversion") + { + SECTION("tuple[3] -> R^2") + { + std::string_view data = R"( +let f : R^2 -> R, x->x[0]; +f((1,2,3)); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"incompatible dimensions in affectation"}); + } + + SECTION("tuple[2] -> R^3") + { + std::string_view data = R"( +let f : R^3 -> R, x->x[0]; +f((1,2)); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"incompatible dimensions in affectation"}); + } + + SECTION("compound tuple[3] -> R^2") + { + std::string_view data = R"( +let f : R*R^2 -> R, (t,x)->x[0]; +f(1,(1,2,3)); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"incompatible dimensions in affectation"}); + } + + SECTION("compound tuple[2] -> R^3") + { + std::string_view data = R"( +let f : R^3*R^2 -> R, (x,y)->x[0]*y[1]; +f((1,2),(3,4)); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"incompatible dimensions in affectation"}); + } + + SECTION("list instead of tuple -> R^3") + { + std::string_view data = R"( +let f : R^3 -> R, x -> x[0]*x[1]; +f(1,2,3); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"bad number of arguments: expecting 1, provided 3"}); + } + + SECTION("list instead of tuple -> R^3*R^2") + { + std::string_view data = R"( +let f : R^3*R^2 -> R, (x,y) -> x[0]*x[1]-y[0]; +f((1,2,3),2,3); +)"; + + CHECK_AST_THROWS_WITH(data, std::string{"bad number of arguments: expecting 2, provided 3"}); + } + } } } -- GitLab