llvm-project/llvm/unittests/ADT/StatisticTest.cpp

107 lines
2.3 KiB
C++

//===- 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