128d04c56SMehdi Amini //===- DebugCounterTest.cpp - Debug Counter Tests -------------------------===//
228d04c56SMehdi Amini //
328d04c56SMehdi Amini // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
428d04c56SMehdi Amini // See https://llvm.org/LICENSE.txt for license information.
528d04c56SMehdi Amini // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
628d04c56SMehdi Amini //
728d04c56SMehdi Amini //===----------------------------------------------------------------------===//
828d04c56SMehdi Amini
928d04c56SMehdi Amini #include "mlir/Debug/Counter.h"
1028d04c56SMehdi Amini #include "mlir/Support/TypeID.h"
1128d04c56SMehdi Amini #include "gmock/gmock.h"
1228d04c56SMehdi Amini
1328d04c56SMehdi Amini using namespace mlir;
1428d04c56SMehdi Amini using namespace mlir::tracing;
1528d04c56SMehdi Amini
1628d04c56SMehdi Amini namespace {
1728d04c56SMehdi Amini
1828d04c56SMehdi Amini struct CounterAction : public ActionImpl<CounterAction> {
1928d04c56SMehdi Amini MLIR_DEFINE_EXPLICIT_INTERNAL_INLINE_TYPE_ID(CounterAction)
2028d04c56SMehdi Amini static constexpr StringLiteral tag = "counter-action";
2128d04c56SMehdi Amini };
2228d04c56SMehdi Amini
TEST(DebugCounterTest,CounterTest)2328d04c56SMehdi Amini TEST(DebugCounterTest, CounterTest) {
24*9b1fe564SMehdi Amini DebugCounter counter;
25*9b1fe564SMehdi Amini counter.addCounter(CounterAction::tag, /*countToSkip=*/1,
2628d04c56SMehdi Amini /*countToStopAfter=*/3);
2728d04c56SMehdi Amini
28*9b1fe564SMehdi Amini int count = 0;
29*9b1fe564SMehdi Amini auto noOp = [&]() {
30*9b1fe564SMehdi Amini ++count;
31*9b1fe564SMehdi Amini return;
32*9b1fe564SMehdi Amini };
3328d04c56SMehdi Amini
3428d04c56SMehdi Amini // The first execution is skipped.
35*9b1fe564SMehdi Amini counter(noOp, CounterAction{});
36*9b1fe564SMehdi Amini EXPECT_EQ(count, 0);
3728d04c56SMehdi Amini
3828d04c56SMehdi Amini // The counter stops after 3 successful executions.
39*9b1fe564SMehdi Amini counter(noOp, CounterAction{});
40*9b1fe564SMehdi Amini EXPECT_EQ(count, 1);
41*9b1fe564SMehdi Amini counter(noOp, CounterAction{});
42*9b1fe564SMehdi Amini EXPECT_EQ(count, 2);
43*9b1fe564SMehdi Amini counter(noOp, CounterAction{});
44*9b1fe564SMehdi Amini EXPECT_EQ(count, 3);
45*9b1fe564SMehdi Amini counter(noOp, CounterAction{});
46*9b1fe564SMehdi Amini EXPECT_EQ(count, 3);
4728d04c56SMehdi Amini }
4828d04c56SMehdi Amini
4928d04c56SMehdi Amini } // namespace
50