1dc6a84fcSRiver Riddle //===- DebugCounterTest.cpp - Debug Counter Tests -------------------------===//
2dc6a84fcSRiver Riddle //
3dc6a84fcSRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4dc6a84fcSRiver Riddle // See https://llvm.org/LICENSE.txt for license information.
5dc6a84fcSRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6dc6a84fcSRiver Riddle //
7dc6a84fcSRiver Riddle //===----------------------------------------------------------------------===//
8dc6a84fcSRiver Riddle 
9dc6a84fcSRiver Riddle #include "mlir/Support/DebugCounter.h"
10dc6a84fcSRiver Riddle #include "gmock/gmock.h"
11dc6a84fcSRiver Riddle 
12dc6a84fcSRiver Riddle using namespace mlir;
13dc6a84fcSRiver Riddle 
14dc6a84fcSRiver Riddle // DebugActionManager is only enabled in DEBUG mode.
15*6da63573SMogball #if LLVM_ENABLE_ABI_BREAKING_CHECKS
16dc6a84fcSRiver Riddle 
17dc6a84fcSRiver Riddle namespace {
18dc6a84fcSRiver Riddle 
19dc6a84fcSRiver Riddle struct CounterAction : public DebugAction<> {
getTag__anon0710ea080111::CounterAction20dc6a84fcSRiver Riddle   static StringRef getTag() { return "counter-action"; }
getDescription__anon0710ea080111::CounterAction21dc6a84fcSRiver Riddle   static StringRef getDescription() { return "Test action for debug counters"; }
22dc6a84fcSRiver Riddle };
23dc6a84fcSRiver Riddle 
TEST(DebugCounterTest,CounterTest)24dc6a84fcSRiver Riddle TEST(DebugCounterTest, CounterTest) {
25dc6a84fcSRiver Riddle   std::unique_ptr<DebugCounter> counter = std::make_unique<DebugCounter>();
26dc6a84fcSRiver Riddle   counter->addCounter(CounterAction::getTag(), /*countToSkip=*/1,
27dc6a84fcSRiver Riddle                       /*countToStopAfter=*/3);
28dc6a84fcSRiver Riddle 
29dc6a84fcSRiver Riddle   DebugActionManager manager;
30dc6a84fcSRiver Riddle   manager.registerActionHandler(std::move(counter));
31dc6a84fcSRiver Riddle 
32dc6a84fcSRiver Riddle   // The first execution is skipped.
33dc6a84fcSRiver Riddle   EXPECT_FALSE(manager.shouldExecute<CounterAction>());
34dc6a84fcSRiver Riddle 
35dc6a84fcSRiver Riddle   // The counter stops after 3 successful executions.
36dc6a84fcSRiver Riddle   EXPECT_TRUE(manager.shouldExecute<CounterAction>());
37dc6a84fcSRiver Riddle   EXPECT_TRUE(manager.shouldExecute<CounterAction>());
38dc6a84fcSRiver Riddle   EXPECT_TRUE(manager.shouldExecute<CounterAction>());
39dc6a84fcSRiver Riddle   EXPECT_FALSE(manager.shouldExecute<CounterAction>());
40dc6a84fcSRiver Riddle }
41dc6a84fcSRiver Riddle 
42dc6a84fcSRiver Riddle } // namespace
43dc6a84fcSRiver Riddle 
44dc6a84fcSRiver Riddle #endif
45