11#include < attwoodn/expression_tree.hpp>
2+ #include < limits>
23#include < iostream>
34#include < cassert>
45
@@ -8,14 +9,23 @@ struct test_fixture {
89 std::string some_string;
910 const std::string some_const_string = " this IS 4 T3s7 $tRing " ;
1011 char * some_char_ptr;
12+ uint16_t some_uint;
13+
14+ bool is_some_uint_greater_than_zero () const {
15+ return some_uint;
16+ }
1117};
1218
1319void test_string_evaluation ();
1420void test_char_ptr_evaluation ();
21+ void test_uint_evaluation ();
22+ void test_const_func_evaluation ();
1523
1624int main (int argc, char ** argv) {
1725 test_string_evaluation ();
1826 test_char_ptr_evaluation ();
27+ test_uint_evaluation ();
28+ test_const_func_evaluation ();
1929
2030 return EXIT_SUCCESS;
2131}
@@ -371,4 +381,224 @@ void test_char_ptr_evaluation() {
371381 fixture.some_char_ptr = &c_too;
372382 assert (expr->evaluate (fixture));
373383 }
384+ }
385+
386+ void test_uint_evaluation () {
387+ test_fixture fixture;
388+
389+ // test equals
390+ {
391+ auto expr = make_expr (&test_fixture::some_uint, op::equals, (uint16_t ) 9001 );
392+
393+ fixture.some_uint = 0 ;
394+ assert (!expr->evaluate (fixture));
395+
396+ fixture.some_uint = 1 ;
397+ assert (!expr->evaluate (fixture));
398+
399+ fixture.some_uint = -1 ;
400+ assert (!expr->evaluate (fixture));
401+
402+ fixture.some_uint = 9000 ;
403+ assert (!expr->evaluate (fixture));
404+
405+ fixture.some_uint = 9002 ;
406+ assert (!expr->evaluate (fixture));
407+
408+ fixture.some_uint = 9001 ;
409+ assert (expr->evaluate (fixture));
410+ }
411+
412+ // test not_equals
413+ {
414+ auto expr = make_expr (&test_fixture::some_uint, op::not_equals, (uint16_t ) 9001 );
415+
416+ fixture.some_uint = 0 ;
417+ assert (expr->evaluate (fixture));
418+
419+ fixture.some_uint = 1 ;
420+ assert (expr->evaluate (fixture));
421+
422+ fixture.some_uint = -1 ;
423+ assert (expr->evaluate (fixture));
424+
425+ fixture.some_uint = 9000 ;
426+ assert (expr->evaluate (fixture));
427+
428+ fixture.some_uint = 9002 ;
429+ assert (expr->evaluate (fixture));
430+
431+ fixture.some_uint = 9001 ;
432+ assert (!expr->evaluate (fixture));
433+ }
434+
435+ // test less_than
436+ {
437+ auto expr = make_expr (&test_fixture::some_uint, op::less_than, (uint16_t ) 9001 );
438+
439+ fixture.some_uint = 0 ;
440+ assert (expr->evaluate (fixture));
441+
442+ fixture.some_uint = 1 ;
443+ assert (expr->evaluate (fixture));
444+
445+ fixture.some_uint = -1 ;
446+ assert (!expr->evaluate (fixture));
447+
448+ fixture.some_uint = 9000 ;
449+ assert (expr->evaluate (fixture));
450+
451+ fixture.some_uint = 9002 ;
452+ assert (!expr->evaluate (fixture));
453+
454+ fixture.some_uint = 9001 ;
455+ assert (!expr->evaluate (fixture));
456+ }
457+
458+ // test greater_than
459+ {
460+ auto expr = make_expr (&test_fixture::some_uint, op::greater_than, (uint16_t ) 9001 );
461+
462+ fixture.some_uint = 0 ;
463+ assert (!expr->evaluate (fixture));
464+
465+ fixture.some_uint = 1 ;
466+ assert (!expr->evaluate (fixture));
467+
468+ fixture.some_uint = -1 ;
469+ assert (expr->evaluate (fixture));
470+
471+ fixture.some_uint = 9000 ;
472+ assert (!expr->evaluate (fixture));
473+
474+ fixture.some_uint = 9002 ;
475+ assert (expr->evaluate (fixture));
476+
477+ fixture.some_uint = 9001 ;
478+ assert (!expr->evaluate (fixture));
479+ }
480+ }
481+
482+ void test_const_func_evaluation () {
483+ test_fixture fixture;
484+
485+ // test equals
486+ {
487+ auto expr1 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::equals, true );
488+ auto expr2 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::equals, false );
489+
490+ fixture.some_uint = 0 ;
491+ assert (!expr1->evaluate (fixture));
492+ assert (expr2->evaluate (fixture));
493+
494+ fixture.some_uint = std::numeric_limits<uint16_t >::min ();
495+ assert (!expr1->evaluate (fixture));
496+ assert (expr2->evaluate (fixture));
497+
498+ fixture.some_uint = 1 ;
499+ assert (expr1->evaluate (fixture));
500+ assert (!expr2->evaluate (fixture));
501+
502+ fixture.some_uint = 500 ;
503+ assert (expr1->evaluate (fixture));
504+ assert (!expr2->evaluate (fixture));
505+
506+ fixture.some_uint = std::numeric_limits<uint16_t >::max ();
507+ assert (expr1->evaluate (fixture));
508+ assert (!expr2->evaluate (fixture));
509+
510+ fixture.some_uint = -1 ;
511+ assert (expr1->evaluate (fixture));
512+ assert (!expr2->evaluate (fixture));
513+ }
514+
515+ // test not_equals
516+ {
517+ auto expr1 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::not_equals, true );
518+ auto expr2 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::not_equals, false );
519+
520+ fixture.some_uint = 0 ;
521+ assert (expr1->evaluate (fixture));
522+ assert (!expr2->evaluate (fixture));
523+
524+ fixture.some_uint = std::numeric_limits<uint16_t >::min ();
525+ assert (expr1->evaluate (fixture));
526+ assert (!expr2->evaluate (fixture));
527+
528+ fixture.some_uint = 1 ;
529+ assert (!expr1->evaluate (fixture));
530+ assert (expr2->evaluate (fixture));
531+
532+ fixture.some_uint = 500 ;
533+ assert (!expr1->evaluate (fixture));
534+ assert (expr2->evaluate (fixture));
535+
536+ fixture.some_uint = std::numeric_limits<uint16_t >::max ();
537+ assert (!expr1->evaluate (fixture));
538+ assert (expr2->evaluate (fixture));
539+
540+ fixture.some_uint = -1 ;
541+ assert (!expr1->evaluate (fixture));
542+ assert (expr2->evaluate (fixture));
543+ }
544+
545+ // test less_than
546+ {
547+ auto expr1 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::less_than, true );
548+ auto expr2 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::less_than, false );
549+
550+ fixture.some_uint = 0 ;
551+ assert (expr1->evaluate (fixture));
552+ assert (!expr2->evaluate (fixture));
553+
554+ fixture.some_uint = std::numeric_limits<uint16_t >::min ();
555+ assert (expr1->evaluate (fixture));
556+ assert (!expr2->evaluate (fixture));
557+
558+ fixture.some_uint = 1 ;
559+ assert (!expr1->evaluate (fixture));
560+ assert (!expr2->evaluate (fixture));
561+
562+ fixture.some_uint = 500 ;
563+ assert (!expr1->evaluate (fixture));
564+ assert (!expr2->evaluate (fixture));
565+
566+ fixture.some_uint = std::numeric_limits<uint16_t >::max ();
567+ assert (!expr1->evaluate (fixture));
568+ assert (!expr2->evaluate (fixture));
569+
570+ fixture.some_uint = -1 ;
571+ assert (!expr1->evaluate (fixture));
572+ assert (!expr2->evaluate (fixture));
573+ }
574+
575+ // test greater_than
576+ {
577+ auto expr1 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::greater_than, true );
578+ auto expr2 = make_expr (&test_fixture::is_some_uint_greater_than_zero, &op::greater_than, false );
579+
580+ fixture.some_uint = 0 ;
581+ assert (!expr1->evaluate (fixture));
582+ assert (!expr2->evaluate (fixture));
583+
584+ fixture.some_uint = std::numeric_limits<uint16_t >::min ();
585+ assert (!expr1->evaluate (fixture));
586+ assert (!expr2->evaluate (fixture));
587+
588+ fixture.some_uint = 1 ;
589+ assert (!expr1->evaluate (fixture));
590+ assert (expr2->evaluate (fixture));
591+
592+ fixture.some_uint = 500 ;
593+ assert (!expr1->evaluate (fixture));
594+ assert (expr2->evaluate (fixture));
595+
596+ fixture.some_uint = std::numeric_limits<uint16_t >::max ();
597+ assert (!expr1->evaluate (fixture));
598+ assert (expr2->evaluate (fixture));
599+
600+ fixture.some_uint = -1 ;
601+ assert (!expr1->evaluate (fixture));
602+ assert (expr2->evaluate (fixture));
603+ }
374604}
0 commit comments