llvm-project/mlir/unittests/Debug/DebugCounterTest.cpp
Mehdi Amini 9b1fe5649e Delete ActionManager and replace it with a simple callback on the Context
The concept of the ActionManager acts as a sort of "Hub" that can receive
various types of action and dispatch them to a set of registered handlers.
One handler will handle the action or it'll cascade to other handlers.

This model does not really fit the current evolution of the Action tracing
and debugging: we can't foresee a good case where this behavior compose with
the use-case behind the handlers. Instead we simplify it with a single
callback installed on the Context.

Differential Revision: https://reviews.llvm.org/D144811
2023-03-07 08:25:34 +01:00

50 lines
1.3 KiB
C++

//===- DebugCounterTest.cpp - Debug Counter Tests -------------------------===//
//
// 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 "mlir/Debug/Counter.h"
#include "mlir/Support/TypeID.h"
#include "gmock/gmock.h"
using namespace mlir;
using namespace mlir::tracing;
namespace {
struct CounterAction : public ActionImpl<CounterAction> {
MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CounterAction)
static constexpr StringLiteral tag = "counter-action";
};
TEST(DebugCounterTest, CounterTest) {
DebugCounter counter;
counter.addCounter(CounterAction::tag, /*countToSkip=*/1,
/*countToStopAfter=*/3);
int count = 0;
auto noOp = [&]() {
++count;
return;
};
// The first execution is skipped.
counter(noOp, CounterAction{});
EXPECT_EQ(count, 0);
// The counter stops after 3 successful executions.
counter(noOp, CounterAction{});
EXPECT_EQ(count, 1);
counter(noOp, CounterAction{});
EXPECT_EQ(count, 2);
counter(noOp, CounterAction{});
EXPECT_EQ(count, 3);
counter(noOp, CounterAction{});
EXPECT_EQ(count, 3);
}
} // namespace