@@ -451,5 +451,60 @@ TEST_CLASS(TestPqlEvaluator) {
451
451
Pql::evaluate (pq, pkb.getQueryInterface (), actual);
452
452
Assert::IsTrue (expected == actual);
453
453
}
454
+
455
+ TEST_METHOD (TestEvaluateParsedQuery_SelectBoolean) {
456
+ /* Boolean true
457
+ Select BOOLEAN such that Follows(1, 2)
458
+ */
459
+ ParsedQuery pq = {{},
460
+ {PqlResultType::Boolean },
461
+ {{TokenType::FOLLOWS,
462
+ {TokenType::NUMBER, " 1" },
463
+ {TokenType::NUMBER, " 2" }}}};
464
+ std::list<VALUE> expected = {" TRUE" };
465
+ std::list<VALUE> actual;
466
+ Pql::evaluate (pq, pkb.getQueryInterface (), actual);
467
+ Assert::IsTrue (expected == actual);
468
+
469
+ /* Boolean false
470
+ Select BOOLEAN such that Follows(1, 3)
471
+ */
472
+ pq = {{},
473
+ {PqlResultType::Boolean },
474
+ {{TokenType::FOLLOWS,
475
+ {TokenType::NUMBER, " 1" },
476
+ {TokenType::NUMBER, " 3" }}}};
477
+ expected = {" FALSE" };
478
+ actual.clear ();
479
+ Pql::evaluate (pq, pkb.getQueryInterface (), actual);
480
+ Assert::IsTrue (expected == actual);
481
+
482
+ /* No values (indirect false)
483
+ read r; if i; Select BOOLEAN such that Parent*(i, r)
484
+ */
485
+ pq = {{{" r" , TokenType::READ}, {" i" , TokenType::IF}},
486
+ {PqlResultType::Boolean },
487
+ {{TokenType::PARENT, {TokenType::IF, " i" }, {TokenType::READ, " r" }}}};
488
+ expected = {" FALSE" };
489
+ actual.clear ();
490
+ Pql::evaluate (pq, pkb.getQueryInterface (), actual);
491
+ Assert::IsTrue (expected == actual);
492
+
493
+ /* With values (indirect true)
494
+ assign a; read r; call c; Select BOOLEAN such that Follows(r, a)
495
+ */
496
+ pq = {{{" a" , TokenType::ASSIGN},
497
+ {" r" , TokenType::READ},
498
+ {" c" , TokenType::CALL}},
499
+ {PqlResultType::Boolean },
500
+ {{TokenType::FOLLOWS,
501
+ {TokenType::READ, " r" },
502
+ {TokenType::ASSIGN, " a" }}}};
503
+ expected = {" TRUE" };
504
+ actual.clear ();
505
+ Pql::evaluate (pq, pkb.getQueryInterface (), actual);
506
+ Logger::WriteMessage (actual.front ().c_str ());
507
+ Assert::IsTrue (expected == actual);
508
+ }
454
509
};
455
510
} // namespace IntegrationTesting
0 commit comments