summaryrefslogtreecommitdiffstats
path: root/llvm/unittests/ADT/StatisticTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ADT/StatisticTest.cpp')
-rw-r--r--llvm/unittests/ADT/StatisticTest.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/StatisticTest.cpp b/llvm/unittests/ADT/StatisticTest.cpp
new file mode 100644
index 00000000000..3ddfe56cc8f
--- /dev/null
+++ b/llvm/unittests/ADT/StatisticTest.cpp
@@ -0,0 +1,106 @@
+//===- llvm/unittest/ADT/StatisticTest.cpp - Statistic unit tests ---------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/ADT/Statistic.h"
+#include "llvm/Support/raw_ostream.h"
+#include "gtest/gtest.h"
+using namespace llvm;
+
+namespace {
+#define DEBUG_TYPE "unittest"
+STATISTIC(Counter, "Counts things");
+STATISTIC(Counter2, "Counts other things");
+
+TEST(StatisticTest, Count) {
+ EnableStatistics();
+
+ Counter = 0;
+ EXPECT_EQ(Counter, 0u);
+ Counter++;
+ Counter++;
+#if LLVM_ENABLE_STATS
+ EXPECT_EQ(Counter, 2u);
+#else
+ EXPECT_EQ(Counter, 0u);
+#endif
+}
+
+TEST(StatisticTest, Assign) {
+ EnableStatistics();
+
+ Counter = 2;
+#if LLVM_ENABLE_STATS
+ EXPECT_EQ(Counter, 2u);
+#else
+ EXPECT_EQ(Counter, 0u);
+#endif
+}
+
+TEST(StatisticTest, API) {
+ EnableStatistics();
+
+ Counter = 0;
+ EXPECT_EQ(Counter, 0u);
+ Counter++;
+ Counter++;
+#if LLVM_ENABLE_STATS
+ EXPECT_EQ(Counter, 2u);
+#else
+ EXPECT_EQ(Counter, 0u);
+#endif
+
+#if LLVM_ENABLE_STATS
+ const auto Range1 = GetStatistics();
+ EXPECT_NE(Range1.begin(), Range1.end());
+ EXPECT_EQ(Range1.begin() + 1, Range1.end());
+
+ Optional<std::pair<StringRef, unsigned>> S1;
+ Optional<std::pair<StringRef, unsigned>> S2;
+ for (const auto &S : Range1) {
+ if (std::string(S.first) == "Counter")
+ S1 = S;
+ if (std::string(S.first) == "Counter2")
+ S2 = S;
+ }
+
+ EXPECT_NE(S1.hasValue(), false);
+ EXPECT_EQ(S2.hasValue(), false);
+
+ // Counter2 will be registered when it's first touched.
+ Counter2++;
+
+ const auto Range2 = GetStatistics();
+ EXPECT_NE(Range2.begin(), Range2.end());
+ EXPECT_EQ(Range2.begin() + 2, Range2.end());
+
+ S1 = None;
+ S2 = None;
+ for (const auto &S : Range2) {
+ if (std::string(S.first) == "Counter")
+ S1 = S;
+ if (std::string(S.first) == "Counter2")
+ S2 = S;
+ }
+
+ EXPECT_NE(S1.hasValue(), false);
+ EXPECT_NE(S2.hasValue(), false);
+
+ EXPECT_EQ(S1->first, "Counter");
+ EXPECT_EQ(S1->second, 2u);
+
+ EXPECT_EQ(S2->first, "Counter2");
+ EXPECT_EQ(S2->second, 1u);
+#else
+ Counter2++;
+ auto &Range = GetStatistics();
+ EXPECT_EQ(Range.begin(), Range.end());
+#endif
+}
+
+} // end anonymous namespace
OpenPOWER on IntegriCloud