Static Value-Flow Analysis
Loading...
Searching...
No Matches
Public Member Functions | List of all members
AETest Class Reference

Public Member Functions

 AETest ()=default
 
 ~AETest ()=default
 
void testBinaryOpStmt ()
 
void testAbsState ()
 

Detailed Description

Definition at line 626 of file ae.cpp.

Constructor & Destructor Documentation

◆ AETest()

AETest::AETest ( )
default

◆ ~AETest()

AETest::~AETest ( )
default

Member Function Documentation

◆ testAbsState()

void AETest::testAbsState ( )
inline

Definition at line 829 of file ae.cpp.

830 {
832 as[1] = IntervalValue(1, 3);
833 as[2] = IntervalValue(2, 7);
834 as[3] = AddressValue(0x7f000007);
835 as[4] = AddressValue(0x7f000008);
836 // store: *as[3] = as[1], *as[4] = as[2]
837 for (auto addr : as[3].getAddrs()) as.store(addr, as[1]);
838 for (auto addr : as[4].getAddrs()) as.store(addr, as[2]);
839 as.printAbstractState();
840 // load: verify *as[3] == as[1] && *as[4] == as[2]
842 for (auto addr : as[3].getAddrs()) v3.join_with(as.load(addr));
843 for (auto addr : as[4].getAddrs()) v4.join_with(as.load(addr));
844 assert(v3.equals(as[1]) && v4.equals(as[2]));
845 }
llvm::IRBuilder IRBuilder
Definition BasicTypes.h:76

◆ testBinaryOpStmt()

void AETest::testBinaryOpStmt ( )
inline

Definition at line 633 of file ae.cpp.

