// Copyright 2017 The Abseil Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_ #define ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_ #include <cstdlib> #include <ostream> #include "absl/types/compare.h" namespace absl { ABSL_NAMESPACE_BEGIN namespace test_internal { // A type that counts number of occurrences of the type, the live occurrences of // the type, as well as the number of copies, moves, swaps, and comparisons that // have occurred on the type. This is used as a base class for the copyable, // copyable+movable, and movable types below that are used in actual tests. Use // InstanceTracker in tests to track the number of instances. class BaseCountedInstance { … }; // Helper to track the BaseCountedInstance instance counters. Expects that the // number of instances and live_instances are the same when it is constructed // and when it is destructed. class InstanceTracker { … }; // Copyable, not movable. class CopyableOnlyInstance : public BaseCountedInstance { … }; // Copyable and movable. class CopyableMovableInstance : public BaseCountedInstance { … }; // Only movable, not default-constructible. class MovableOnlyInstance : public BaseCountedInstance { … }; } // namespace test_internal ABSL_NAMESPACE_END } // namespace absl #endif // ABSL_CONTAINER_INTERNAL_TEST_INSTANCE_TRACKER_H_