summaryrefslogtreecommitdiff
path: root/test/gtest/lattices.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/gtest/lattices.cpp')
-rw-r--r--test/gtest/lattices.cpp103
1 files changed, 103 insertions, 0 deletions
diff --git a/test/gtest/lattices.cpp b/test/gtest/lattices.cpp
index 75b232b8e..44b8d0132 100644
--- a/test/gtest/lattices.cpp
+++ b/test/gtest/lattices.cpp
@@ -15,6 +15,7 @@
*/
#include "analysis/lattices/bool.h"
+#include "analysis/lattices/flat.h"
#include "analysis/lattices/int.h"
#include "analysis/lattices/inverted.h"
#include "gtest/gtest.h"
@@ -194,3 +195,105 @@ TEST(InvertedLattice, DoubleInverted) {
EXPECT_FALSE(identity.getBottom());
EXPECT_TRUE(identity.getTop());
}
+
+TEST(FlatLattice, GetBottom) {
+ analysis::Flat<int> flat;
+ EXPECT_TRUE(flat.getBottom().isBottom());
+ EXPECT_FALSE(flat.getBottom().getVal());
+ EXPECT_FALSE(flat.getBottom().isTop());
+}
+
+TEST(FlatLattice, GetVal) {
+ analysis::Flat<int> flat;
+ EXPECT_FALSE(flat.get(10).isBottom());
+ ASSERT_TRUE(flat.get(10).getVal());
+ EXPECT_FALSE(flat.get(10).isTop());
+
+ auto val = flat.get(10);
+ EXPECT_EQ(*val.getVal(), 10);
+}
+
+TEST(FlatLattice, GetTop) {
+ analysis::Flat<int> flat;
+ EXPECT_FALSE(flat.getTop().isBottom());
+ EXPECT_FALSE(flat.getTop().getVal());
+ EXPECT_TRUE(flat.getTop().isTop());
+}
+
+TEST(FlatLattice, Compare) {
+ analysis::Flat<int> flat;
+ auto bot = flat.getBottom();
+ auto a = flat.get(0);
+ auto b = flat.get(1);
+ auto top = flat.getTop();
+
+ EXPECT_EQ(flat.compare(bot, bot), analysis::EQUAL);
+ EXPECT_EQ(flat.compare(bot, a), analysis::LESS);
+ EXPECT_EQ(flat.compare(bot, b), analysis::LESS);
+ EXPECT_EQ(flat.compare(bot, top), analysis::LESS);
+
+ EXPECT_EQ(flat.compare(a, bot), analysis::GREATER);
+ EXPECT_EQ(flat.compare(a, a), analysis::EQUAL);
+ EXPECT_EQ(flat.compare(a, b), analysis::NO_RELATION);
+ EXPECT_EQ(flat.compare(a, top), analysis::LESS);
+
+ EXPECT_EQ(flat.compare(b, bot), analysis::GREATER);
+ EXPECT_EQ(flat.compare(b, a), analysis::NO_RELATION);
+ EXPECT_EQ(flat.compare(b, b), analysis::EQUAL);
+ EXPECT_EQ(flat.compare(b, top), analysis::LESS);
+
+ EXPECT_EQ(flat.compare(top, bot), analysis::GREATER);
+ EXPECT_EQ(flat.compare(top, a), analysis::GREATER);
+ EXPECT_EQ(flat.compare(top, b), analysis::GREATER);
+ EXPECT_EQ(flat.compare(top, top), analysis::EQUAL);
+}
+
+TEST(FlatLattice, Join) {
+ analysis::Flat<int> flat;
+ auto elem = flat.getBottom();
+
+ // bot u bot = bot
+ EXPECT_FALSE(flat.join(elem, flat.getBottom()));
+ EXPECT_TRUE(elem.isBottom());
+
+ // bot u top = top
+ EXPECT_TRUE(flat.join(elem, flat.getTop()));
+ EXPECT_TRUE(elem.isTop());
+
+ // bot u 10 = 10
+ elem = flat.getBottom();
+ EXPECT_TRUE(flat.join(elem, flat.get(10)));
+ ASSERT_TRUE(elem.getVal());
+ EXPECT_EQ(*elem.getVal(), 10);
+
+ // 10 u bot = 10
+ EXPECT_FALSE(flat.join(elem, flat.getBottom()));
+ ASSERT_TRUE(elem.getVal());
+ EXPECT_EQ(*elem.getVal(), 10);
+
+ // 10 u 10 = 10
+ EXPECT_FALSE(flat.join(elem, flat.get(10)));
+ ASSERT_TRUE(elem.getVal());
+ EXPECT_EQ(*elem.getVal(), 10);
+
+ // 10 u 999 = top
+ EXPECT_TRUE(flat.join(elem, flat.get(999)));
+ ASSERT_TRUE(elem.isTop());
+
+ // 10 u top = top
+ elem = flat.get(10);
+ EXPECT_TRUE(flat.join(elem, flat.getTop()));
+ ASSERT_TRUE(elem.isTop());
+
+ // top u bot = top
+ EXPECT_FALSE(flat.join(elem, flat.getBottom()));
+ EXPECT_TRUE(elem.isTop());
+
+ // top u 10 = top
+ EXPECT_FALSE(flat.join(elem, flat.get(10)));
+ EXPECT_TRUE(elem.isTop());
+
+ // top u top = top
+ EXPECT_FALSE(flat.join(elem, flat.getTop()));
+ EXPECT_TRUE(elem.isTop());
+}