634 {
635 // test division /
639 assert((IntervalValue(4) / IntervalValue(2)).equals(IntervalValue(2)));
640 assert((IntervalValue(3) / IntervalValue(2)).equals(IntervalValue(1))); //
641 assert((IntervalValue(-3) / IntervalValue(2)).equals(IntervalValue(-1))); //
642 assert((IntervalValue(1, 3) / IntervalValue(2)).equals(IntervalValue(0, 1))); //
643 assert((IntervalValue(2, 7) / IntervalValue(2)).equals(IntervalValue(1, 3))); //
644 assert((IntervalValue(-3, 3) / IntervalValue(2)).equals(IntervalValue(-1, 1)));
647 assert((IntervalValue(1, 3) / IntervalValue(1, 2)).equals(IntervalValue(0, 3)));//
648 assert((IntervalValue(-3, 3) / IntervalValue(1, 2)).equals(IntervalValue(-3, 3)));
649 assert((IntervalValue(2, 7) / IntervalValue(-2, 3)).equals(IntervalValue(-7, 7))); //
650 assert((IntervalValue(-2, 7) / IntervalValue(-2, 3)).equals(IntervalValue(-7, 7))); //
653
656 assert((IntervalValue(-6, -3) / IntervalValue(3, 9)).equals(IntervalValue(-2, 0)));
657 assert((IntervalValue(-6, 6) / IntervalValue(3, 9)).equals(IntervalValue(-2, 2)));
658
659 // test remainder %
663 assert((IntervalValue(4) % IntervalValue(2)).equals(IntervalValue(0)));
664 assert((IntervalValue(3) % IntervalValue(2)).equals(IntervalValue(1)));
665 assert((IntervalValue(-3) % IntervalValue(2)).equals(IntervalValue(-1)));
666 assert((IntervalValue(1, 3) % IntervalValue(2)).equals(IntervalValue(0, 1)));
667 assert((IntervalValue(2, 7) % IntervalValue(2)).equals(IntervalValue(0, 1)));
668 assert((IntervalValue(-3, 3) % IntervalValue(2)).equals(IntervalValue(-1, 1)));
671 assert((IntervalValue(1, 3) % IntervalValue(1, 2)).equals(IntervalValue(0, 1)));
672 assert((IntervalValue(-3, 3) % IntervalValue(1, 2)).equals(IntervalValue(-1, 1)));
673 assert((IntervalValue(2, 7) % IntervalValue(-2, 3)).equals(IntervalValue::top())); //
674 assert((IntervalValue(-2, 7) % IntervalValue(-2, 3)).equals(IntervalValue::top())); //
679 assert((IntervalValue(-6, -3) % IntervalValue(3, 9)).equals(IntervalValue(-6, 0)));
680 assert((IntervalValue(-6, 6) % IntervalValue(3, 9)).equals(IntervalValue(-6, 6)));
681
682 // shl <<
690 assert((IntervalValue(0, 0) << IntervalValue(2, 2)).equals(IntervalValue(0, 0)));
691 assert((IntervalValue(2, 2) << IntervalValue(3, 3)).equals(IntervalValue(16, 16)));
692 assert((IntervalValue(-2, -2) << IntervalValue(3, 3)).equals(IntervalValue(-16, -16)));
693
697 assert((IntervalValue(4) << IntervalValue(2)).equals(IntervalValue(16)));
698 assert((IntervalValue(3) << IntervalValue(2)).equals(IntervalValue(12)));
699 assert((IntervalValue(-3) << IntervalValue(2)).equals(IntervalValue(-12)));
701 assert((IntervalValue(1, 3) << IntervalValue(2)).equals(IntervalValue(4, 12)));
702 assert((IntervalValue(2, 7) << IntervalValue(2)).equals(IntervalValue(8, 28)));
703 assert((IntervalValue(-3, 3) << IntervalValue(2)).equals(IntervalValue(-12, 12)));
706 assert((IntervalValue(1, 3) << IntervalValue(1, 2)).equals(IntervalValue(2, 12)));
707 assert((IntervalValue(-3, 3) << IntervalValue(1, 2)).equals(IntervalValue(-12, 12)));
708 assert((IntervalValue(2, 7) << IntervalValue(-2, 3)).equals(IntervalValue(2, 56)));
709 assert((IntervalValue(-2, 7) << IntervalValue(-2, 3)).equals(IntervalValue(-16, 56)));
714 assert((IntervalValue(-6, -3) << IntervalValue(3, 9)).equals(IntervalValue(-3072, -24)));
715 assert((IntervalValue(-6, 6) << IntervalValue(3, 9)).equals(IntervalValue(-3072, 3072)));
718
719
720 // shr >>
728 assert((IntervalValue(0) >> IntervalValue(2)).equals(IntervalValue(0)));
729 assert((IntervalValue(15) >> IntervalValue(2)).equals(IntervalValue(3)));
730 assert((IntervalValue(-15) >> IntervalValue(2)).equals(IntervalValue(-4)));
731
735 assert((IntervalValue(15) >> IntervalValue(2)).equals(IntervalValue(3)));
736 assert((IntervalValue(1) >> IntervalValue(2)).equals(IntervalValue(0)));
737 assert((IntervalValue(-15) >> IntervalValue(2)).equals(IntervalValue(-4)));
739 assert((IntervalValue(1, 3) >> IntervalValue(2)).equals(IntervalValue(0)));
740 assert((IntervalValue(2, 7) >> IntervalValue(2)).equals(IntervalValue(0, 1)));
741 assert((IntervalValue(-15, 15) >> IntervalValue(2)).equals(IntervalValue(-4, 3)));
744 assert((IntervalValue(0, 15) >> IntervalValue(1, 2)).equals(IntervalValue(0, 7)));
745 assert((IntervalValue(-17, 15) >> IntervalValue(1, 2)).equals(IntervalValue(-9, 7)));
746 assert((IntervalValue(2, 7) >> IntervalValue(-2, 3)).equals(IntervalValue(0, 7)));
747 assert((IntervalValue(-2, 7) >> IntervalValue(-2, 3)).equals(IntervalValue(-2, 7)));
752 assert((IntervalValue(-6, -3) >> IntervalValue(2, 3)).equals(IntervalValue(-2, -1)));
753 assert((IntervalValue(-6, 6) >> IntervalValue(2, 3)).equals(IntervalValue(-2, 1)));
756
757 // and &
761 assert((IntervalValue(4) & IntervalValue(2)).equals(IntervalValue(0)));
762 assert((IntervalValue(3) & IntervalValue(2)).equals(IntervalValue(2)));
763 assert((IntervalValue(-3) & IntervalValue(2)).equals(IntervalValue(0)));
764 assert((IntervalValue(1, 3) & IntervalValue(2)).equals(IntervalValue(0, 2)));
765 assert((IntervalValue(2, 7) & IntervalValue(2)).equals(IntervalValue(0, 2)));
766 assert((IntervalValue(-3, 3) & IntervalValue(2)).equals(IntervalValue(0, 2)));
769 assert((IntervalValue(1, 3) & IntervalValue(1, 2)).equals(IntervalValue(0, 2)));
770 assert((IntervalValue(-3, 3) & IntervalValue(1, 2)).equals(IntervalValue(0, 2)));
771 assert((IntervalValue(2, 7) & IntervalValue(-2, 3)).equals(IntervalValue(0, 7)));
772 assert((IntervalValue(-2, 7) & IntervalValue(-2, 3)).equals(IntervalValue::top()));
777 assert((IntervalValue(-6, -3) & IntervalValue(3, 9)).equals(IntervalValue(0, 9)));
778 assert((IntervalValue(-6, 6) & IntervalValue(3, 9)).equals(IntervalValue(0, 9)));
779
780 // Or |
785 assert((IntervalValue(4) | IntervalValue(2)).equals(IntervalValue(6)));
786 assert((IntervalValue(3) | IntervalValue(2)).equals(IntervalValue(3)));
787 assert((IntervalValue(-3) | IntervalValue(2)).equals(IntervalValue(-1)));
788 assert((IntervalValue(1, 3) | IntervalValue(2)).equals(IntervalValue(0, 3)));
789 assert((IntervalValue(2, 7) | IntervalValue(2)).equals(IntervalValue(0, 7)));
790 assert((IntervalValue(-3, 3) | IntervalValue(2)).equals(IntervalValue::top()));
793 assert((IntervalValue(1, 3) | IntervalValue(1, 2)).equals(IntervalValue(0, 3)));
794 assert((IntervalValue(-3, 3) | IntervalValue(1, 2)).equals(IntervalValue::top()));
795 assert((IntervalValue(2, 7) | IntervalValue(-2, 3)).equals(IntervalValue::top()));
796 assert((IntervalValue(-2, 7) | IntervalValue(-2, 3)).equals(IntervalValue::top()));
801 assert((IntervalValue(-6, -3) | IntervalValue(3, 9)).equals(IntervalValue::top()));
802 assert((IntervalValue(-6, 6) | IntervalValue(3, 9)).equals(IntervalValue::top()));
803
804 // Xor ^
809 assert((IntervalValue(4) ^ IntervalValue(2)).equals(IntervalValue(6)));
810 assert((IntervalValue(3) ^ IntervalValue(2)).equals(IntervalValue(1)));
811 assert((IntervalValue(-3) ^ IntervalValue(2)).equals(IntervalValue(-1)));
812 assert((IntervalValue(1, 3) ^ IntervalValue(2)).equals(IntervalValue(0, 3)));
813 assert((IntervalValue(2, 7) ^ IntervalValue(2)).equals(IntervalValue(0, 7)));
814 assert((IntervalValue(-3, 3) ^ IntervalValue(2)).equals(IntervalValue::top()));
817 assert((IntervalValue(1, 3) ^ IntervalValue(1, 2)).equals(IntervalValue(0, 3)));
818 assert((IntervalValue(-3, 3) ^ IntervalValue(1, 2)).equals(IntervalValue::top()));
819 assert((IntervalValue(2, 7) ^ IntervalValue(-2, 3)).equals(IntervalValue::top()));
820 assert((IntervalValue(-2, 7) ^ IntervalValue(-2, 3)).equals(IntervalValue::top()));
825 assert((IntervalValue(-6, -3) ^ IntervalValue(3, 9)).equals(IntervalValue::top()));
826 assert((IntervalValue(-6, 6) ^ IntervalValue(3, 9)).equals(IntervalValue::top()));
827 }
static BoundedInt minus_infinity()
Get minus infinity -inf.
static IntervalValue bottom()
Create the bottom IntervalValue [+inf, -inf].
static BoundedInt plus_infinity()
Get plus infinity +inf.
static IntervalValue top()
Create the IntervalValue [-inf, +inf].

The documentation for this class was generated from the following file: