LCOV - code coverage report
Current view: top level - test/parsingAnalysis - test_ast_conditionals.cc (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 117 117
Test Date: 2025-04-18 15:53:49 Functions: 100.0 % 6 6

            Line data    Source code
       1              : #include "../../inc/parsingAnalysis/builder.h"
       2              : #include <catch2/catch_test_macros.hpp>
       3              : #include <memory>
       4              : 
       5              : using namespace nicole;
       6              : 
       7            9 : TEST_CASE("AST_CASE class methods", "[AST_CASE]") {
       8            9 :   Location loc{"file", 0, 0};
       9            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
      10            9 :   auto condition = *Builder::createCondition(
      11            9 :       SourceLocation{token, token},
      12            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      13            9 :   auto statement = *Builder::createStatement(
      14            9 :       SourceLocation{token, token},
      15            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      16            9 :   auto body = *Builder::createBody(
      17            9 :       SourceLocation{token, token},
      18            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
      19            9 :   AST_CASE astCase{0, SourceLocation{token, token}, condition, body};
      20              : 
      21            9 :   REQUIRE(astCase.match() == condition);
      22            9 :   REQUIRE(astCase.body() == body);
      23            9 : }
      24              : 
      25            9 : TEST_CASE("AST_DEFAULT class methods", "[AST_DEFAULT]") {
      26            9 :   Location loc{"file", 0, 0};
      27            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
      28            9 :   auto statement = *Builder::createStatement(
      29            9 :       SourceLocation{token, token},
      30            9 :       *Builder::createBool(SourceLocation{token, token}, false));
      31            9 :   auto body = *Builder::createBody(
      32            9 :       SourceLocation{token, token},
      33            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
      34            9 :   AST_DEFAULT astDefault{0, SourceLocation{token, token}, body};
      35              : 
      36            9 :   REQUIRE(astDefault.body() == body);
      37            9 : }
      38              : 
      39            9 : TEST_CASE("AST_ELSE_IF class methods", "[AST_ELSE_IF]") {
      40            9 :   Location loc{"file", 0, 0};
      41            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
      42            9 :   auto condition = *Builder::createCondition(
      43            9 :       SourceLocation{token, token},
      44            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      45            9 :   auto statement = *Builder::createStatement(
      46            9 :       SourceLocation{token, token},
      47            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      48            9 :   auto body = *Builder::createBody(
      49            9 :       SourceLocation{token, token},
      50            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
      51            9 :   AST_ELSE_IF astElseIf{0, SourceLocation{token, token}, condition, body};
      52              : 
      53            9 :   REQUIRE(astElseIf.condition() == condition);
      54            9 :   REQUIRE(astElseIf.body() == body);
      55            9 : }
      56              : 
      57            9 : TEST_CASE("AST_IF class methods", "[AST_IF]") {
      58            9 :   Location loc{"file", 0, 0};
      59            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
      60            9 :   auto condition = *Builder::createCondition(
      61            9 :       SourceLocation{token, token},
      62            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      63            9 :   auto statement = *Builder::createStatement(
      64            9 :       SourceLocation{token, token},
      65            9 :       *Builder::createBool(SourceLocation{token, token}, true));
      66            9 :   auto body = *Builder::createBody(
      67            9 :       SourceLocation{token, token},
      68            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
      69              : 
      70            9 :   auto elseCondition = *Builder::createCondition(
      71            9 :       SourceLocation{token, token},
      72            9 :       *Builder::createBool(SourceLocation{token, token}, false));
      73            9 :   auto elseStatement =
      74            9 :       *Builder::createStatement(SourceLocation{token, token}, elseCondition);
      75            9 :   auto elseIfBody = *Builder::createBody(
      76            9 :       SourceLocation{token, token},
      77            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{elseStatement});
      78            9 :   auto elseIf = *Builder::createElseIf(SourceLocation{token, token},
      79            9 :                                        elseCondition, elseIfBody);
      80              : 
      81            9 :   auto elseBody = *Builder::createBody(
      82            9 :       SourceLocation{token, token},
      83            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
      84              : 
      85            9 :   AST_IF astIf{0,       SourceLocation{token, token}, condition, body, {elseIf},
      86            9 :                elseBody};
      87              : 
      88            9 :   REQUIRE(astIf.condition() == condition);
      89            9 :   REQUIRE(astIf.body() == body);
      90            9 :   REQUIRE(astIf.elseIf().size() == 1);
      91            9 :   REQUIRE(astIf.elseIf()[0] == elseIf);
      92            9 :   REQUIRE(astIf.elseBody() == elseBody);
      93            9 : }
      94              : 
      95            9 : TEST_CASE("AST_SWITCH class methods", "[AST_SWITCH]") {
      96            9 :   Location loc{"file", 0, 0};
      97            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
      98            9 :   auto condition = *Builder::createCondition(
      99            9 :       SourceLocation{token, token},
     100            9 :       *Builder::createBool(SourceLocation{token, token}, true));
     101            9 :   auto statement = *Builder::createStatement(
     102            9 :       SourceLocation{token, token},
     103            9 :       *Builder::createBool(SourceLocation{token, token}, true));
     104            9 :   auto body = *Builder::createBody(
     105            9 :       SourceLocation{token, token},
     106            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
     107            9 :   auto case1 = std::make_shared<AST_CASE>(0, SourceLocation{token, token},
     108            9 :                                           condition, body);
     109              : 
     110            9 :   auto defaultBody = *Builder::createBody(
     111            9 :       SourceLocation{token, token},
     112            9 :       std::vector<std::shared_ptr<AST_STATEMENT>>{statement});
     113            9 :   auto defaultCase =
     114            9 :       *Builder::createDefault(SourceLocation{token, token}, defaultBody);
     115              : 
     116            9 :   AST_SWITCH astSwitch{
     117            9 :       0, SourceLocation{token, token}, condition, {case1}, defaultCase};
     118              : 
     119            9 :   REQUIRE(astSwitch.condition() == condition);
     120            9 :   REQUIRE(astSwitch.cases().size() == 1);
     121            9 :   REQUIRE(astSwitch.cases()[0] == case1);
     122            9 :   REQUIRE(astSwitch.defaultCase() == defaultCase);
     123            9 : }
     124              : 
     125            9 : TEST_CASE("AST_TERNARY class methods", "[AST_TERNARY]") {
     126            9 :   Location loc{"file", 0, 0};
     127            9 :   Token token{TokenType::OPERATOR_ADD, "+", loc};
     128            9 :   auto condition = *Builder::createCondition(
     129            9 :       SourceLocation{token, token},
     130            9 :       *Builder::createBool(SourceLocation{token, token}, true));
     131            9 :   auto first = *Builder::createBool(SourceLocation{token, token}, false);
     132            9 :   auto second = *Builder::createBool(SourceLocation{token, token}, true);
     133              : 
     134            9 :   AST_TERNARY astTernary{0, SourceLocation{token, token}, condition, first,
     135            9 :                          second};
     136              : 
     137            9 :   REQUIRE(astTernary.condition() == condition);
     138            9 :   REQUIRE(astTernary.first() == first);
     139            9 :   REQUIRE(astTernary.second() == second);
     140            9 : }
        

Generated by: LCOV version 2.0-1