diff --git a/.codespell_ignore_words b/.codespell_ignore_words new file mode 100644 index 000000000..ab09b3c2f --- /dev/null +++ b/.codespell_ignore_words @@ -0,0 +1,7 @@ +INOUT +InOut +delimeter +Succesful +worl +valu +Exeption diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e6ace8262..d491f36d9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -42,3 +42,13 @@ repos: hooks: - id: clang-format args: ['-fallback-style=none', '-i'] + + # Spell check + - repo: https://github.com/codespell-project/codespell + rev: v2.4.1 + hooks: + - id: codespell + additional_dependencies: + - tomli + args: + [--toml=./pyproject.toml] diff --git a/CHANGELOG.rst b/CHANGELOG.rst index da6552d80..5cdcab8ec 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,7 +17,7 @@ Changelog for package behaviortree_cpp * Fix dangling‐capture in TestNodeConfig * Fix Precondition to only check condition once (`#904 `_) * fix issue 945 -* extend JSON convertion to include vectors (`#965 `_) +* extend JSON conversion to include vectors (`#965 `_) * Fix CI, add BUILD_TESTS and remove catkin support * Fix testing CMake issue to resolve Rolling regression (`#961 `_) * Bug fix/set blackboard (`#955 `_) @@ -116,7 +116,7 @@ Changelog for package behaviortree_cpp * warn about overwritten enums * fix ambiguous to_json * Extend unit test for blackboard backup to run the second tree (`#789 `_) -* json convertion changed and +* json conversion changed and * issue `#755 `_ : add backchaining test and change reactive nodes checks (`#770 `_) * Update switch_node.h * test moved and port remapping fixed @@ -393,7 +393,7 @@ Changelog for package behaviortree_cpp * better include paths * Control node and Decorators RUNNING before first child * blackboard: update getKeys and add mutex to scripting -* add [[nodiscard]] and some othe minor changes +* add [[nodiscard]] and some other minor changes * add screenshot * change the behavior of tickOnce to actually loop is wake up signal is… (`#522 `_) * change the behavior of tickOnce to actually loop is wake up signal is received @@ -492,7 +492,7 @@ Changelog for package behaviortree_cpp dependency explicitly. * Change order of lock to prevent deadlock. (`#368 `_) Resolves `#367 `_. -* Fix `#320 `_ : forbit refrences in Any +* Fix `#320 `_ : forbid references in Any * Update action_node.h * Contributors: Adam Sasine, Davide Faconti, Fabian Schurig, Griswald Brooks, Hyeongsik Min, Robodrome, imgbot[bot], panwauu @@ -839,9 +839,9 @@ Changelog for package behaviortree_cpp * Conan package distribution (#39) * Non-functional refactoring of xml_parsing to clean up the code * cosmetic changes in the code of BehaviorTreeFactory -* XML schema. Related to enchancement #40 +* XML schema. Related to enhancement #40 * call setRegistrationName() for built-in Nodes - The methos is called by BehaviorTreefactory, therefore it + The method is called by BehaviorTreefactory, therefore it registrationName is empty if trees are created programmatically. * Reset reference count when destroying logger (issue #38) * Contributors: Davide Facont, Davide Faconti, Uilian Ries @@ -857,7 +857,7 @@ Changelog for package behaviortree_cpp ------------------ * adding virtual TreeNode::onInit() [issue #33] * fix issue #34 : if you don't implement convertFromString, it will compile but it may throw -* Pretty demangled names and obsolate comments removed +* Pretty demangled names and obsolete comments removed * bug fixes * more comments * [enhancement #32]: add CoroActionNode and rename ActionNode as "AsynActionNode" @@ -924,7 +924,7 @@ Changelog for package behaviortree_cpp * Fix: registerBuilder did not register the manifest. It was "broken" as public API method * Use the Pimpl idiom to hide zmq from the header file * move header of minitrace in the cpp file -* Fixed a crash occuring when you didn't initialized a Tree object (#20) +* Fixed a crash occurring when you didn't initialized a Tree object (#20) * Fix issue #16 * add ParallelNode to pre-registered entries in factory (issue #13) * removed M_PI diff --git a/cmake/conan.cmake b/cmake/conan.cmake index 3fa9a26ba..d36c5ed44 100644 --- a/cmake/conan.cmake +++ b/cmake/conan.cmake @@ -116,7 +116,7 @@ macro(_conan_check_language) set(LANGUAGE C) set(USING_CXX 0) else () - message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unabled to detect compiler version.") + message(FATAL_ERROR "Conan: Neither C or C++ was detected as a language for the project. Unable to detect compiler version.") endif() endmacro() @@ -1050,7 +1050,7 @@ macro(conan_config_install) endif() if(DEFINED CONAN_ARGS) - # Convert ; seperated multi arg list into space seperated string + # Convert ; separated multi arg list into space separated string string(REPLACE ";" " " l_CONAN_ARGS "${CONAN_ARGS}") set(CONAN_ARGS_ARGS "--args=${l_CONAN_ARGS}") endif() diff --git a/examples/t12_default_ports.cpp b/examples/t12_default_ports.cpp index 8fa866a93..91d2f72aa 100644 --- a/examples/t12_default_ports.cpp +++ b/examples/t12_default_ports.cpp @@ -22,7 +22,7 @@ struct Point2D } }; -// Allow bi-directional convertion to JSON +// Allow bi-directional conversion to JSON BT_JSON_CONVERTER(Point2D, point) { add_field("x", &point.x); diff --git a/examples/t15_nodes_mocking.cpp b/examples/t15_nodes_mocking.cpp index a4a650130..caef9e224 100644 --- a/examples/t15_nodes_mocking.cpp +++ b/examples/t15_nodes_mocking.cpp @@ -147,7 +147,7 @@ int main(int argc, char** argv) factory.loadSubstitutionRuleFromJSON(json_text); } //--------------------------------------------------------------- - // IMPORTANT: all substiutions must be done BEFORE creating the tree + // IMPORTANT: all substitutions must be done BEFORE creating the tree // During the construction phase of the tree, the substitution // rules will be used to instantiate the test nodes, instead of the // original ones. @@ -158,7 +158,7 @@ int main(int argc, char** argv) return 0; } -/* Expecte output: +/* Expected output: ----- Nodes fullPath() ------- Sequence::1 diff --git a/examples/t16_global_blackboard.cpp b/examples/t16_global_blackboard.cpp index 956bbe2c2..38bf35b14 100644 --- a/examples/t16_global_blackboard.cpp +++ b/examples/t16_global_blackboard.cpp @@ -97,7 +97,7 @@ int main() return 0; } -/* Expecte output: +/* Expected output: [main_print] val: 1 [sub_print] val: 1 diff --git a/include/behaviortree_cpp/action_node.h b/include/behaviortree_cpp/action_node.h index 3f9b64bf4..409e57987 100644 --- a/include/behaviortree_cpp/action_node.h +++ b/include/behaviortree_cpp/action_node.h @@ -99,10 +99,10 @@ class SimpleActionNode : public SyncActionNode * IMPORTANT: this action is quite hard to implement correctly. * Please make sure that you know what you are doing. * - * - In your overriden tick() method, you must check periodically + * - In your overridden tick() method, you must check periodically * the result of the method isHaltRequested() and stop your execution accordingly. * - * - in the overriden halt() method, you can do some cleanup, but do not forget to + * - in the overridden halt() method, you can do some cleanup, but do not forget to * invoke the base class method ThreadedAction::halt(); * * - remember, with few exceptions, a halted ThreadedAction must return NodeStatus::IDLE. diff --git a/include/behaviortree_cpp/actions/pop_from_queue.hpp b/include/behaviortree_cpp/actions/pop_from_queue.hpp index a2ebb1fe1..34b905fde 100644 --- a/include/behaviortree_cpp/actions/pop_from_queue.hpp +++ b/include/behaviortree_cpp/actions/pop_from_queue.hpp @@ -20,7 +20,7 @@ /** * Template Action used in ex04_waypoints.cpp example. * - * Its purpose is to do make it easy to create while loops wich consume the elements of a queue. + * Its purpose is to do make it easy to create while loops which consume the elements of a queue. * * Note that modifying the queue is not thread safe, therefore the action that creates the queue * or push elements into it, must be Synchronous. @@ -47,7 +47,7 @@ struct ProtectedQueue * * We avoid this using reference semantic (wrapping the object in a shared_ptr). * Unfortunately, remember that this makes our access to the list not thread-safe! - * This is the reason why we add a mutex to be used when modyfying the ProtectedQueue::items + * This is the reason why we add a mutex to be used when modifying the ProtectedQueue::items * * */ @@ -95,7 +95,7 @@ class PopFromQueue : public SyncActionNode }; /** - * Get the size of a queue. Usefull is you want to write something like: + * Get the size of a queue. Useful when you want to write something like: * * * diff --git a/include/behaviortree_cpp/actions/set_blackboard_node.h b/include/behaviortree_cpp/actions/set_blackboard_node.h index 1a240c3db..05282c0c0 100644 --- a/include/behaviortree_cpp/actions/set_blackboard_node.h +++ b/include/behaviortree_cpp/actions/set_blackboard_node.h @@ -44,7 +44,7 @@ class SetBlackboardNode : public SyncActionNode static PortsList providedPorts() { - return { InputPort("value", "Value to be written int othe output_key"), + return { InputPort("value", "Value to be written into the output_key"), BidirectionalPort("output_key", "Name of the blackboard entry where the " "value should be written") }; } diff --git a/include/behaviortree_cpp/actions/test_node.h b/include/behaviortree_cpp/actions/test_node.h index 1c10cbe18..9aaabb829 100644 --- a/include/behaviortree_cpp/actions/test_node.h +++ b/include/behaviortree_cpp/actions/test_node.h @@ -50,7 +50,7 @@ struct TestNodeConfig * 3. Either complete immediately (synchronous action), or after a * given period of time (asynchronous action) * - * This behavior is changed by the parameters pased with TestNodeConfig. + * This behavior is changed by the parameters passed with TestNodeConfig. * * This particular node is created by the factory when TestNodeConfig is * added as a substitution rule: diff --git a/include/behaviortree_cpp/bt_factory.h b/include/behaviortree_cpp/bt_factory.h index d7fadd67a..020c9ea1d 100644 --- a/include/behaviortree_cpp/bt_factory.h +++ b/include/behaviortree_cpp/bt_factory.h @@ -475,7 +475,7 @@ class BehaviorTreeFactory /** * @brief addSubstitutionRule replace a node with another one when the tree is * created. - * If the rule ia a string, we will use a diferent node type (already registered) + * If the rule ia a string, we will use a different node type (already registered) * instead. * If the rule is a TestNodeConfig, a test node with that configuration will be created instead. * @@ -526,7 +526,7 @@ std::vector BlackboardBackup(const BT::Tree& tree); * @brief BlackboardRestore uses Blackboard::cloneInto to restore * all the blackboards of the tree * - * @param backup a vectror of blackboards + * @param backup a vector of blackboards * @param tree the destination */ void BlackboardRestore(const std::vector& backup, BT::Tree& tree); diff --git a/include/behaviortree_cpp/decorators/run_once_node.h b/include/behaviortree_cpp/decorators/run_once_node.h index a40d86cdb..a3083d97e 100644 --- a/include/behaviortree_cpp/decorators/run_once_node.h +++ b/include/behaviortree_cpp/decorators/run_once_node.h @@ -42,7 +42,7 @@ class RunOnceNode : public DecoratorNode { return { InputPort("then_skip", true, "If true, skip after the first execution, " - "otherwise return the same NodeStatus returned once bu the " + "otherwise return the same NodeStatus returned once by the " "child.") }; } diff --git a/include/behaviortree_cpp/flatbuffers/bt_flatbuffer_helper.h b/include/behaviortree_cpp/flatbuffers/bt_flatbuffer_helper.h index 426ccbe2d..6629cdf54 100644 --- a/include/behaviortree_cpp/flatbuffers/bt_flatbuffer_helper.h +++ b/include/behaviortree_cpp/flatbuffers/bt_flatbuffer_helper.h @@ -136,7 +136,7 @@ inline void CreateFlatbuffersBehaviorTree(flatbuffers::FlatBufferBuilder& builde builder.Finish(behavior_tree); } -/** Serialize manually the informations about state transition +/** Serialize manually the information about state transition * No flatbuffer serialization here */ inline SerializedTransition SerializeTransition(uint16_t UID, Duration timestamp, diff --git a/include/behaviortree_cpp/json_export.h b/include/behaviortree_cpp/json_export.h index 3eeee714b..a7f398814 100644 --- a/include/behaviortree_cpp/json_export.h +++ b/include/behaviortree_cpp/json_export.h @@ -83,17 +83,17 @@ class JsonExporter /** * @brief Register new JSON converters with addConverter(). * You should used first the macro BT_JSON_CONVERTER. - * The convertions from/to vector are automatically registered. + * The conversions from/to vector are automatically registered. */ template void addConverter(); /** * @brief addConverter register a to_json function that converts a json to a type T. - * The convertion to std:vector is automatically registered. + * The conversion to std:vector is automatically registered. * * @param to_json the function with signature void(const T&, nlohmann::json&) - * @param add_type if true, add a field called [__type] with the name ofthe type. + * @param add_type if true, add a field called [__type] with the name of the type. */ template void addConverter(std::function to_json, @@ -101,7 +101,7 @@ class JsonExporter /** * @brief addConverter register a from_json function that converts a json to a type T. - * The convertions from std::vector is automatically registered. + * The conversions from std::vector is automatically registered. * * @param from_json the function with signature void(const nlohmann::json&, T&) */ diff --git a/include/behaviortree_cpp/loggers/groot2_protocol.h b/include/behaviortree_cpp/loggers/groot2_protocol.h index 507f2a00a..5c27b5cb5 100644 --- a/include/behaviortree_cpp/loggers/groot2_protocol.h +++ b/include/behaviortree_cpp/loggers/groot2_protocol.h @@ -27,11 +27,11 @@ namespace BT::Monitor enum RequestType : uint8_t { - // Request the entire tree defintion as XML + // Request the entire tree definition as XML FULLTREE = 'T', - // Request the staus of all the nodes + // Request the status of all the nodes STATUS = 'S', - // retrieve the valus in a set of blackboards + // retrieve the values in a set of blackboards BLACKBOARD = 'B', // Groot requests the insertion of a hook diff --git a/include/behaviortree_cpp/scripting/operators.hpp b/include/behaviortree_cpp/scripting/operators.hpp index 3033767de..4d41b6a88 100644 --- a/include/behaviortree_cpp/scripting/operators.hpp +++ b/include/behaviortree_cpp/scripting/operators.hpp @@ -27,7 +27,7 @@ using SimpleString = SafeAny::SimpleString; using expr_ptr = std::shared_ptr; -// extended strin to number that consider enums and booleans +// extended string to number that consider enums and booleans inline double StringToDouble(const Any& value, const Environment& env) { const auto str = value.cast(); diff --git a/include/behaviortree_cpp/tree_node.h b/include/behaviortree_cpp/tree_node.h index bd77c4c72..0087ce210 100644 --- a/include/behaviortree_cpp/tree_node.h +++ b/include/behaviortree_cpp/tree_node.h @@ -99,7 +99,7 @@ struct NodeConfig const TreeNodeManifest* manifest = nullptr; - // Numberic unique identifier + // Numeric unique identifier uint16_t uid = 0; // Unique human-readable name, that encapsulate the subtree // hierarchy, for instance, given 2 nested trees, it should be: @@ -209,7 +209,7 @@ class TreeNode * NodeStatus myCallback(TreeNode& node, NodeStatus status) * * This callback is executed AFTER the tick() and, if it returns SUCCESS or FAILURE, - * the value returned by the actual tick() is overriden with this one. + * the value returned by the actual tick() is overridden with this one. */ void setPostTickFunction(PostTickCallback callback); @@ -251,7 +251,7 @@ class TreeNode /** * @brief getInputStamped is similar to getInput(dey, destination), - * but it returne also the Timestamp object, that can be used to check if + * but it returns also the Timestamp object, that can be used to check if * a value was updated and when. * * @param key the name of the port. @@ -298,7 +298,7 @@ class TreeNode * @brief setOutput modifies the content of an Output port * @param key the name of the port. * @param value new value - * @return valid Result, if succesful. + * @return valid Result, if successful. */ template Result setOutput(const std::string& key, const T& value); diff --git a/include/behaviortree_cpp/utils/safe_any.hpp b/include/behaviortree_cpp/utils/safe_any.hpp index 3a71c1dd6..ce94b2eb7 100644 --- a/include/behaviortree_cpp/utils/safe_any.hpp +++ b/include/behaviortree_cpp/utils/safe_any.hpp @@ -494,7 +494,7 @@ inline nonstd::expected Any::tryCast() const } // special case when the output is an enum. - // We will try first a int convertion + // We will try first a int conversion if constexpr(std::is_enum_v) { if(isNumber()) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 000000000..3fc95ccc4 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.codespell] +ignore-words = ".codespell_ignore_words" diff --git a/src/blackboard.cpp b/src/blackboard.cpp index 21a62c9d8..3b1ba9844 100644 --- a/src/blackboard.cpp +++ b/src/blackboard.cpp @@ -176,7 +176,7 @@ void Blackboard::cloneInto(Blackboard& dst) const auto it = dst_storage.find(src_key); if(it != dst_storage.end()) { - // overwite + // overwrite auto& dst_entry = it->second; dst_entry->string_converter = src_entry->string_converter; dst_entry->value = src_entry->value; diff --git a/src/controls/fallback_node.cpp b/src/controls/fallback_node.cpp index 1654e3f2a..e92953870 100644 --- a/src/controls/fallback_node.cpp +++ b/src/controls/fallback_node.cpp @@ -55,7 +55,7 @@ NodeStatus FallbackNode::tick() case NodeStatus::FAILURE: { current_child_idx_++; // Return the execution flow if the child is async, - // to make this interruptable. + // to make this interruptible. if(asynch_ && requiresWakeUp() && prev_status == NodeStatus::IDLE && current_child_idx_ < children_count) { diff --git a/src/controls/sequence_node.cpp b/src/controls/sequence_node.cpp index 708c18d18..60f3d5b9d 100644 --- a/src/controls/sequence_node.cpp +++ b/src/controls/sequence_node.cpp @@ -62,7 +62,7 @@ NodeStatus SequenceNode::tick() case NodeStatus::SUCCESS: { current_child_idx_++; // Return the execution flow if the child is async, - // to make this interruptable. + // to make this interruptible. if(asynch_ && requiresWakeUp() && prev_status == NodeStatus::IDLE && current_child_idx_ < children_count) { diff --git a/src/controls/sequence_with_memory_node.cpp b/src/controls/sequence_with_memory_node.cpp index f47c798b6..4287cea57 100644 --- a/src/controls/sequence_with_memory_node.cpp +++ b/src/controls/sequence_with_memory_node.cpp @@ -55,7 +55,7 @@ NodeStatus SequenceWithMemory::tick() case NodeStatus::SUCCESS: { current_child_idx_++; // Return the execution flow if the child is async, - // to make this interruptable. + // to make this interruptible. if(requiresWakeUp() && prev_status == NodeStatus::IDLE && current_child_idx_ < children_count) { diff --git a/src/decorators/repeat_node.cpp b/src/decorators/repeat_node.cpp index d6b6f7c68..9ea023ee1 100644 --- a/src/decorators/repeat_node.cpp +++ b/src/decorators/repeat_node.cpp @@ -59,7 +59,7 @@ NodeStatus RepeatNode::tick() resetChild(); // Return the execution flow if the child is async, - // to make this interruptable. + // to make this interruptible. if(requiresWakeUp() && prev_status == NodeStatus::IDLE && do_loop) { emitWakeUpSignal(); diff --git a/src/decorators/retry_node.cpp b/src/decorators/retry_node.cpp index 1a40247dd..d8c689c78 100644 --- a/src/decorators/retry_node.cpp +++ b/src/decorators/retry_node.cpp @@ -74,7 +74,7 @@ NodeStatus RetryNode::tick() resetChild(); // Return the execution flow if the child is async, - // to make this interruptable. + // to make this interruptible. if(requiresWakeUp() && prev_status == NodeStatus::IDLE && do_loop) { emitWakeUpSignal(); diff --git a/src/loggers/zmq.hpp b/src/loggers/zmq.hpp index e029b88d8..26c2c6f42 100644 --- a/src/loggers/zmq.hpp +++ b/src/loggers/zmq.hpp @@ -439,7 +439,7 @@ class message_t // NOTE this constructor will include the null terminator // when called with a string literal. // An overload taking const char* can not be added because - // it would be preferred over this function and break compatiblity. + // it would be preferred over this function and break compatibility. template ::value>::type> ZMQ_DEPRECATED("from 4.7.0, use constructors taking iterators, (pointer, size) " diff --git a/tests/gtest_async_action_node.cpp b/tests/gtest_async_action_node.cpp index 7e54384d0..fd19f05ee 100644 --- a/tests/gtest_async_action_node.cpp +++ b/tests/gtest_async_action_node.cpp @@ -70,7 +70,7 @@ TEST_P(NodeStatusFixture, normal_routine) TEST_F(MockedThreadedActionFixture, no_halt) { // Test verifies that halt returns immediately, if the node is idle. It - // further checks if the halt-flag is resetted correctly. + // further checks if the halt-flag is reset correctly. sn.halt(); ASSERT_TRUE(sn.isHaltRequested()); diff --git a/tests/gtest_coroutines.cpp b/tests/gtest_coroutines.cpp index ea937fbe1..3854bf40a 100644 --- a/tests/gtest_coroutines.cpp +++ b/tests/gtest_coroutines.cpp @@ -97,10 +97,10 @@ TEST(CoroTest, do_action) node.will_fail_ = true; EXPECT_EQ(BT::NodeStatus::FAILURE, executeWhileRunning(node)) << "Should execute again " - "and retun failure"; + "and return failure"; EXPECT_FALSE(node.wasHalted()); - EXPECT_EQ(BT::NodeStatus::FAILURE, executeWhileRunning(node)) << "Shoudln't fail " + EXPECT_EQ(BT::NodeStatus::FAILURE, executeWhileRunning(node)) << "Shouldn't fail " "because we set " "status to idle"; EXPECT_FALSE(node.wasHalted()); diff --git a/tests/gtest_decorator.cpp b/tests/gtest_decorator.cpp index df72429c6..32abcff10 100644 --- a/tests/gtest_decorator.cpp +++ b/tests/gtest_decorator.cpp @@ -213,8 +213,8 @@ TEST(Decorator, RunOnce) NodeStatus status = tree.tickWhileRunning(); ASSERT_EQ(status, NodeStatus::SUCCESS); } - // counters[0] contains the number ot times TestA was ticked + // counters[0] contains the number of times TestA was ticked ASSERT_EQ(counters[0], 1); - // counters[1] contains the number ot times TestB was ticked + // counters[1] contains the number of times TestB was ticked ASSERT_EQ(counters[1], 5); } diff --git a/tests/gtest_ports.cpp b/tests/gtest_ports.cpp index c694fffa9..2a33178d3 100644 --- a/tests/gtest_ports.cpp +++ b/tests/gtest_ports.cpp @@ -455,7 +455,7 @@ class GetAny : public SyncActionNode NodeStatus tick() override { - // case 1: the port is Any, but we can cast dirrectly to string + // case 1: the port is Any, but we can cast directly to string auto res_str = getInput("val_str"); // case 2: the port is Any, and we retrieve an Any (to be casted later) auto res_int = getInput("val_int"); diff --git a/tests/gtest_skipping.cpp b/tests/gtest_skipping.cpp index 0f6f86907..8b5cf9aa3 100644 --- a/tests/gtest_skipping.cpp +++ b/tests/gtest_skipping.cpp @@ -167,10 +167,10 @@ TEST(SkippingLogic, SkippingReactiveSequence) ASSERT_EQ(status, NodeStatus::SUCCESS); } } - // counters[0] contains the number ot times TestA was ticked + // counters[0] contains the number of times TestA was ticked ASSERT_EQ(counters[0], expected_test_A_ticks); - // counters[1] contains the number ot times TestB was ticked + // counters[1] contains the number of times TestB was ticked ASSERT_EQ(counters[1], 0); } @@ -210,9 +210,9 @@ TEST(SkippingLogic, WhileSkip) NodeStatus status = tree.tickWhileRunning(); ASSERT_EQ(status, NodeStatus::SUCCESS); } - // counters[0] contains the number ot times TestA was ticked + // counters[0] contains the number of times TestA was ticked ASSERT_EQ(counters[0], 1); - // counters[1] contains the number ot times TestB was ticked + // counters[1] contains the number of times TestB was ticked ASSERT_EQ(counters[1], 0); }