diff options
Diffstat (limited to 'llvm/unittests/ADT/StatisticTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/StatisticTest.cpp | 106 |
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 |