O_Egor

condition_parser_test.cpp

Oct 15th, 2022
649
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include "condition_parser.h"
  2. #include "test_runner.h"
  3.  
  4. #include <sstream>
  5.  
  6. using namespace std;
  7.  
  8. void TestParseCondition()
  9. {
  10.     {
  11.         istringstream is("date != 2017-11-18");
  12.         shared_ptr<Node> root = ParseCondition(is);
  13.         Assert(root->Evaluate({ 2017, 1, 1 }, ""), "Parse condition 1");
  14.         Assert(!root->Evaluate({ 2017, 11, 18 }, ""), "Parse condition 2");
  15.     }
  16.     {
  17.         istringstream is(R"(event == "sport event")");
  18.         shared_ptr<Node> root = ParseCondition(is);//EventComparsionNode(Comparison::Equal, "sport event")
  19.         Assert(root->Evaluate({ 2017, 1, 1 }, "sport event"), "Parse condition 3");//Comparison::Equal, "sport event"
  20.         Assert(!root->Evaluate({ 2017, 1, 1 }, "holiday"), "Parse condition 4");
  21.     }
  22.     {
  23.         istringstream is("date >= 2017-01-01 AND date < 2017-07-01");
  24.         shared_ptr<Node> root = ParseCondition(is);
  25.         Assert(root->Evaluate({ 2017, 1, 1 }, ""), "Parse condition 5");
  26.         Assert(root->Evaluate({ 2017, 3, 1 }, ""), "Parse condition 6");
  27.         Assert(root->Evaluate({ 2017, 6, 30 }, ""), "Parse condition 7");
  28.         Assert(!root->Evaluate({ 2017, 7, 1 }, ""), "Parse condition 8");
  29.         Assert(!root->Evaluate({ 2016, 12, 31 }, ""), "Parse condition 9");
  30.     }
  31.     {
  32.         istringstream is(R"(event != "sport event" AND event != "Wednesday")");
  33.         shared_ptr<Node> root = ParseCondition(is);
  34.         Assert(root->Evaluate({ 2017, 1, 1 }, "holiday"), "Parse condition 10");
  35.         Assert(!root->Evaluate({ 2017, 1, 1 }, "sport event"), "Parse condition 11");
  36.         Assert(!root->Evaluate({ 2017, 1, 1 }, "Wednesday"), "Parse condition 12");
  37.     }
  38.     {
  39.         istringstream is(R"(event == "holiday AND date == 2017-11-18")");
  40.         shared_ptr<Node> root = ParseCondition(is);
  41.         Assert(!root->Evaluate({ 2017, 11, 18 }, "holiday"), "Parse condition 13");
  42.         Assert(!root->Evaluate({ 2017, 11, 18 }, "work day"), "Parse condition 14");
  43.         Assert(root->Evaluate({ 1, 1, 1 }, "holiday AND date == 2017-11-18"), "Parse condition 15");
  44.     }
  45.     {
  46.         istringstream is(R"(((event == "holiday" AND date == 2017-01-01)))");
  47.         shared_ptr<Node> root = ParseCondition(is);
  48.         Assert(root->Evaluate({ 2017, 1, 1 }, "holiday"), "Parse condition 16");
  49.         Assert(!root->Evaluate({ 2017, 1, 2 }, "holiday"), "Parse condition 17");
  50.     }
  51.     {
  52.         istringstream is(R"(date > 2017-01-01 AND (event == "holiday" OR date < 2017-07-01))");
  53.         shared_ptr<Node> root = ParseCondition(is);
  54.         Assert(!root->Evaluate({ 2016, 1, 1 }, "holiday"), "Parse condition 18");
  55.         Assert(root->Evaluate({ 2017, 1, 2 }, "holiday"), "Parse condition 19");
  56.         Assert(root->Evaluate({ 2017, 1, 2 }, "workday"), "Parse condition 20");
  57.         Assert(!root->Evaluate({ 2018, 1, 2 }, "workday"), "Parse condition 21");
  58.     }
  59.     {
  60.         istringstream is(R"(date > 2017-01-01 AND event == "holiday" OR date < 2017-07-01)");
  61.         shared_ptr<Node> root = ParseCondition(is);
  62.         Assert(root->Evaluate({ 2016, 1, 1 }, "event"), "Parse condition 22");
  63.         Assert(root->Evaluate({ 2017, 1, 2 }, "holiday"), "Parse condition 23");
  64.         Assert(root->Evaluate({ 2017, 1, 2 }, "workday"), "Parse condition 24");
  65.         Assert(!root->Evaluate({ 2018, 1, 2 }, "workday"), "Parse condition 25");
  66.     }
  67.     {
  68.         istringstream is(R"(((date == 2017-01-01 AND event == "holiday")))");
  69.         shared_ptr<Node> root = ParseCondition(is);
  70.         Assert(root->Evaluate({ 2017, 1, 1 }, "holiday"), "Parse condition 26");
  71.         Assert(!root->Evaluate({ 2017, 1, 2 }, "holiday"), "Parse condition 27");
  72.     }
  73.     {
  74.         istringstream is(R"(((event == "2017-01-01" OR date > 2016-01-01)))");
  75.         shared_ptr<Node> root = ParseCondition(is);
  76.         Assert(root->Evaluate({ 1, 1, 1 }, "2017-01-01"), "Parse condition 28");
  77.         Assert(!root->Evaluate({ 2016, 1, 1 }, "event"), "Parse condition 29");
  78.         Assert(root->Evaluate({ 2016, 1, 2 }, "event"), "Parse condition 30");
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment