Argentum_02

condition_parser_test.cpp

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