================
@@ -0,0 +1,93 @@
+//===- unittests/Analysis/Scalable/UnsafeBufferUsageExtractorTest.cpp ----===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM 
Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/Analysis/Scalable/Analyses/UnsafeBufferUsage.h"
+#include "clang/Analysis/Scalable/Model/EntityId.h"
+#include "clang/Analysis/Scalable/Model/EntityIdTable.h"
+#include "clang/Analysis/Scalable/Model/EntityName.h"
+#include "gtest/gtest.h"
+#include <memory>
+
+using namespace clang::ssaf;
+using namespace clang;
+
+namespace {
+
+class UnsafeBufferUsageTest : public testing::Test {
+protected:
+  EntityIdTable Table;
+  UnsafeBufferUsageTUSummaryBuilder Builder;
+};
+
+//////////////////////////////////////////////////////////////
+//                   Data Structure Tests                   //
+//////////////////////////////////////////////////////////////
+
+TEST_F(UnsafeBufferUsageTest, PointerKindVariableComparison) {
+  EntityId E1 = Table.getId({"c:@F@foo", "", {}});
+  EntityId E2 = Table.getId({"c:@F@bar", "", {}});
+
+  auto P1 = Builder.buildPointerKindVariable(E1, 2);
+  auto P2 = Builder.buildPointerKindVariable(E1, 2);
+  auto P3 = Builder.buildPointerKindVariable(E1, 1);
+  auto P4 = Builder.buildPointerKindVariable(E2, 2);
+
+  EXPECT_EQ(P1, P2);
+  EXPECT_NE(P1, P3);
+  EXPECT_NE(P1, P4);
+  EXPECT_NE(P3, P4);
+  EXPECT_TRUE(P3 < P2);
+  EXPECT_TRUE(P3 < P4);
+  EXPECT_FALSE(P1 < P2);
+  EXPECT_FALSE(P2 < P1);
+}
+
+TEST_F(UnsafeBufferUsageTest, UnsafeBufferUsageEntitySummaryTest) {
+  EntityId E1 = Table.getId({"c:@F@foo", "", {}});
+  EntityId E2 = Table.getId({"c:@F@bar", "", {}});
+  EntityId E3 = Table.getId({"c:@F@baz", "", {}});
+
+  auto P1 = Builder.buildPointerKindVariable(E1, 1);
+  auto P2 = Builder.buildPointerKindVariable(E1, 2);
+  auto P3 = Builder.buildPointerKindVariable(E2, 1);
+  auto P4 = Builder.buildPointerKindVariable(E2, 2);
+  auto P5 = Builder.buildPointerKindVariable(E3, 1);
+  auto P6 = Builder.buildPointerKindVariable(E3, 2);
+
+  PointerKindVariableSet Set{P1, P2, P3, P4, P5};
+  auto ES = Builder.buildUnsafeBufferUsageEntitySummary(std::move(Set));
+
+  EXPECT_NE(ES->find(P1), ES->end());
+  EXPECT_NE(ES->find(P2), ES->end());
+  EXPECT_NE(ES->find(P3), ES->end());
+  EXPECT_NE(ES->find(P4), ES->end());
+  EXPECT_NE(ES->find(P5), ES->end());
+  EXPECT_EQ(ES->find(P6), ES->end());
+
+  PointerKindVariableSet Subset1{ES->getSubsetOf(E1).begin(),
+                                 ES->getSubsetOf(E1).end()};
+
+  EXPECT_NE(Subset1.find(P1), Subset1.end());
+  EXPECT_NE(Subset1.find(P2), Subset1.end());
+  EXPECT_EQ(Subset1.size(), static_cast<size_t>(2));
----------------
steakhal wrote:

Something like this should be shorter, and probably more common in gtests than 
explicit casts.
```suggestion
  EXPECT_EQ(Subset1.size(), 2U);
```

https://github.com/llvm/llvm-project/pull/181067
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to