[fbl][test] Convert fbl container tests to zxtest
Change-Id: I3cce939789feebf955b5a82d16b2c0019218f324
diff --git a/zircon/system/ulib/fbl/include/fbl/intrusive_wavl_tree_internal.h b/zircon/system/ulib/fbl/include/fbl/intrusive_wavl_tree_internal.h
index 8181ba8..ac8b7ff 100644
--- a/zircon/system/ulib/fbl/include/fbl/intrusive_wavl_tree_internal.h
+++ b/zircon/system/ulib/fbl/include/fbl/intrusive_wavl_tree_internal.h
@@ -39,14 +39,10 @@
static void RecordEraseDoubleRotation() {}
template <typename TreeType>
- static bool VerifyRankRule(const TreeType& tree, typename TreeType::RawPtrType node) {
- return true;
- }
+ static void VerifyRankRule(const TreeType& tree, typename TreeType::RawPtrType node) {}
template <typename TreeType>
- static bool VerifyBalance(const TreeType& tree, uint64_t depth) {
- return true;
- }
+ static void VerifyBalance(const TreeType& tree, uint64_t depth) {}
};
} // namespace intrusive_containers
diff --git a/zircon/system/ulib/fbl/test/BUILD.gn b/zircon/system/ulib/fbl/test/BUILD.gn
index f713ef9..13baec3 100644
--- a/zircon/system/ulib/fbl/test/BUILD.gn
+++ b/zircon/system/ulib/fbl/test/BUILD.gn
@@ -37,12 +37,16 @@
"unique_fd_tests.cc",
"vector_tests.cc",
]
+
deps = [
"$zx/system/ulib/fbl",
- "$zx/system/ulib/unittest", # TODO: convert to zxtest.
"$zx/system/ulib/zxtest",
]
+ if (!is_fuchsia) {
+ defines = [ "FBL_TEST_ENABLE_WAVL_TREE_BALANCE_TEST=1" ]
+ }
+
if (is_fuchsia) {
# These tests won't run on the host. There are two primary reasons for this.
#
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/associative_container_test_environment.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/associative_container_test_environment.h
index 64c8422..a21875c 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/associative_container_test_environment.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/associative_container_test_environment.h
@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
-#include <unittest/unittest.h>
#include <fbl/tests/intrusive_containers/base_test_environments.h>
#include <fbl/tests/lfsr.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -50,11 +51,9 @@
return SizeUtils<CType>::size(container);
}
- bool SetTestObjKeys(const PtrType& test_obj, PopulateMethod method) {
- BEGIN_TEST;
-
- ASSERT_NONNULL(test_obj, "");
- ASSERT_LT(test_obj->value(), OBJ_COUNT, "");
+ void SetTestObjKeys(const PtrType& test_obj, PopulateMethod method) {
+ ASSERT_NOT_NULL(test_obj);
+ ASSERT_LT(test_obj->value(), OBJ_COUNT);
// Assign a key to the object based on the chosen populate method.
KeyType key = 0;
@@ -88,18 +87,14 @@
// Set the primary key on the object. Offset the "other" key by OBJ_COUNT
test_obj->SetKey(key);
OtherContainerTraits::SetKey(*test_obj, other_key);
-
- END_TEST;
}
- bool Populate(ContainerType& container, PopulateMethod method,
+ void Populate(ContainerType& container, PopulateMethod method,
RefAction ref_action = RefAction::HoldSome) {
- BEGIN_TEST;
-
- EXPECT_EQ(0U, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0U, ObjType::live_obj_count());
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, Size(container), "");
+ EXPECT_EQ(i, Size(container));
// Unless explicitly told to do so, don't hold a reference in the
// test environment for every 4th object created. Note, this only
@@ -122,10 +117,10 @@
}
PtrType new_object = this->CreateTrackedObject(i, i, hold_ref);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[i], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[i]);
- ASSERT_TRUE(SetTestObjKeys(new_object, method), "");
+ ASSERT_NO_FAILURES(SetTestObjKeys(new_object, method));
KeyType obj_key = KeyTraits::GetKey(*new_object);
max_key_ = !i ? obj_key : KeyTraits::LessThan(max_key_, obj_key) ? obj_key : max_key_;
@@ -142,52 +137,40 @@
#else
container.insert(TestEnvTraits::Transfer(new_object));
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
container.insert(std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
}
- EXPECT_EQ(OBJ_COUNT, Size(container), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(container), "");
-
- END_TEST;
+ EXPECT_EQ(OBJ_COUNT, Size(container));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container));
}
- bool Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) override {
+ void Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) override {
return Populate(container, PopulateMethod::AscendingKey, ref_action);
}
- bool DoInsertByKey(PopulateMethod populate_method) {
- BEGIN_TEST;
-
- EXPECT_TRUE(Populate(container(), populate_method), "");
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
-
- END_TEST;
+ void DoInsertByKey(PopulateMethod populate_method) {
+ ASSERT_NO_FATAL_FAILURES(Populate(container(), populate_method));
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool InsertByKey() {
- BEGIN_TEST;
+ void InsertByKey() {
+ ASSERT_NO_FATAL_FAILURES(DoInsertByKey(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
- EXPECT_TRUE(DoInsertByKey(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(DoInsertByKey(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
- EXPECT_TRUE(DoInsertByKey(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
-
- EXPECT_TRUE(DoInsertByKey(PopulateMethod::RandomKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(3 * OBJ_COUNT));
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(DoInsertByKey(PopulateMethod::RandomKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(3 * OBJ_COUNT));
}
- bool DoFindByKey(PopulateMethod populate_method) {
- BEGIN_TEST;
-
- EXPECT_TRUE(Populate(container(), populate_method), "");
+ void DoFindByKey(PopulateMethod populate_method) {
+ ASSERT_NO_FATAL_FAILURES(Populate(container(), populate_method));
// Lookup the various items which should be in the collection by key.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
@@ -196,43 +179,36 @@
auto iter = const_container().find(key);
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(key, iter->GetKey(), "");
- EXPECT_EQ(value, iter->value(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(key, iter->GetKey());
+ EXPECT_EQ(value, iter->value());
}
// Fail to look up something which should not be in the collection.
auto iter = const_container().find(kBannedKeyValue);
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool FindByKey() {
- BEGIN_TEST;
+ void FindByKey() {
+ ASSERT_NO_FATAL_FAILURES(DoFindByKey(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
- EXPECT_TRUE(DoFindByKey(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(DoFindByKey(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
- EXPECT_TRUE(DoFindByKey(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
-
- EXPECT_TRUE(DoFindByKey(PopulateMethod::RandomKey), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(3 * OBJ_COUNT));
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(DoFindByKey(PopulateMethod::RandomKey));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(3 * OBJ_COUNT));
}
- bool DoEraseByKey(PopulateMethod populate_method, size_t already_erased) {
- BEGIN_TEST;
-
- EXPECT_TRUE(Populate(container(), populate_method), "");
+ void DoEraseByKey(PopulateMethod populate_method, size_t already_erased) {
+ ASSERT_NO_FATAL_FAILURES(Populate(container(), populate_method));
size_t remaining = OBJ_COUNT;
size_t erased = 0;
// Fail to erase a key which is not in the container.
- EXPECT_NULL(container().erase(kBannedKeyValue), "");
+ EXPECT_NULL(container().erase(kBannedKeyValue));
// Erase all of the even members of the collection by key.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
@@ -243,13 +219,15 @@
if (key & 1)
continue;
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased + already_erased));
- EXPECT_TRUE(TestEnvironment<TestEnvTraits>::DoErase(key, i, remaining), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased + already_erased));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(erased + already_erased));
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::DoErase(key, i, remaining));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased + already_erased));
--remaining;
}
- EXPECT_EQ(remaining, Size(container()), "");
+ EXPECT_EQ(remaining, Size(container()));
// Erase the remaining odd members.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
@@ -257,40 +235,35 @@
continue;
KeyType key = objects()[i]->GetKey();
- EXPECT_TRUE(key & 1, "");
+ EXPECT_TRUE(key & 1);
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased + already_erased));
- EXPECT_TRUE(TestEnvironment<TestEnvTraits>::DoErase(key, i, remaining), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased + already_erased));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(erased + already_erased));
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::DoErase(key, i, remaining));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased + already_erased));
--remaining;
}
- EXPECT_EQ(0u, Size(container()), "");
+ EXPECT_EQ(0u, Size(container()));
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool EraseByKey() {
- BEGIN_TEST;
-
- EXPECT_TRUE(DoEraseByKey(PopulateMethod::AscendingKey, 0), "");
- EXPECT_TRUE(DoEraseByKey(PopulateMethod::DescendingKey, OBJ_COUNT), "");
- EXPECT_TRUE(DoEraseByKey(PopulateMethod::RandomKey, 2 * OBJ_COUNT), "");
-
- END_TEST;
+ void EraseByKey() {
+ ASSERT_NO_FATAL_FAILURES(DoEraseByKey(PopulateMethod::AscendingKey, 0));
+ ASSERT_NO_FATAL_FAILURES(DoEraseByKey(PopulateMethod::DescendingKey, OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(DoEraseByKey(PopulateMethod::RandomKey, 2 * OBJ_COUNT));
}
- bool DoInsertOrFind(PopulateMethod populate_method, size_t already_destroyed) {
- BEGIN_TEST;
-
+ void DoInsertOrFind(PopulateMethod populate_method, size_t already_destroyed) {
for (unsigned int pass_iterator = 0u; pass_iterator < 2u; ++pass_iterator) {
for (size_t i = 0u; i < OBJ_COUNT; ++i) {
// Create a new tracked object.
PtrType new_object = this->CreateTrackedObject(i, i, true);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[i], "");
- ASSERT_TRUE(SetTestObjKeys(new_object, populate_method), "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[i]);
+ ASSERT_NO_FAILURES(SetTestObjKeys(new_object, populate_method));
// Insert the object into the container using insert_or_find. There
// should be no collision. Exercise both the move and the copy
@@ -305,32 +278,34 @@
success = container().insert_or_find(TestEnvTraits::Transfer(new_object),
pass_iterator ? &iter : nullptr);
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
success =
container().insert_or_find(std::move(new_object), pass_iterator ? &iter : nullptr);
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
- EXPECT_TRUE(success, "");
+ EXPECT_TRUE(success);
// If we passed an iterator to the insert_or_find operation, it
// should point to the newly inserted object.
if (pass_iterator) {
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(objects()[i], iter->raw_ptr(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(objects()[i], iter->raw_ptr());
}
}
// If we have not tested passing a non-null iterator yet, reset the
// environment and do the test again.
- if (!pass_iterator)
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
+ if (!pass_iterator) {
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
+ }
}
// The objects from the first test pass should have been deleted.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + OBJ_COUNT));
// Now go over the (populated) container and attempt to insert new
// objects which have the same keys as existing objects. Each of these
@@ -338,13 +313,13 @@
// previously.
for (unsigned int pass_iterator = 0u; pass_iterator < 2u; ++pass_iterator) {
for (size_t i = 0u; i < OBJ_COUNT; ++i) {
- ASSERT_NONNULL(objects()[i], "");
+ ASSERT_NOT_NULL(objects()[i]);
// Create a new non-tracked object; assign it the same key as
// the existing object.
PtrType new_object = TestEnvTraits::CreateObject(i);
- ASSERT_NONNULL(new_object, "");
- EXPECT_NE(new_object->raw_ptr(), objects()[i], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_NE(new_object->raw_ptr(), objects()[i]);
new_object->SetKey(KeyTraits::GetKey(*objects()[i]));
// Attempt (but fail) to insert the object into the container
@@ -369,68 +344,62 @@
// The object should not have been inserted. If an attempt was
// made to move the pointer into the collection, it should have
// failed and we should still own the pointer.
- EXPECT_FALSE(success, "");
- ASSERT_NONNULL(new_object, "");
+ EXPECT_FALSE(success);
+ ASSERT_NOT_NULL(new_object);
// If we passed an iterator to the insert_or_find operation, it
// should point to the object we collided with.
if (pass_iterator) {
- EXPECT_TRUE(iter.IsValid(), "");
- if (iter.IsValid(), "") {
- EXPECT_EQ(objects()[i], iter->raw_ptr(), "");
- EXPECT_NE(PtrTraits::GetRaw(new_object), iter->raw_ptr(), "");
+ EXPECT_TRUE(iter.IsValid());
+ if (iter.IsValid()) {
+ EXPECT_EQ(objects()[i], iter->raw_ptr());
+ EXPECT_NE(PtrTraits::GetRaw(new_object), iter->raw_ptr());
EXPECT_TRUE(
- KeyTraits::EqualTo(KeyTraits::GetKey(*iter), KeyTraits::GetKey(*new_object)), "");
+ KeyTraits::EqualTo(KeyTraits::GetKey(*iter), KeyTraits::GetKey(*new_object)));
}
}
// Release the object we failed to insert.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + OBJ_COUNT +
- (OBJ_COUNT * pass_iterator) + i));
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(
+ already_destroyed + OBJ_COUNT + (OBJ_COUNT * pass_iterator) + i));
TestEnvTraits::ReleaseObject(new_object);
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(
already_destroyed + OBJ_COUNT + (OBJ_COUNT * pass_iterator) + i + 1));
}
}
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + (4 * OBJ_COUNT)));
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + (4 * OBJ_COUNT)));
}
- bool InsertOrFind() {
- BEGIN_TEST;
-
+ void InsertOrFind() {
// Each time we run this test, we create and destroy 4 * OBJ_COUNT objects
- EXPECT_TRUE(DoInsertOrFind(PopulateMethod::AscendingKey, 0), "");
- EXPECT_TRUE(DoInsertOrFind(PopulateMethod::DescendingKey, 4 * OBJ_COUNT), "");
- EXPECT_TRUE(DoInsertOrFind(PopulateMethod::RandomKey, 8 * OBJ_COUNT), "");
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(DoInsertOrFind(PopulateMethod::AscendingKey, 0));
+ ASSERT_NO_FATAL_FAILURES(DoInsertOrFind(PopulateMethod::DescendingKey, 4 * OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(DoInsertOrFind(PopulateMethod::RandomKey, 8 * OBJ_COUNT));
}
template <typename CopyOrMoveUtil>
- bool DoInsertOrReplace(size_t extra_elements, size_t already_destroyed) {
- BEGIN_TEST;
-
- ASSERT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_TRUE(Populate(container(), PopulateMethod::AscendingKey), "");
+ void DoInsertOrReplace(size_t extra_elements, size_t already_destroyed) {
+ ASSERT_EQ(0u, ObjType::live_obj_count());
+ ASSERT_NO_FATAL_FAILURES(Populate(container(), PopulateMethod::AscendingKey));
// Attempt to replace every element in the container with one that has
// the same key. Then attempt to replace some which were not in the
// container to start with and verify that they were inserted instead.
for (size_t i = 0; i < OBJ_COUNT + extra_elements; ++i) {
PtrType new_obj = TestEnvTraits::CreateObject(i);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
new_obj->SetKey(i);
PtrType replaced = container().insert_or_replace(CopyOrMoveUtil::Op(new_obj));
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
if (i < OBJ_COUNT) {
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, container().size(), "");
- ASSERT_NONNULL(replaced, "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, container().size());
+ ASSERT_NOT_NULL(replaced);
ASSERT_LT(replaced->value(), OBJ_COUNT);
EXPECT_TRUE(KeyTraits::EqualTo(KeyTraits::GetKey(*replaced), i));
EXPECT_TRUE(KeyTraits::EqualTo(KeyTraits::GetKey(*replaced), replaced->value()));
@@ -438,49 +407,45 @@
ASSERT_EQ(objects()[i], PtrTraits::GetRaw(replaced));
ReleaseObject(i);
replaced = nullptr;
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, container().size(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, container().size());
// The replaced object should be gone now.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + i + 1));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + i + 1));
} else {
EXPECT_EQ(i + 1, ObjType::live_obj_count());
- EXPECT_EQ(i + 1, container().size(), "");
- EXPECT_NULL(replaced, "");
+ EXPECT_EQ(i + 1, container().size());
+ EXPECT_NULL(replaced);
// We should have succeeded in inserting this object, so the delete count should not
// have gone up.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + OBJ_COUNT));
+ ASSERT_NO_FATAL_FAILURES(
+ TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + OBJ_COUNT));
}
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
while (!container().is_empty()) {
PtrType ptr = container().erase(container().begin());
TestEnvTraits::ReleaseObject(ptr);
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(already_destroyed + (2 * OBJ_COUNT) +
- extra_elements));
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(TestEnvTraits::CheckCustomDeleteInvocations(
+ already_destroyed + (2 * OBJ_COUNT) + extra_elements));
}
- bool InsertOrReplace() {
- BEGIN_TEST;
-
+ void InsertOrReplace() {
// Each time we run each version of the tests, we create and destroy 2 *
// OBJ_COUNT + the number of extra elements we specify;
constexpr size_t EXTRA_ELEMENTS = 10;
constexpr size_t TOTAL_OBJS = (2 * OBJ_COUNT) + EXTRA_ELEMENTS;
- EXPECT_TRUE(DoInsertOrReplace<MoveUtil>(EXTRA_ELEMENTS, 0), "");
+ ASSERT_NO_FATAL_FAILURES(DoInsertOrReplace<MoveUtil>(EXTRA_ELEMENTS, 0));
if (CopyUtil<PtrTraits>::CanCopy) {
- EXPECT_TRUE(DoInsertOrReplace<CopyUtil<PtrTraits>>(EXTRA_ELEMENTS, TOTAL_OBJS), "");
+ ASSERT_NO_FATAL_FAILURES(DoInsertOrReplace<CopyUtil<PtrTraits>>(EXTRA_ELEMENTS, TOTAL_OBJS));
}
-
- END_TEST;
}
protected:
@@ -563,3 +528,5 @@
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/base_test_environments.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/base_test_environments.h
index 6fe62e8..d4385d9 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/base_test_environments.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/base_test_environments.h
@@ -2,16 +2,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_BASE_TEST_ENVIRONMENTS_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_BASE_TEST_ENVIRONMENTS_H_
-#include <unittest/unittest.h>
+#include <utility>
+
#include <fbl/ref_counted.h>
#include <fbl/ref_ptr.h>
#include <fbl/tests/intrusive_containers/objects.h>
#include <fbl/tests/intrusive_containers/test_environment_utils.h>
#include <fbl/unique_ptr.h>
-
-#include <utility>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -227,61 +228,52 @@
// containers will use an implementation of push_front while associative
// containers will assign a key to the objects which get created and then
// use an implementation of insert.
- virtual bool Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) = 0;
+ virtual void Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) = 0;
- bool Reset() {
- BEGIN_TEST;
-
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ void Reset() {
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
container().clear();
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
for (size_t i = 0; i < OBJ_COUNT; ++i)
ReleaseObject(i);
- EXPECT_EQ(0u, refs_held(), "");
+ EXPECT_EQ(0u, refs_held());
refs_held() = 0;
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
ObjType::ResetLiveObjCount();
-
- END_TEST;
}
- bool Clear() {
- BEGIN_TEST;
-
+ void Clear() {
// Start by making some objects.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Clear the container. Afterwards, the number of live objects we have
// should be equal to the number of references being held by the test
// environment.
container().clear();
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(refs_held(), ObjType::live_obj_count(), "");
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(refs_held(), ObjType::live_obj_count());
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_NONNULL(objects()[i], "");
+ EXPECT_NOT_NULL(objects()[i]);
// If our underlying object it still being kept alive by the test
// environment, make sure that its internal pointer state has been
// properly cleared out.
if (HoldingObject(i)) {
auto& ns = ContainerType::NodeTraits::node_state(*objects()[i]);
- EXPECT_FALSE(ns.InContainer(), "");
+ EXPECT_FALSE(ns.InContainer());
}
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
- bool ClearUnsafe() {
- BEGIN_TEST;
-
+ void ClearUnsafe() {
// Start by making some objects.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Perform an unsafe clear of the container. Afterwards, the number of
// live objects we have should be equal to the number of elements
@@ -294,215 +286,192 @@
// (by necessity) always hold references to all internally allocated
// unmanaged objects.
container().clear_unsafe();
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_NONNULL(objects()[i], "");
+ EXPECT_NOT_NULL(objects()[i]);
// Make sure that the internal pointer states of all of our objects
// do not know yet that they have been removed from the container.
// The clear_unsafe operation should not have updated any of the
// internal object states.
auto& ns = ContainerType::NodeTraits::node_state(*objects()[i]);
- EXPECT_TRUE(ns.InContainer(), "");
+ EXPECT_TRUE(ns.InContainer());
}
-
- END_TEST;
}
- bool IsEmpty() {
- BEGIN_TEST;
-
- EXPECT_TRUE(container().is_empty(), "");
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_FALSE(container().is_empty(), "");
- EXPECT_TRUE(Reset(), "");
- EXPECT_TRUE(container().is_empty(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
-
- END_TEST;
+ void IsEmpty() {
+ EXPECT_TRUE(container().is_empty());
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_FALSE(container().is_empty());
+ Reset();
+ EXPECT_TRUE(container().is_empty());
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
template <typename TargetType>
- bool DoErase(TargetType&& target, size_t ndx, size_t remaining, bool check_ndx = true) {
- BEGIN_TEST;
-
- ASSERT_TRUE(ndx < OBJ_COUNT, "");
- ASSERT_TRUE(remaining <= OBJ_COUNT, "");
- ASSERT_TRUE(!container().is_empty(), "");
- ASSERT_TRUE(ValidEraseTarget(target), "");
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining, Size(container()), "");
+ void DoErase(TargetType&& target, size_t ndx, size_t remaining, bool check_ndx = true) {
+ ASSERT_TRUE(ndx < OBJ_COUNT);
+ ASSERT_TRUE(remaining <= OBJ_COUNT);
+ ASSERT_TRUE(!container().is_empty());
+ ASSERT_TRUE(ValidEraseTarget(target));
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining, Size(container()));
size_t erased_ndx;
{
// Erase the item and sanity check it against our tracking.
PtrType tmp = container().erase(target);
- ASSERT_NONNULL(tmp, "");
+ ASSERT_NOT_NULL(tmp);
if (check_ndx) {
- EXPECT_EQ(tmp->value(), ndx, "");
- EXPECT_EQ(objects()[ndx], tmp->raw_ptr(), "");
+ EXPECT_EQ(tmp->value(), ndx);
+ EXPECT_EQ(objects()[ndx], tmp->raw_ptr());
}
erased_ndx = tmp->value();
// Make sure that the intrusive bookkeeping is up-to-date.
auto& ns = ContainerType::NodeTraits::node_state(*tmp);
- EXPECT_TRUE(ns.IsValid(), "");
- EXPECT_FALSE(ns.InContainer(), "");
+ EXPECT_TRUE(ns.IsValid());
+ EXPECT_FALSE(ns.InContainer());
// The container has shrunk, but the object should still be around.
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining - 1, Size(container()), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining - 1, Size(container()));
}
// If we were not holding onto the object using the test
// environment's tracking, the live object count should have
// dropped. Otherwise, it should remain the same.
if (!HoldingObject(erased_ndx))
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
else
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
// Let go of the object and verify that it has now gone away.
ReleaseObject(erased_ndx);
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
-
- END_TEST;
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
}
- bool IterErase() {
- BEGIN_TEST;
-
+ void IterErase() {
// Don't perform index sanity checks for the objects we erase unless
// this is a sequence container type.
bool check_ndx = ContainerType::IsSequenced;
size_t erased = 0;
// Remove all of the elements from the container by erasing from the front.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased));
- EXPECT_TRUE(DoErase(container().begin(), i, OBJ_COUNT - i, check_ndx), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased));
+ TestEnvTraits::CheckCustomDeleteInvocations(erased);
+ DoErase(container().begin(), i, OBJ_COUNT - i, check_ndx);
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased);
}
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
// Remove all but 2 of the elements from the container by erasing from the middle.
static_assert(2 < OBJ_COUNT, "OBJ_COUNT too small to run Erase test!");
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
auto iter = container().begin();
iter++;
for (size_t i = 1; i < OBJ_COUNT - 1; ++i) {
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased));
- EXPECT_TRUE(DoErase(iter++, i, OBJ_COUNT - i + 1, check_ndx), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased));
+ TestEnvTraits::CheckCustomDeleteInvocations(erased);
+ DoErase(iter++, i, OBJ_COUNT - i + 1, check_ndx);
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased);
}
// Attempting to erase end() from a container with more than one element in
// it should return nullptr.
- EXPECT_NULL(container().erase(container().end()), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased));
- EXPECT_TRUE(DoErase(container().begin(), 0, 2, check_ndx), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased));
+ EXPECT_NULL(container().erase(container().end()));
+ TestEnvTraits::CheckCustomDeleteInvocations(erased);
+ DoErase(container().begin(), 0, 2, check_ndx);
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased);
// Attempting to erase end() from a container with just one element in
// it should return nullptr.
- EXPECT_NULL(container().erase(container().end()), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(erased));
- EXPECT_TRUE(DoErase(container().begin(), OBJ_COUNT - 1, 1, check_ndx), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(++erased));
+ EXPECT_NULL(container().erase(container().end()));
+ TestEnvTraits::CheckCustomDeleteInvocations(erased);
+ DoErase(container().begin(), OBJ_COUNT - 1, 1, check_ndx);
+ TestEnvTraits::CheckCustomDeleteInvocations(++erased);
// Attempting to erase end() from an empty container should return nullptr.
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_NULL(container().erase(container().end()), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_NULL(container().erase(container().end()));
EXPECT_EQ(erased, OBJ_COUNT * 2);
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT * 2));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT * 2);
}
- bool ReverseIterErase() {
- BEGIN_TEST;
-
+ void ReverseIterErase() {
// Don't perform index sanity checks for the objects we erase unless
// this is a sequence container type.
bool check_ndx = ContainerType::IsSequenced;
// Remove all of the elements from the container by erasing from the back.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
auto iter = container().end();
iter--;
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_TRUE(DoErase(iter--, OBJ_COUNT - i - 1, OBJ_COUNT - i, check_ndx), "");
+ DoErase(iter--, OBJ_COUNT - i - 1, OBJ_COUNT - i, check_ndx);
}
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
-
- END_TEST;
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
}
- bool DirectErase() {
- BEGIN_TEST;
-
+ void DirectErase() {
// Remove all of the elements from the container by erasing using direct
// node pointers which should end up always being at the front of the
// container.
- ASSERT_TRUE(Populate(container(), RefAction::HoldAll), "");
+ ASSERT_NO_FAILURES(Populate(container(), RefAction::HoldAll));
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_NONNULL(objects()[i], "");
- EXPECT_TRUE(DoErase(*objects()[i], i, OBJ_COUNT - i), "");
+ ASSERT_NOT_NULL(objects()[i]);
+ DoErase(*objects()[i], i, OBJ_COUNT - i);
}
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
// Remove all of the elements from the container by erasing using direct
// node pointers which should end up always being at the back of the
// container.
- ASSERT_TRUE(Populate(container(), RefAction::HoldAll), "");
+ ASSERT_NO_FAILURES(Populate(container(), RefAction::HoldAll));
for (size_t i = 0; i < OBJ_COUNT; ++i) {
size_t ndx = OBJ_COUNT - i - 1;
- ASSERT_NONNULL(objects()[ndx], "");
- EXPECT_TRUE(DoErase(*objects()[ndx], ndx, ndx + 1), "");
+ ASSERT_NOT_NULL(objects()[ndx]);
+ DoErase(*objects()[ndx], ndx, ndx + 1);
}
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
// Remove all of the elements from the container by erasing using direct
// node pointers which should end up always being somewhere in the
// middle of the container.
static_assert(2 < OBJ_COUNT, "OBJ_COUNT too small to run Erase test!");
- ASSERT_TRUE(Populate(container(), RefAction::HoldAll), "");
+ ASSERT_NO_FAILURES(Populate(container(), RefAction::HoldAll));
for (size_t i = 1; i < OBJ_COUNT - 1; ++i) {
- ASSERT_NONNULL(objects()[i], "");
- EXPECT_TRUE(DoErase(*objects()[i], i, OBJ_COUNT - i + 1), "");
+ ASSERT_NOT_NULL(objects()[i]);
+ DoErase(*objects()[i], i, OBJ_COUNT - i + 1);
}
-
- END_TEST;
}
template <typename IterType>
- bool DoIterate(const IterType& begin, const IterType& end) {
- BEGIN_TEST;
+ void DoIterate(const IterType& begin, const IterType& end) {
IterType iter;
// Iterate using begin/end
size_t i = 0;
for (iter = begin; iter != end;) {
// Exercise both -> and * dereferencing
- ASSERT_TRUE(iter.IsValid(), "");
+ ASSERT_TRUE(iter.IsValid());
- EXPECT_EQ(0u, iter->visited_count(), "");
+ EXPECT_EQ(0u, iter->visited_count());
iter->Visit();
- EXPECT_EQ(1u, (*iter).visited_count(), "");
+ EXPECT_EQ(1u, (*iter).visited_count());
(*iter).Visit();
- EXPECT_EQ(2u, (*iter).visited_count(), "");
+ EXPECT_EQ(2u, (*iter).visited_count());
// Exercise both pre and postfix increment
if ((i++) & 1)
@@ -510,10 +479,10 @@
else
++iter;
}
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
for (i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(2u, objects()[i]->visited_count(), "");
+ EXPECT_EQ(2u, objects()[i]->visited_count());
objects()[i]->ResetVisitedCount();
}
@@ -521,8 +490,8 @@
// both pre and post-fix.
iter = end;
++iter;
- EXPECT_FALSE(iter.IsValid(), "");
- EXPECT_TRUE(iter == end, "");
+ EXPECT_FALSE(iter.IsValid());
+ EXPECT_TRUE(iter == end);
// We know that the iterator is already at the end of the container, but
// perform the explicit assignment in order to check that the assignment
@@ -530,127 +499,120 @@
// constructor or the explicit rvalue constructor, if supplied)
iter = end;
iter++;
- EXPECT_FALSE(iter.IsValid(), "");
- EXPECT_TRUE(iter == end, "");
-
- END_TEST;
+ EXPECT_FALSE(iter.IsValid());
+ EXPECT_TRUE(iter == end);
}
- bool Iterate() {
- BEGIN_TEST;
-
+ void Iterate() {
// Both begin and cbegin should both be invalid, and to end/cend
- ASSERT_EQ(0u, Size(container()), "");
- EXPECT_FALSE(container().begin().IsValid(), "");
- EXPECT_TRUE(container().begin() == container().end(), "");
+ ASSERT_EQ(0u, Size(container()));
+ EXPECT_FALSE(container().begin().IsValid());
+ EXPECT_TRUE(container().begin() == container().end());
- EXPECT_FALSE(container().cbegin().IsValid(), "");
- EXPECT_TRUE(container().cbegin() == container().cend(), "");
+ EXPECT_FALSE(container().cbegin().IsValid());
+ EXPECT_TRUE(container().cbegin() == container().cend());
// Attempting to increment begin() for an empty container should result
// in an invalid iterator which is still equal to end(). Check both
// prefix and postfix decrement operators.
auto iter = container().begin();
++iter;
- EXPECT_TRUE(container().end() == iter, "");
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_TRUE(container().end() == iter);
+ EXPECT_FALSE(iter.IsValid());
iter = container().begin();
iter++;
- EXPECT_TRUE(container().end() == iter, "");
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_TRUE(container().end() == iter);
+ EXPECT_FALSE(iter.IsValid());
// Check const_iterator as well.
auto const_iter = container().cbegin();
++const_iter;
- EXPECT_TRUE(container().cend() == const_iter, "");
- EXPECT_FALSE(const_iter.IsValid(), "");
+ EXPECT_TRUE(container().cend() == const_iter);
+ EXPECT_FALSE(const_iter.IsValid());
const_iter = container().cbegin();
const_iter++;
- EXPECT_TRUE(container().cend() == const_iter, "");
- EXPECT_FALSE(const_iter.IsValid(), "");
+ EXPECT_TRUE(container().cend() == const_iter);
+ EXPECT_FALSE(const_iter.IsValid());
// Make some objects.
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
// Both begin and cbegin should both be valid, and not equal to end/cend
- EXPECT_TRUE(container().begin().IsValid(), "");
- EXPECT_TRUE(container().begin() != container().end(), "");
+ EXPECT_TRUE(container().begin().IsValid());
+ EXPECT_TRUE(container().begin() != container().end());
- EXPECT_TRUE(container().cbegin().IsValid(), "");
- EXPECT_TRUE(container().cbegin() != container().cend(), "");
+ EXPECT_TRUE(container().cbegin().IsValid());
+ EXPECT_TRUE(container().cbegin() != container().cend());
- EXPECT_TRUE(DoIterate(container().begin(), container().end()), ""); // Test iterator
- EXPECT_TRUE(DoIterate(container().cbegin(), container().cend()), ""); // Test const_iterator
+ DoIterate(container().begin(), container().end()); // Test iterator
+ DoIterate(container().cbegin(), container().cend()); // Test const_iterator
// Iterate using the range-based for loop syntax
for (auto& obj : container()) {
- EXPECT_EQ(0u, obj.visited_count(), "");
+ EXPECT_EQ(0u, obj.visited_count());
obj.Visit();
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
}
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(1u, objects()[i]->visited_count(), "");
+ EXPECT_EQ(1u, objects()[i]->visited_count());
objects()[i]->ResetVisitedCount();
}
// Iterate using the range-based for loop syntax over const references.
for (const auto& obj : container()) {
- EXPECT_EQ(0u, obj.visited_count(), "");
+ EXPECT_EQ(0u, obj.visited_count());
obj.Visit();
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
}
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(1u, objects()[i]->visited_count(), "");
+ EXPECT_EQ(1u, objects()[i]->visited_count());
objects()[i]->ResetVisitedCount();
}
// None of the objects should have been destroyed during this test.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
template <typename IterType>
- bool DoReverseIterate(const IterType& begin, const IterType& end) {
- BEGIN_TEST;
+ void DoReverseIterate(const IterType& begin, const IterType& end) {
IterType iter;
// Backing up one from end() should give a valid iterator (either prefix
// or postfix).
iter = end;
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
iter--;
- EXPECT_TRUE(iter.IsValid(), "");
+ EXPECT_TRUE(iter.IsValid());
iter = end;
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
--iter;
- EXPECT_TRUE(iter.IsValid(), "");
+ EXPECT_TRUE(iter.IsValid());
// Make sure that backing up an iterator by one points always points
// to the previous object in the container.
iter = begin;
size_t prev_ndx = iter->value();
while (++iter != end) {
- ASSERT_LT(prev_ndx, OBJ_COUNT, "");
- ASSERT_NONNULL(objects()[prev_ndx], "");
+ ASSERT_LT(prev_ndx, OBJ_COUNT);
+ ASSERT_NOT_NULL(objects()[prev_ndx]);
auto prev_iter = iter;
--prev_iter;
- ASSERT_TRUE(prev_iter.IsValid(), "");
- EXPECT_FALSE(prev_iter == iter, "");
- EXPECT_TRUE(*prev_iter == *objects()[prev_ndx], "");
+ ASSERT_TRUE(prev_iter.IsValid());
+ EXPECT_FALSE(prev_iter == iter);
+ EXPECT_TRUE(*prev_iter == *objects()[prev_ndx]);
prev_iter = iter;
prev_iter--;
- ASSERT_TRUE(prev_iter.IsValid(), "");
- EXPECT_FALSE(prev_iter == iter, "");
- EXPECT_TRUE(*prev_iter == *objects()[prev_ndx], "");
+ ASSERT_TRUE(prev_iter.IsValid());
+ EXPECT_FALSE(prev_iter == iter);
+ EXPECT_TRUE(*prev_iter == *objects()[prev_ndx]);
prev_ndx = iter->value();
}
@@ -658,160 +620,148 @@
// Attempting to back up past the beginning should result in an
// invalid iterator.
iter = begin;
- ASSERT_TRUE(iter.IsValid(), "");
+ ASSERT_TRUE(iter.IsValid());
--iter;
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
iter = begin;
- ASSERT_TRUE(iter.IsValid(), "");
+ ASSERT_TRUE(iter.IsValid());
iter--;
- EXPECT_FALSE(iter.IsValid(), "");
-
- END_TEST;
+ EXPECT_FALSE(iter.IsValid());
}
- bool ReverseIterate() {
- BEGIN_TEST;
-
+ void ReverseIterate() {
// Make sure that backing up from end() for an empty container stays at
// end. Check both prefix and postfix decrement operators.
- ASSERT_EQ(0u, Size(container()), "");
+ ASSERT_EQ(0u, Size(container()));
auto iter = container().end();
--iter;
- EXPECT_TRUE(container().end() == iter, "");
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_TRUE(container().end() == iter);
+ EXPECT_FALSE(iter.IsValid());
iter = container().end();
iter--;
- EXPECT_TRUE(container().end() == iter, "");
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_TRUE(container().end() == iter);
+ EXPECT_FALSE(iter.IsValid());
// Check const_iterator as well.
auto const_iter = container().cend();
--const_iter;
- EXPECT_TRUE(container().cend() == const_iter, "");
- EXPECT_FALSE(const_iter.IsValid(), "");
+ EXPECT_TRUE(container().cend() == const_iter);
+ EXPECT_FALSE(const_iter.IsValid());
const_iter = container().cend();
const_iter--;
- EXPECT_TRUE(container().cend() == const_iter, "");
- EXPECT_FALSE(const_iter.IsValid(), "");
+ EXPECT_TRUE(container().cend() == const_iter);
+ EXPECT_FALSE(const_iter.IsValid());
// Making some objects.
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
// Test iterator
- EXPECT_TRUE(DoReverseIterate(container().begin(), container().end()), "");
+ ASSERT_NO_FATAL_FAILURES(DoReverseIterate(container().begin(), container().end()));
// Test const_iterator
- EXPECT_TRUE(DoReverseIterate(container().cbegin(), container().cend()), "");
+ ASSERT_NO_FATAL_FAILURES(DoReverseIterate(container().cbegin(), container().cend()));
// None of the objects should have been destroyed during this test.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool MakeIterator() {
- BEGIN_TEST;
-
+ void MakeIterator() {
// Populate the container. Hold internal refs to everything we add to
// the container.
- ASSERT_TRUE(Populate(container(), RefAction::HoldAll), "");
+ ASSERT_NO_FAILURES(Populate(container(), RefAction::HoldAll));
// For every member of the container, make an iterator using the
// internal reference we are holding. Verify that the iterator is in
// the position we expect it to be in.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_NONNULL(objects()[i], "");
+ ASSERT_NOT_NULL(objects()[i]);
auto iter = container().make_iterator(*objects()[i]);
- ASSERT_TRUE(iter != container().end(), "");
- EXPECT_EQ(objects()[i]->value(), iter->value(), "");
- EXPECT_EQ(objects()[i], iter->raw_ptr(), "");
+ ASSERT_TRUE(iter != container().end());
+ EXPECT_EQ(objects()[i]->value(), iter->value());
+ EXPECT_EQ(objects()[i], iter->raw_ptr());
if (ContainerType::IsSequenced) {
auto other_iter = container().begin();
for (size_t j = 0; j < i; ++j) {
- EXPECT_FALSE(other_iter == iter, "");
+ EXPECT_FALSE(other_iter == iter);
++other_iter;
}
- EXPECT_TRUE(other_iter == iter, "");
+ EXPECT_TRUE(other_iter == iter);
}
}
-
- END_TEST;
}
- bool Swap() {
- BEGIN_TEST;
-
+ void Swap() {
{
- ContainerType other_container; // Make an empty container.
- ASSERT_TRUE(Populate(container()), ""); // Fill the internal container with stuff.
+ ContainerType other_container; // Make an empty container.
+ ASSERT_NO_FAILURES(Populate(container())); // Fill the internal container with stuff.
// Sanity check, swap, then check again.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_FALSE(container().is_empty(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_TRUE(other_container.is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_FALSE(container().is_empty());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_TRUE(other_container.is_empty());
for (auto& obj : container()) {
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
obj.Visit();
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
container().swap(other_container);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_FALSE(other_container.is_empty(), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
- EXPECT_TRUE(container().is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_FALSE(other_container.is_empty());
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
+ EXPECT_TRUE(container().is_empty());
for (auto& obj : other_container) {
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
obj.Visit();
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Swap back to check the case where container() was empty, but other_container
// had elements.
container().swap(other_container);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_FALSE(container().is_empty(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_TRUE(other_container.is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_FALSE(container().is_empty());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_TRUE(other_container.is_empty());
for (const auto& obj : container())
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Nothing should have been deleted yet.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
// Reset;
- EXPECT_TRUE(Reset(), "");
+ Reset();
// Now all of the objects should be gone.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
// Make a new other_container, this time with some stuff in it.
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
{
- ContainerType other_container; // Make an empty container.
- ASSERT_TRUE(Populate(container()), ""); // Fill the internal container with stuff.
+ ContainerType other_container; // Make an empty container.
+ ASSERT_NO_FAILURES(Populate(container())); // Fill the internal container with stuff.
static constexpr size_t OTHER_COUNT = 5;
static constexpr size_t OTHER_START = 10000;
@@ -824,107 +774,103 @@
}
// Sanity check
- EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_EQ(OTHER_COUNT, Size(other_container), "");
+ EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_EQ(OTHER_COUNT, Size(other_container));
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Visit everything in container() once, and everything in
// other_container twice.
for (auto& obj : container()) {
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
obj.Visit();
}
for (const auto& obj : other_container) {
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
obj.Visit();
obj.Visit();
}
for (auto& obj : container())
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
for (auto& obj : other_container)
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
// Swap and sanity check again
container().swap(other_container);
- EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
- EXPECT_EQ(OTHER_COUNT, Size(container()), "");
+ EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
+ EXPECT_EQ(OTHER_COUNT, Size(container()));
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Everything in container() should have been visited twice so far,
// while everything in other_container should have been visited
// once.
for (auto& obj : container())
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
for (auto& obj : other_container)
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
// Swap back and sanity check again
container().swap(other_container);
- EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_EQ(OTHER_COUNT, Size(other_container), "");
+ EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_EQ(OTHER_COUNT, Size(other_container));
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
for (auto& obj : container())
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
for (auto& obj : other_container)
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
// No new objects should have been deleted.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
// If we are testing unmanaged pointers clean them up.
- EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count());
other_container.clear();
if (!PtrTraits::IsManaged) {
- EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + OTHER_COUNT, ObjType::live_obj_count());
for (size_t i = 0; i < OTHER_COUNT; ++i)
delete raw_ptrs[i];
}
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
// Now, we should have deleted an additional OTHER_COUNT objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + OTHER_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + OTHER_COUNT);
// Reset the internal state
- EXPECT_TRUE(Reset(), "");
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
+ Reset();
+ EXPECT_EQ(0u, ObjType::live_obj_count());
// Now we should have filled and emptied the test environment twice, and
// created+destroyed an additional OTHER_COUNT objects..
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + OTHER_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + OTHER_COUNT);
}
-
- END_TEST;
}
- bool RvalueOps() {
- BEGIN_TEST;
-
+ void RvalueOps() {
// Populate the internal container.
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
for (auto& obj : container()) {
- ASSERT_GT(OBJ_COUNT, obj.value(), "");
- EXPECT_EQ(0u, obj.visited_count(), "");
- EXPECT_EQ(objects()[obj.value()], &obj, "");
+ ASSERT_GT(OBJ_COUNT, obj.value());
+ EXPECT_EQ(0u, obj.visited_count());
+ EXPECT_EQ(objects()[obj.value()], &obj);
obj.Visit();
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Move its contents to a new container by explicitly invoking the Rvalue
// constructor.
@@ -933,18 +879,18 @@
#else
ContainerType other_container(std::move(container()));
#endif
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
- EXPECT_TRUE(container().is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
+ EXPECT_TRUE(container().is_empty());
for (const auto& obj : other_container) {
- ASSERT_GT(OBJ_COUNT, obj.value(), "");
- EXPECT_EQ(1u, obj.visited_count(), "");
- EXPECT_EQ(objects()[obj.value()], &obj, "");
+ ASSERT_GT(OBJ_COUNT, obj.value());
+ EXPECT_EQ(1u, obj.visited_count());
+ EXPECT_EQ(objects()[obj.value()], &obj);
obj.Visit();
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Move the contents again, this time using move-initialization which implicitly
// invokes the Rvalue constructor.
@@ -953,19 +899,19 @@
#else
ContainerType another_container = std::move(other_container);
#endif
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(another_container), "");
- EXPECT_TRUE(other_container.is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(another_container));
+ EXPECT_TRUE(other_container.is_empty());
for (const auto& obj : another_container) {
- ASSERT_GT(OBJ_COUNT, obj.value(), "");
- EXPECT_EQ(2u, obj.visited_count(), "");
- EXPECT_EQ(objects()[obj.value()], &obj, "");
+ ASSERT_GT(OBJ_COUNT, obj.value());
+ EXPECT_EQ(2u, obj.visited_count());
+ EXPECT_EQ(objects()[obj.value()], &obj);
obj.Visit();
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(another_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(another_container));
// Move the contents of the final container back to the internal container. If we
// are testing managed pointer types, put some objects into the internal
@@ -982,19 +928,19 @@
}
// Sanity checks before the assignment
- EXPECT_EQ(OBJ_COUNT + extras_added, ObjType::live_obj_count(), "");
- EXPECT_EQ(extras_added, Size(container()), "");
+ EXPECT_EQ(OBJ_COUNT + extras_added, ObjType::live_obj_count());
+ EXPECT_EQ(extras_added, Size(container()));
for (const auto& obj : container()) {
- ASSERT_GT(EXTRA_COUNT, obj.value(), "");
- EXPECT_EQ(0u, obj.visited_count(), "");
+ ASSERT_GT(EXTRA_COUNT, obj.value());
+ EXPECT_EQ(0u, obj.visited_count());
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(another_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(another_container));
// No objects should have been deleted yet.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
#if TEST_WILL_NOT_COMPILE || 0
container() = another_container;
#else
@@ -1002,35 +948,31 @@
#endif
// The extra objects we put into container() should have been released
// when we moved the contents of another_container into container()
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(extras_added));
+ TestEnvTraits::CheckCustomDeleteInvocations(extras_added);
// another_container should now be empty, and we should have returned to our
// starting, post-populated state.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_TRUE(another_container.is_empty(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_TRUE(another_container.is_empty());
for (const auto& obj : container()) {
- ASSERT_GT(OBJ_COUNT, obj.value(), "");
- EXPECT_EQ(3u, obj.visited_count(), "");
- EXPECT_EQ(objects()[obj.value()], &obj, "");
+ ASSERT_GT(OBJ_COUNT, obj.value());
+ EXPECT_EQ(3u, obj.visited_count());
+ EXPECT_EQ(objects()[obj.value()], &obj);
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(another_container), "");
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(another_container));
}
- bool Scope() {
- BEGIN_TEST;
-
+ void Scope() {
// Make sure that both unique_ptrs and RefPtrs handle being moved
// properly, and that containers of such pointers automatically clean up
// when the container goes out of scope and destructs. Note: Don't try
// this with an unmanaged pointer. Lists of unmanaged pointers will
// ZX_ASSERT if they destruct with elements still in them.
- EXPECT_EQ(0U, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0U, ObjType::live_obj_count());
{ // Begin scope for container
ContainerType container;
@@ -1038,24 +980,20 @@
// Put some stuff into the container. Don't hold any internal
// references to anything we add.
Populate(container, RefAction::HoldNone);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
} // Let the container go out of scope and clean itself up..
- EXPECT_EQ(0U, ObjType::live_obj_count(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
-
- END_TEST;
+ EXPECT_EQ(0U, ObjType::live_obj_count());
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
- bool TwoContainer() {
- BEGIN_TEST;
-
+ void TwoContainer() {
// Start by populating the internal container. We should end up with
// OBJ_COUNT objects, but we may not be holding internal references to
// all of them.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Create the other type of container that ObjType can exist on and populate
// it using the default operation for the container type.
@@ -1066,28 +1004,28 @@
// The two containers should be the same length, and nothing should have
// changed about the live object count.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
// Make sure that none of the members of container() or other_container
// have been visited. Then visit every member of other_container, and
// make sure that all of the members of container() have been visited
// once.
for (auto& obj : container())
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
for (auto& obj : other_container)
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
for (auto& obj : other_container) {
obj.Visit();
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
}
for (auto& obj : container()) {
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
obj.Visit();
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
}
// If this is a sequenced container, then other_container should be in
@@ -1095,35 +1033,35 @@
if (OtherContainerType::IsSequenced) {
auto other_iter = other_container.begin();
for (const auto& obj : container()) {
- ASSERT_FALSE(other_iter == other_container.end(), "");
- EXPECT_EQ(OBJ_COUNT - obj.value() - 1, other_iter->value(), "");
+ ASSERT_FALSE(other_iter == other_container.end());
+ EXPECT_EQ(OBJ_COUNT - obj.value() - 1, other_iter->value());
++other_iter;
}
- EXPECT_TRUE(other_iter == other_container.end(), "");
+ EXPECT_TRUE(other_iter == other_container.end());
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(other_container), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(other_container));
// Clear the internal container. No objects should go away and the other
// container should be un-affected
container().clear();
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
for (auto& obj : other_container)
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
if (OtherContainerType::IsSequenced) {
auto other_iter = other_container.begin();
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_FALSE(other_iter == other_container.end(), "");
- EXPECT_EQ(OBJ_COUNT - i - 1, other_iter->value(), "");
+ ASSERT_FALSE(other_iter == other_container.end());
+ EXPECT_EQ(OBJ_COUNT - i - 1, other_iter->value());
++other_iter;
}
- EXPECT_TRUE(other_iter == other_container.end(), "");
+ EXPECT_TRUE(other_iter == other_container.end());
}
// If we are testing a container of managed pointers, release our internal
@@ -1137,32 +1075,29 @@
for (size_t i = 0; i < OBJ_COUNT; ++i)
ReleaseObject(i);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, refs_held(), "");
- EXPECT_EQ(OBJ_COUNT, Size(other_container), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(0u, refs_held());
+ EXPECT_EQ(OBJ_COUNT, Size(other_container));
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
// Finally, clear() other_container and reset the internal state. At this
// point, all objects should have gone away.
other_container.clear();
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
- EXPECT_TRUE(Reset(), "");
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
+ Reset();
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, refs_held(), "");
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(0u, Size(other_container), "");
-
- END_TEST;
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, refs_held());
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(0u, Size(other_container));
}
- bool ThreeContainerHelper() {
- BEGIN_TEST;
+ void ThreeContainerHelper() {
// Start by populating the internal container. We should end up with
// OBJ_COUNT objects, but we may not be holding internal references to
// all of them.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Create the other types of containers that ObjType can exist on and populate
// them using the default operation for the container type.
@@ -1176,42 +1111,42 @@
}
for (auto& obj : tagged1) {
- EXPECT_TRUE(InContainer<typename ContainerTraits::Tag1>(obj), "");
- EXPECT_TRUE(InContainer<typename ContainerTraits::Tag2>(obj), "");
- EXPECT_TRUE(InContainer<typename ContainerTraits::Tag3>(obj), "");
+ EXPECT_TRUE(InContainer<typename ContainerTraits::Tag1>(obj));
+ EXPECT_TRUE(InContainer<typename ContainerTraits::Tag2>(obj));
+ EXPECT_TRUE(InContainer<typename ContainerTraits::Tag3>(obj));
}
// The three containers should be the same length, and nothing should have
// changed about the live object count.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged1), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged2), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged3), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(tagged1));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged2));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged3));
// Make sure that none of the members of container() or other_container
// have been visited. Then visit every member of the other containers,
// and make sure that all of the members of container() have been
// visited once.
for (auto& obj : tagged1)
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
for (auto& obj : tagged2)
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
for (auto& obj : tagged3)
- ASSERT_EQ(0u, obj.visited_count(), "");
+ ASSERT_EQ(0u, obj.visited_count());
for (auto& obj : tagged1) {
obj.Visit();
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
}
for (auto& obj : tagged2) {
obj.Visit();
- EXPECT_EQ(2u, obj.visited_count(), "");
+ EXPECT_EQ(2u, obj.visited_count());
}
for (auto& obj : tagged3) {
obj.Visit();
- EXPECT_EQ(3u, obj.visited_count(), "");
+ EXPECT_EQ(3u, obj.visited_count());
}
// If this is a sequenced container, then the other containers should be in
@@ -1221,51 +1156,51 @@
ContainerTraits::TaggedType3::IsSequenced) {
auto iter1 = tagged1.begin();
for (const auto& obj : container()) {
- ASSERT_FALSE(iter1 == tagged1.end(), "");
- EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter1->value(), "");
+ ASSERT_FALSE(iter1 == tagged1.end());
+ EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter1->value());
++iter1;
}
- EXPECT_TRUE(iter1 == tagged1.end(), "");
+ EXPECT_TRUE(iter1 == tagged1.end());
auto iter2 = tagged2.begin();
for (const auto& obj : container()) {
- ASSERT_FALSE(iter2 == tagged2.end(), "");
- EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter2->value(), "");
+ ASSERT_FALSE(iter2 == tagged2.end());
+ EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter2->value());
++iter2;
}
- EXPECT_TRUE(iter2 == tagged2.end(), "");
+ EXPECT_TRUE(iter2 == tagged2.end());
auto iter3 = tagged3.begin();
for (const auto& obj : container()) {
- ASSERT_FALSE(iter3 == tagged3.end(), "");
- EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter3->value(), "");
+ ASSERT_FALSE(iter3 == tagged3.end());
+ EXPECT_EQ(OBJ_COUNT - obj.value() - 1, iter3->value());
++iter3;
}
- EXPECT_TRUE(iter3 == tagged3.end(), "");
+ EXPECT_TRUE(iter3 == tagged3.end());
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(tagged1), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(tagged2), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(tagged3), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(tagged1));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(tagged2));
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(tagged3));
// Clear the internal container. No objects should go away and the other
// containers should be un-affected
container().clear();
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged1), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged2), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged3), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged1));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged2));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged3));
for (auto& obj : tagged1) {
- EXPECT_EQ(3u, obj.visited_count(), "");
+ EXPECT_EQ(3u, obj.visited_count());
}
for (auto& obj : tagged2) {
- EXPECT_EQ(3u, obj.visited_count(), "");
+ EXPECT_EQ(3u, obj.visited_count());
}
for (auto& obj : tagged3) {
- EXPECT_EQ(3u, obj.visited_count(), "");
+ EXPECT_EQ(3u, obj.visited_count());
}
if constexpr (ContainerTraits::TaggedType1::IsSequenced &&
@@ -1273,27 +1208,27 @@
ContainerTraits::TaggedType3::IsSequenced) {
auto iter1 = tagged1.begin();
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_FALSE(iter1 == tagged1.end(), "");
- EXPECT_EQ(OBJ_COUNT - i - 1, iter1->value(), "");
+ ASSERT_FALSE(iter1 == tagged1.end());
+ EXPECT_EQ(OBJ_COUNT - i - 1, iter1->value());
++iter1;
}
- EXPECT_TRUE(iter1 == tagged1.end(), "");
+ EXPECT_TRUE(iter1 == tagged1.end());
auto iter2 = tagged2.begin();
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_FALSE(iter2 == tagged2.end(), "");
- EXPECT_EQ(OBJ_COUNT - i - 1, iter2->value(), "");
+ ASSERT_FALSE(iter2 == tagged2.end());
+ EXPECT_EQ(OBJ_COUNT - i - 1, iter2->value());
++iter2;
}
- EXPECT_TRUE(iter2 == tagged2.end(), "");
+ EXPECT_TRUE(iter2 == tagged2.end());
auto iter3 = tagged3.begin();
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- ASSERT_FALSE(iter3 == tagged3.end(), "");
- EXPECT_EQ(OBJ_COUNT - i - 1, iter3->value(), "");
+ ASSERT_FALSE(iter3 == tagged3.end());
+ EXPECT_EQ(OBJ_COUNT - i - 1, iter3->value());
++iter3;
}
- EXPECT_TRUE(iter3 == tagged3.end(), "");
+ EXPECT_TRUE(iter3 == tagged3.end());
}
// If we are testing a container of managed pointers, release our internal
@@ -1307,61 +1242,58 @@
for (size_t i = 0; i < OBJ_COUNT; ++i)
ReleaseObject(i);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, refs_held(), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged1), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged2), "");
- EXPECT_EQ(OBJ_COUNT, Size(tagged3), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(0u, refs_held());
+ EXPECT_EQ(OBJ_COUNT, Size(tagged1));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged2));
+ EXPECT_EQ(OBJ_COUNT, Size(tagged3));
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
// Finally, clear() the other other_containers and reset the internal state. At this
// point, all objects should have gone away.
tagged1.clear();
tagged2.clear();
tagged3.clear();
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
- EXPECT_TRUE(Reset(), "");
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
+ Reset();
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0u, refs_held(), "");
- EXPECT_EQ(0u, Size(container()), "");
- EXPECT_EQ(0u, Size(tagged1), "");
- EXPECT_EQ(0u, Size(tagged2), "");
- EXPECT_EQ(0u, Size(tagged3), "");
-
- END_TEST;
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0u, refs_held());
+ EXPECT_EQ(0u, Size(container()));
+ EXPECT_EQ(0u, Size(tagged1));
+ EXPECT_EQ(0u, Size(tagged2));
+ EXPECT_EQ(0u, Size(tagged3));
}
- bool IterCopyPointer() {
- BEGIN_TEST;
+ void IterCopyPointer() {
PtrType ptr;
typename ContainerType::iterator iter;
// A default constructed iterator should give back nullptr when
// CopyPointer is called.
ptr = iter.CopyPointer();
- EXPECT_NULL(ptr, "");
+ EXPECT_NULL(ptr);
// The begining/end of an emptry container should also return nullptr.
ptr = container().begin().CopyPointer();
- EXPECT_NULL(ptr, "");
+ EXPECT_NULL(ptr);
ptr = container().end().CopyPointer();
- EXPECT_NULL(ptr, "");
+ EXPECT_NULL(ptr);
// Populate the container.
- ASSERT_TRUE(Populate(container(), RefAction::HoldAll), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, refs_held(), "");
+ ASSERT_NO_FAILURES(Populate(container(), RefAction::HoldAll));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, refs_held());
// end().CopyPointer should still return nullptr.
ptr = container().end().CopyPointer();
- EXPECT_NULL(ptr, "");
+ EXPECT_NULL(ptr);
// begin().CopyPointer() should be non-null.
ptr = container().begin().CopyPointer();
- EXPECT_NONNULL(ptr, "");
+ EXPECT_NOT_NULL(ptr);
// clear the container and release all internally held references.
container().clear();
@@ -1370,25 +1302,21 @@
// We should not be holding any references, but we should still have a
// live object if we are testing a managed pointer type.
- EXPECT_EQ(0u, refs_held(), "");
+ EXPECT_EQ(0u, refs_held());
if (PtrTraits::IsManaged)
- EXPECT_EQ(1u, ObjType::live_obj_count(), "");
+ EXPECT_EQ(1u, ObjType::live_obj_count());
else
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
// null out our pointer. No matter what, our live_obj_count should now
// be zero.
ptr = nullptr;
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
-
- END_TEST;
+ EXPECT_EQ(0u, ObjType::live_obj_count());
}
- bool EraseIf() {
- BEGIN_TEST;
-
+ void EraseIf() {
// Populate our container.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Erase all of the even members
size_t even_erased = 0;
@@ -1399,11 +1327,11 @@
even_erased++;
}
- EXPECT_EQ(EVEN_OBJ_COUNT, even_erased, "");
- EXPECT_EQ(OBJ_COUNT, even_erased + Size(container()), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(even_erased));
+ EXPECT_EQ(EVEN_OBJ_COUNT, even_erased);
+ EXPECT_EQ(OBJ_COUNT, even_erased + Size(container()));
+ TestEnvTraits::CheckCustomDeleteInvocations(even_erased);
for (const auto& obj : container())
- EXPECT_TRUE(obj.value() & 1, "");
+ EXPECT_TRUE(obj.value() & 1);
// Erase all of the odd members
size_t odd_erased = 0;
@@ -1414,33 +1342,29 @@
odd_erased++;
}
- EXPECT_EQ(ODD_OBJ_COUNT, odd_erased, "");
- EXPECT_EQ(OBJ_COUNT, even_erased + odd_erased, "");
- EXPECT_TRUE(container().is_empty(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
-
- END_TEST;
+ EXPECT_EQ(ODD_OBJ_COUNT, odd_erased);
+ EXPECT_EQ(OBJ_COUNT, even_erased + odd_erased);
+ EXPECT_TRUE(container().is_empty());
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
- bool FindIf() {
- BEGIN_TEST;
-
+ void FindIf() {
// Populate our container.
- ASSERT_TRUE(Populate(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
// Find all of the members which should be in the container.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
auto iter =
const_container().find_if([i](const ObjType& obj) -> bool { return (obj.value() == i); });
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(0u, iter->visited_count(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(0u, iter->visited_count());
iter->Visit();
}
// Every member should have been visited once.
for (auto& obj : container()) {
- EXPECT_EQ(1u, obj.visited_count(), "");
+ EXPECT_EQ(1u, obj.visited_count());
obj.ResetVisitedCount();
}
@@ -1456,22 +1380,20 @@
++total_found;
iter->Visit();
}
- EXPECT_EQ(ODD_OBJ_COUNT, total_found, "");
+ EXPECT_EQ(ODD_OBJ_COUNT, total_found);
// All of the odd members should have been visited once, while all of
// the even members should not have been visited.
for (const auto& obj : container())
- EXPECT_EQ(obj.value() & 1, obj.visited_count(), "");
+ EXPECT_EQ(obj.value() & 1, obj.visited_count());
// Fail to find a member which should not be in the container.
auto iter = const_container().find_if(
[](const ObjType& obj) -> bool { return (obj.value() == OBJ_COUNT); });
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
// We should not have destroyed any objects in this test.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
static PtrType TakePtr(PtrType& ptr) {
@@ -1505,3 +1427,5 @@
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_BASE_TEST_ENVIRONMENTS_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h
index 50d99ac..1425adc 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h
@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_DOUBLY_LINKED_LIST_CHECKER_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_DOUBLY_LINKED_LIST_CHECKER_H_
-#include <unittest/unittest.h>
#include <fbl/intrusive_hash_table.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -20,17 +21,15 @@
class DoublyLinkedListChecker {
public:
template <typename ContainerType>
- static bool SanityCheck(const ContainerType& container) {
+ static void SanityCheck(const ContainerType& container) {
using NodeTraits = typename ContainerType::NodeTraits;
using PtrTraits = typename ContainerType::PtrTraits;
- BEGIN_TEST;
-
typename PtrTraits::RawPtrType tmp = container.head_;
while (true) {
- ASSERT_NONNULL(tmp, "");
+ ASSERT_NOT_NULL(tmp);
if (is_sentinel_ptr(tmp)) {
- ASSERT_EQ(container.sentinel(), tmp, "");
+ ASSERT_EQ(container.sentinel(), tmp);
break;
}
@@ -39,15 +38,15 @@
tmp = container.tail();
if (!is_sentinel_ptr(container.head_)) {
- ASSERT_NONNULL(tmp, "");
+ ASSERT_NOT_NULL(tmp);
tmp = NodeTraits::node_state(*tmp).next_;
}
- ASSERT_EQ(container.sentinel(), tmp, "");
-
- END_TEST;
+ ASSERT_EQ(container.sentinel(), tmp);
}
};
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_DOUBLY_LINKED_LIST_CHECKER_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_hash_table_checker.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_hash_table_checker.h
index a429654..bdfacf8 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_hash_table_checker.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_hash_table_checker.h
@@ -2,13 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_HASH_TABLE_CHECKER_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_HASH_TABLE_CHECKER_H_
-#include <unittest/unittest.h>
#include <fbl/intrusive_hash_table.h>
#include <fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h>
#include <fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h>
#include <fbl/tests/intrusive_containers/test_environment_utils.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -19,35 +20,33 @@
class HashTableChecker {
public:
template <typename ContainerType>
- static bool SanityCheck(const ContainerType& container) {
+ static void SanityCheck(const ContainerType& container) {
using BucketType = typename ContainerType::BucketType;
using BucketChecker = typename BucketType::CheckerType;
using HashType = typename ContainerType::HashType;
using HashTraits = typename ContainerType::HashTraits;
using KeyTraits = typename ContainerType::KeyTraits;
- BEGIN_TEST;
-
// Demand that every bucket pass its sanity check. Keep a running total
// of the total size of the HashTable in the process.
size_t total_size = 0;
for (size_t i = 0; i < ContainerType::kNumBuckets; ++i) {
- ASSERT_TRUE(BucketChecker::SanityCheck(container.buckets_[i]), "");
+ ASSERT_NO_FATAL_FAILURES(BucketChecker::SanityCheck(container.buckets_[i]));
total_size += SizeUtils<BucketType>::size(container.buckets_[i]);
// For every element in the bucket, make sure that the bucket index
// matches the hash of the element.
for (const auto& obj : container.buckets_[i]) {
- ASSERT_EQ(HashTraits::GetHash(KeyTraits::GetKey(obj)), static_cast<HashType>(i), "");
+ ASSERT_EQ(HashTraits::GetHash(KeyTraits::GetKey(obj)), static_cast<HashType>(i));
}
}
- EXPECT_EQ(container.size(), total_size, "");
-
- END_TEST;
+ EXPECT_EQ(container.size(), total_size);
}
};
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_HASH_TABLE_CHECKER_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h
index c64f26c..68e3cca 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h
@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_SINGLY_LINKED_LIST_CHECKER_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_SINGLY_LINKED_LIST_CHECKER_H_
-#include <unittest/unittest.h>
#include <fbl/intrusive_hash_table.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -20,27 +21,26 @@
class SinglyLinkedListChecker {
public:
template <typename ContainerType>
- static bool SanityCheck(const ContainerType& container) {
+ static void SanityCheck(const ContainerType& container) {
using NodeTraits = typename ContainerType::NodeTraits;
using PtrTraits = typename ContainerType::PtrTraits;
- BEGIN_TEST;
typename PtrTraits::RawPtrType tmp = container.head_;
while (true) {
- ASSERT_NONNULL(tmp, "");
+ ASSERT_NOT_NULL(tmp);
if (is_sentinel_ptr(tmp)) {
- ASSERT_EQ(container.sentinel(), tmp, "");
+ ASSERT_EQ(container.sentinel(), tmp);
break;
}
tmp = NodeTraits::node_state(*tmp).next_;
}
-
- END_TEST;
}
};
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_SINGLY_LINKED_LIST_CHECKER_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_wavl_tree_checker.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_wavl_tree_checker.h
index 90bd4df..2f1663b 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_wavl_tree_checker.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/intrusive_wavl_tree_checker.h
@@ -2,10 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_WAVL_TREE_CHECKER_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_WAVL_TREE_CHECKER_H_
-#include <unittest/unittest.h>
#include <fbl/intrusive_wavl_tree.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -17,11 +18,10 @@
class WAVLTreeChecker {
public:
template <typename TreeType>
- static bool VerifyParentBackLinks(const TreeType& tree, typename TreeType::RawPtrType node) {
- BEGIN_TEST;
+ static void VerifyParentBackLinks(const TreeType& tree, typename TreeType::RawPtrType node) {
using NodeTraits = typename TreeType::NodeTraits;
- ASSERT_TRUE(valid_sentinel_ptr(node), "");
+ ASSERT_TRUE(valid_sentinel_ptr(node));
const auto& ns = NodeTraits::node_state(*node);
if (valid_sentinel_ptr(ns.left_)) {
@@ -33,13 +33,10 @@
EXPECT_EQ(node, NodeTraits::node_state(*ns.right_).parent_,
"Corrupt right-side parent back-link!");
}
-
- END_TEST;
}
template <typename TreeType>
- static bool SanityCheck(const TreeType& tree) {
- BEGIN_TEST;
+ static void SanityCheck(const TreeType& tree) {
using NodeTraits = typename TreeType::NodeTraits;
using RawPtrType = typename TreeType::RawPtrType;
using Observer = typename TreeType::Observer;
@@ -48,26 +45,26 @@
if (tree.is_empty()) {
// If the tree is empty, then the root should be null, and the
// left/right-most members should be set to the sentinel value.
- ASSERT_NULL(tree.root_, "");
- ASSERT_EQ(tree.sentinel(), tree.left_most_, "");
- ASSERT_EQ(tree.sentinel(), tree.right_most_, "");
- EXPECT_EQ(0u, tree.size(), "");
+ ASSERT_NULL(tree.root_);
+ ASSERT_EQ(tree.sentinel(), tree.left_most_);
+ ASSERT_EQ(tree.sentinel(), tree.right_most_);
+ EXPECT_EQ(0u, tree.size());
} else {
// If the tree is non-empty, then the root, left-most and
// right-most pointers should all be valid. The LR-child of the
// LR-most element should be the sentinel value.
- ASSERT_NONNULL(tree.root_, "");
- ASSERT_FALSE(is_sentinel_ptr(tree.root_), "");
+ ASSERT_NOT_NULL(tree.root_);
+ ASSERT_FALSE(is_sentinel_ptr(tree.root_));
- ASSERT_NONNULL(tree.left_most_, "");
- ASSERT_FALSE(is_sentinel_ptr(tree.left_most_), "");
- ASSERT_EQ(tree.sentinel(), NodeTraits::node_state(*tree.left_most_).left_, "");
+ ASSERT_NOT_NULL(tree.left_most_);
+ ASSERT_FALSE(is_sentinel_ptr(tree.left_most_));
+ ASSERT_EQ(tree.sentinel(), NodeTraits::node_state(*tree.left_most_).left_);
- ASSERT_NONNULL(tree.right_most_, "");
- ASSERT_FALSE(is_sentinel_ptr(tree.right_most_), "");
- ASSERT_EQ(tree.sentinel(), NodeTraits::node_state(*tree.right_most_).right_, "");
+ ASSERT_NOT_NULL(tree.right_most_);
+ ASSERT_FALSE(is_sentinel_ptr(tree.right_most_));
+ ASSERT_EQ(tree.sentinel(), NodeTraits::node_state(*tree.right_most_).right_);
- EXPECT_LT(0u, tree.size(), "");
+ EXPECT_LT(0u, tree.size());
}
// Compute the size and depth of the tree, verifying the parent
@@ -83,7 +80,7 @@
// Start by going left until we have determined the depth of the
// left most node of the tree.
while (valid_sentinel_ptr(node)) {
- ASSERT_TRUE(VerifyParentBackLinks(tree, node), "");
+ ASSERT_NO_FAILURES(VerifyParentBackLinks(tree, node));
auto& ns = NodeTraits::node_state(*node);
++cur_depth;
@@ -111,22 +108,22 @@
depth = cur_depth;
++size;
- ASSERT_TRUE(VerifyParentBackLinks(tree, node), "");
+ ASSERT_NO_FAILURES(VerifyParentBackLinks(tree, node));
// Verify the rank rule using the tree's observer's implementation.
// If this sanity check is being run as part of the balance test, it
// will use the implementation above. For all other tests, only the
// rank parity is stored in the node, so we cannot rigorously verify
// the rule. The default VerifyRankRule implementation will be used
- // instead (which just returns true).
- ASSERT_TRUE(Observer::VerifyRankRule(tree, node), "");
+ // instead.
+ ASSERT_NO_FAILURES(Observer::VerifyRankRule(tree, node));
// #2: Can we go right?
const auto& ns = NodeTraits::node_state(*node);
if (valid_sentinel_ptr(ns.right_)) {
cur_depth++;
node = ns.right_;
- ASSERT_TRUE(VerifyParentBackLinks(tree, node), "");
+ ASSERT_NO_FAILURES(VerifyParentBackLinks(tree, node));
// Now go as far left as we can.
while (true) {
@@ -137,7 +134,7 @@
++cur_depth;
node = ns.left_;
- ASSERT_TRUE(VerifyParentBackLinks(tree, node), "");
+ ASSERT_NO_FAILURES(VerifyParentBackLinks(tree, node));
}
// Loop and visit the next node.
@@ -152,8 +149,8 @@
bool is_left = (parent_ns.left_ == node);
bool is_right = (parent_ns.right_ == node);
- ASSERT_TRUE(is_left != is_right, "");
- ASSERT_TRUE(is_left || is_right, "");
+ ASSERT_TRUE(is_left != is_right);
+ ASSERT_TRUE(is_left || is_right);
node = parent;
--cur_depth;
@@ -170,16 +167,16 @@
}
// We should have visited all of the nodes by now.
- ASSERT_EQ(tree.size(), size, "");
+ ASSERT_EQ(tree.size(), size);
// If this is being called from the balance tests, check the balance
// bounds, and computational complexity bounds.
- ASSERT_TRUE(Observer::VerifyBalance(tree, depth), "");
-
- END_TEST;
+ ASSERT_NO_FAILURES(Observer::VerifyBalance(tree, depth));
}
};
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_INTRUSIVE_WAVL_TREE_CHECKER_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/objects.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/objects.h
index 8bee00c..c2306bd 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/objects.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/objects.h
@@ -2,17 +2,18 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_OBJECTS_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_OBJECTS_H_
+
+#include <atomic>
+#include <memory>
+#include <utility>
#include <fbl/alloc_checker.h>
#include <fbl/ref_counted.h>
#include <fbl/ref_ptr.h>
#include <fbl/unique_ptr.h>
-#include <unittest/unittest.h>
-
-#include <atomic>
-#include <memory>
-#include <utility>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -206,7 +207,7 @@
ptr = nullptr;
}
- static bool CheckCustomDeleteInvocations(size_t expected) { return true; }
+ static void CheckCustomDeleteInvocations(size_t expected) {}
static void ResetCustomDeleter() {}
// Unmanaged pointers never get cleared when being moved or transferred.
@@ -230,7 +231,7 @@
static void ReleaseObject(PtrType& ptr) { ptr = nullptr; }
- static bool CheckCustomDeleteInvocations(size_t expected) { return true; }
+ static void CheckCustomDeleteInvocations(size_t expected) {}
static void ResetCustomDeleter() {}
// Unique pointers always get cleared when being moved or transferred.
@@ -254,7 +255,7 @@
static void ReleaseObject(PtrType& ptr) { ptr = nullptr; }
- static bool CheckCustomDeleteInvocations(size_t expected) { return true; }
+ static void CheckCustomDeleteInvocations(size_t expected) {}
static void ResetCustomDeleter() {}
// Unique pointers always get cleared when being moved or transferred.
@@ -278,10 +279,8 @@
static void ReleaseObject(PtrType& ptr) { ptr = nullptr; }
- static bool CheckCustomDeleteInvocations(size_t expected) {
- BEGIN_HELPER;
+ static void CheckCustomDeleteInvocations(size_t expected) {
EXPECT_EQ(expected, TestCustomDeleter<_ObjType>::delete_count());
- END_HELPER;
}
static void ResetCustomDeleter() { TestCustomDeleter<_ObjType>::reset_delete_count(); }
@@ -307,7 +306,7 @@
static void ReleaseObject(PtrType& ptr) { ptr = nullptr; }
- static bool CheckCustomDeleteInvocations(size_t expected) { return true; }
+ static void CheckCustomDeleteInvocations(size_t expected) {}
static void ResetCustomDeleter() {}
// RefCounted pointers do not get cleared when being transferred, but do get
@@ -320,3 +319,5 @@
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_OBJECTS_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/ordered_associative_container_test_environment.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/ordered_associative_container_test_environment.h
index 240ec36..fcedb35c 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/ordered_associative_container_test_environment.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/ordered_associative_container_test_environment.h
@@ -2,11 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_ORDERED_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_ORDERED_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
-#include <unittest/unittest.h>
#include <fbl/algorithm.h>
#include <fbl/tests/intrusive_containers/associative_container_test_environment.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -62,99 +63,83 @@
}
};
- bool DoOrderedIter(PopulateMethod populate_method) {
- BEGIN_TEST;
-
- ASSERT_TRUE(ACTE::Populate(container(), populate_method), "");
+ void DoOrderedIter(PopulateMethod populate_method) {
+ ASSERT_NO_FAILURES(ACTE::Populate(container(), populate_method));
auto iter = container().begin();
- EXPECT_TRUE(iter.IsValid(), "");
+ EXPECT_TRUE(iter.IsValid());
for (auto prev = iter++; iter.IsValid(); prev = iter++) {
// None of the associative containers currently support storing
// mutliple nodes with the same key, therefor the iteration ordering
// of the keys should be strictly monotonically increasing.
- ASSERT_TRUE(prev.IsValid(), "");
+ ASSERT_TRUE(prev.IsValid());
auto iter_key = KeyTraits::GetKey(*iter);
auto prev_key = KeyTraits::GetKey(*prev);
- EXPECT_TRUE(KeyTraits::LessThan(prev_key, iter_key), "");
- EXPECT_FALSE(KeyTraits::LessThan(iter_key, prev_key), "");
- EXPECT_FALSE(KeyTraits::EqualTo(prev_key, iter_key), "");
- EXPECT_FALSE(KeyTraits::EqualTo(iter_key, prev_key), "");
+ EXPECT_TRUE(KeyTraits::LessThan(prev_key, iter_key));
+ EXPECT_FALSE(KeyTraits::LessThan(iter_key, prev_key));
+ EXPECT_FALSE(KeyTraits::EqualTo(prev_key, iter_key));
+ EXPECT_FALSE(KeyTraits::EqualTo(iter_key, prev_key));
}
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- END_TEST;
+ ASSERT_NO_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool OrderedIter() {
- BEGIN_TEST;
-
- EXPECT_TRUE(DoOrderedIter(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoOrderedIter(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoOrderedIter(PopulateMethod::RandomKey), "");
-
- END_TEST;
+ void OrderedIter() {
+ ASSERT_NO_FATAL_FAILURES(DoOrderedIter(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoOrderedIter(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoOrderedIter(PopulateMethod::RandomKey));
}
- bool DoOrderedReverseIter(PopulateMethod populate_method) {
- BEGIN_TEST;
-
- ASSERT_TRUE(ACTE::Populate(container(), populate_method), "");
+ void DoOrderedReverseIter(PopulateMethod populate_method) {
+ ASSERT_NO_FAILURES(ACTE::Populate(container(), populate_method));
auto iter = container().end();
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
--iter;
- EXPECT_TRUE(iter.IsValid(), "");
+ EXPECT_TRUE(iter.IsValid());
for (auto prev = iter--; iter.IsValid(); prev = iter--) {
// None of the associative containers currently support storing
// mutliple nodes with the same key, therefor the reverse iteration
// ordering of the keys should be strictly monotonically decreasing.
- ASSERT_TRUE(prev.IsValid(), "");
+ ASSERT_TRUE(prev.IsValid());
auto iter_key = KeyTraits::GetKey(*iter);
auto prev_key = KeyTraits::GetKey(*prev);
- EXPECT_TRUE(KeyTraits::LessThan(iter_key, prev_key), "");
- EXPECT_FALSE(KeyTraits::LessThan(prev_key, iter_key), "");
- EXPECT_FALSE(KeyTraits::EqualTo(prev_key, iter_key), "");
- EXPECT_FALSE(KeyTraits::EqualTo(iter_key, prev_key), "");
+ EXPECT_TRUE(KeyTraits::LessThan(iter_key, prev_key));
+ EXPECT_FALSE(KeyTraits::LessThan(prev_key, iter_key));
+ EXPECT_FALSE(KeyTraits::EqualTo(prev_key, iter_key));
+ EXPECT_FALSE(KeyTraits::EqualTo(iter_key, prev_key));
}
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- END_TEST;
+ ASSERT_NO_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool OrderedReverseIter() {
- BEGIN_TEST;
-
- EXPECT_TRUE(DoOrderedReverseIter(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoOrderedReverseIter(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoOrderedReverseIter(PopulateMethod::RandomKey), "");
-
- END_TEST;
+ void OrderedReverseIter() {
+ ASSERT_NO_FATAL_FAILURES(DoOrderedReverseIter(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoOrderedReverseIter(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoOrderedReverseIter(PopulateMethod::RandomKey));
}
template <typename BoundTraits>
- bool DoBoundTest(PopulateMethod populate_method) {
- BEGIN_TEST;
-
+ void DoBoundTest(PopulateMethod populate_method) {
// Searching for a value while the tree is empty should always fail.
auto found = BoundTraits::Search(container(), 0u);
- EXPECT_FALSE(found.IsValid(), "");
+ EXPECT_FALSE(found.IsValid());
// Populate the container.
- ASSERT_TRUE(ACTE::Populate(container(), populate_method), "");
+ ASSERT_NO_FAILURES(ACTE::Populate(container(), populate_method));
// For every object we just put into the container compute the bound of
// obj.key, (obj.key - 1) and (obj.key + 1) using brute force as well as
// by using (upper|lower)_bound. Make sure that the result agree.
for (size_t i = 0; i < ACTE::OBJ_COUNT; ++i) {
auto ptr = ACTE::objects()[i];
- ASSERT_NONNULL(ptr, "");
+ ASSERT_NOT_NULL(ptr);
struct {
KeyType key;
@@ -170,7 +155,7 @@
// bound this/prev/next.
for (size_t j = 0; j < ACTE::OBJ_COUNT; ++j) {
auto tmp = ACTE::objects()[j];
- ASSERT_NONNULL(tmp, "");
+ ASSERT_NOT_NULL(tmp);
KeyType tmp_key = KeyTraits::GetKey(*tmp);
for (size_t k = 0; k < fbl::count_of(tests); ++k) {
@@ -192,48 +177,39 @@
// force. If we did find a bound, it should be the same bound
// we found using brute force.
if (test.bound != nullptr) {
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(test.bound, iter->raw_ptr(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(test.bound, iter->raw_ptr());
} else {
- EXPECT_FALSE(iter.IsValid(), "");
+ EXPECT_FALSE(iter.IsValid());
}
}
}
- ASSERT_TRUE(TestEnvironment<TestEnvTraits>::Reset(), "");
- END_TEST;
+ ASSERT_NO_FAILURES(TestEnvironment<TestEnvTraits>::Reset());
}
- bool UpperBound() {
- BEGIN_TEST;
-
+ void UpperBound() {
using NonConstBoundTraits = UpperBoundTraits<NonConstTraits>;
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::RandomKey), "");
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::RandomKey));
using ConstBoundTraits = UpperBoundTraits<ConstTraits>;
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::RandomKey), "");
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::RandomKey));
}
- bool LowerBound() {
- BEGIN_TEST;
-
+ void LowerBound() {
using NonConstBoundTraits = LowerBoundTraits<NonConstTraits>;
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoBoundTest<NonConstBoundTraits>(PopulateMethod::RandomKey), "");
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<NonConstBoundTraits>(PopulateMethod::RandomKey));
using ConstBoundTraits = LowerBoundTraits<ConstTraits>;
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::AscendingKey), "");
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::DescendingKey), "");
- EXPECT_TRUE(DoBoundTest<ConstBoundTraits>(PopulateMethod::RandomKey), "");
-
- END_TEST;
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::AscendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::DescendingKey));
+ ASSERT_NO_FATAL_FAILURES(DoBoundTest<ConstBoundTraits>(PopulateMethod::RandomKey));
}
private:
@@ -244,3 +220,5 @@
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_ORDERED_ASSOCIATIVE_CONTAINER_TEST_ENVIRONMENT_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/sequence_container_test_environment.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/sequence_container_test_environment.h
index c7ade58..e515199 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/sequence_container_test_environment.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/sequence_container_test_environment.h
@@ -2,14 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
-
-#include <unittest/unittest.h>
-#include <fbl/algorithm.h>
-#include <fbl/tests/intrusive_containers/base_test_environments.h>
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_SEQUENCE_CONTAINER_TEST_ENVIRONMENT_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_SEQUENCE_CONTAINER_TEST_ENVIRONMENT_H_
#include <utility>
+#include <fbl/algorithm.h>
+#include <fbl/tests/intrusive_containers/base_test_environments.h>
+#include <zxtest/zxtest.h>
+
namespace fbl {
namespace tests {
namespace intrusive_containers {
@@ -39,14 +40,12 @@
return SizeUtils<CType>::size(container);
}
- bool Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) override {
- BEGIN_TEST;
-
- EXPECT_EQ(0U, ObjType::live_obj_count(), "");
+ void Populate(ContainerType& container, RefAction ref_action = RefAction::HoldSome) override {
+ EXPECT_EQ(0U, ObjType::live_obj_count());
for (size_t i = 0; i < OBJ_COUNT; ++i) {
size_t ndx = OBJ_COUNT - i - 1;
- EXPECT_EQ(i, Size(container), "");
+ EXPECT_EQ(i, Size(container));
// Unless explicitly told to do so, don't hold a reference in the
// test environment for every 4th object created. Note, this only
@@ -69,8 +68,8 @@
}
PtrType new_object = this->CreateTrackedObject(ndx, ndx, hold_ref);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[ndx], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[ndx]);
// Alternate whether or not we move the pointer, or "transfer" it.
// Transferring means different things for different pointer types.
@@ -84,38 +83,32 @@
#else
container.push_front(TestEnvTraits::Transfer(new_object));
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
container.push_front(std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
}
- EXPECT_EQ(OBJ_COUNT, Size(container), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(container), "");
-
- END_TEST;
+ EXPECT_EQ(OBJ_COUNT, Size(container));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container));
}
- bool PushFront() {
- BEGIN_TEST;
- EXPECT_TRUE(Populate(container()), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
- END_TEST;
+ void PushFront() {
+ ASSERT_NO_FAILURES(Populate(container()));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool PushBack() {
- BEGIN_TEST;
-
- EXPECT_EQ(0U, ObjType::live_obj_count(), "");
+ void PushBack() {
+ EXPECT_EQ(0U, ObjType::live_obj_count());
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, Size(container()), "");
+ EXPECT_EQ(i, Size(container()));
PtrType new_object = this->CreateTrackedObject(i, i);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[i], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[i]);
// Alternate whether or not we move the pointer, or "transfer" it.
if (i & 1) {
@@ -124,87 +117,79 @@
#else
container().push_back(TestEnvTraits::Transfer(new_object));
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
container().push_back(std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
}
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
size_t i = 0;
for (const auto& obj : container()) {
- ASSERT_LT(i, OBJ_COUNT, "");
- EXPECT_EQ(objects()[i]->value(), obj.value(), "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
+ ASSERT_LT(i, OBJ_COUNT);
+ EXPECT_EQ(objects()[i]->value(), obj.value());
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
i++;
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool PopFront() {
- BEGIN_TEST;
-
- ASSERT_TRUE(Populate(container()), "");
+ void PopFront() {
+ ASSERT_NO_FAILURES(Populate(container()));
// Remove elements using pop_front. List should shrink each time we
// remove an element, but the number of live objects should only shrink
// when we let the last reference go out of scope.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
size_t remaining = OBJ_COUNT - i;
- ASSERT_TRUE(!container().is_empty(), "");
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining, Size(container()), "");
+ ASSERT_TRUE(!container().is_empty());
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining, Size(container()));
{
// Pop the item and sanity check it against our tracking.
PtrType tmp = container().pop_front();
- EXPECT_NONNULL(tmp, "");
- EXPECT_EQ(tmp->value(), i, "");
- EXPECT_EQ(objects()[i], tmp->raw_ptr(), "");
+ EXPECT_NOT_NULL(tmp);
+ EXPECT_EQ(tmp->value(), i);
+ EXPECT_EQ(objects()[i], tmp->raw_ptr());
// Make sure that the intrusive bookkeeping is up-to-date.
auto& ns = ContainerType::NodeTraits::node_state(*tmp);
- EXPECT_NULL(ns.next_, "");
+ EXPECT_NULL(ns.next_);
// The container has shrunk, but the object should still be around.
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining - 1, Size(container()), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining - 1, Size(container()));
}
// If we were not holding onto the object using the test
// environment's tracking, the live object count should have
// dropped. Otherwise, it should remain the same.
if (!HoldingObject(i))
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
else
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
// Let go of the object and verify that it has now gone away.
ReleaseObject(i);
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(i + 1));
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
+ TestEnvTraits::CheckCustomDeleteInvocations(i + 1);
}
// List should be empty now. Popping anything else should result in a
// null pointer.
- EXPECT_TRUE(container().is_empty(), "");
+ EXPECT_TRUE(container().is_empty());
PtrType should_be_null = container().pop_front();
- EXPECT_NULL(should_be_null, "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
-
- END_TEST;
+ EXPECT_NULL(should_be_null);
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
- bool PopBack() {
- BEGIN_TEST;
-
- ASSERT_TRUE(Populate(container()), "");
+ void PopBack() {
+ ASSERT_NO_FAILURES(Populate(container()));
// Remove elements using pop_back. List should shrink each time we
// remove an element, but the number of live objects should only shrink
@@ -212,129 +197,122 @@
for (size_t i = 0; i < OBJ_COUNT; ++i) {
size_t remaining = OBJ_COUNT - i;
size_t obj_ndx = OBJ_COUNT - i - 1;
- ASSERT_TRUE(!container().is_empty(), "");
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining, Size(container()), "");
+ ASSERT_TRUE(!container().is_empty());
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining, Size(container()));
{
// Pop the item and sanity check it against our tracking.
PtrType tmp = container().pop_back();
- EXPECT_NONNULL(tmp, "");
- EXPECT_EQ(tmp->value(), obj_ndx, "");
- EXPECT_EQ(objects()[obj_ndx], tmp->raw_ptr(), "");
+ EXPECT_NOT_NULL(tmp);
+ EXPECT_EQ(tmp->value(), obj_ndx);
+ EXPECT_EQ(objects()[obj_ndx], tmp->raw_ptr());
// Make sure that the intrusive bookkeeping is up-to-date.
auto& ns = ContainerType::NodeTraits::node_state(*tmp);
- EXPECT_NULL(ns.next_, "");
+ EXPECT_NULL(ns.next_);
// The container has shrunk, but the object should still be around.
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining - 1, Size(container()), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining - 1, Size(container()));
}
// If we were not holding onto the object using the test
// environment's tracking, the live object count should have
// dropped. Otherwise, it should remain the same.
- if (!HoldingObject(obj_ndx))
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
- else
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
+ if (!HoldingObject(obj_ndx)) {
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
+ } else {
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ }
// Let go of the object and verify that it has now gone away.
ReleaseObject(obj_ndx);
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(i + 1));
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
+ TestEnvTraits::CheckCustomDeleteInvocations(i + 1);
}
// List should be empty now. Popping anything else should result in a
// null pointer.
- EXPECT_TRUE(container().is_empty(), "");
+ EXPECT_TRUE(container().is_empty());
PtrType should_be_null = container().pop_back();
- EXPECT_NULL(should_be_null, "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
-
- END_TEST;
+ EXPECT_NULL(should_be_null);
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
}
- bool EraseNext() {
- BEGIN_TEST;
-
- ASSERT_TRUE(Populate(container()), "");
+ void EraseNext() {
+ ASSERT_NO_FAILURES(Populate(container()));
// Remove as many elements as we can using erase_next.
auto iter = container().begin();
for (size_t i = 1; i < OBJ_COUNT; ++i) {
size_t remaining = OBJ_COUNT - i + 1;
- ASSERT_TRUE(!container().is_empty(), "");
- ASSERT_TRUE(iter != container().end(), "");
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining, Size(container()), "");
+ ASSERT_TRUE(!container().is_empty());
+ ASSERT_TRUE(iter != container().end());
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining, Size(container()));
{
// Erase the item and sanity check it against our tracking.
PtrType tmp = container().erase_next(iter);
- EXPECT_NONNULL(tmp, "");
- EXPECT_EQ(tmp->value(), i, "");
- EXPECT_EQ(objects()[i], tmp->raw_ptr(), "");
+ EXPECT_NOT_NULL(tmp);
+ EXPECT_EQ(tmp->value(), i);
+ EXPECT_EQ(objects()[i], tmp->raw_ptr());
// Make sure that the intrusive bookkeeping is up-to-date.
auto& ns = ContainerType::NodeTraits::node_state(*tmp);
- EXPECT_TRUE(ns.IsValid(), "");
- EXPECT_FALSE(ns.InContainer(), "");
+ EXPECT_TRUE(ns.IsValid());
+ EXPECT_FALSE(ns.InContainer());
// The container has shrunk, but the object should still be around.
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
- EXPECT_EQ(remaining - 1, Size(container()), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
+ EXPECT_EQ(remaining - 1, Size(container()));
}
// If we were not holding onto the object using the test
// environment's tracking, the live object count should have
// dropped. Otherwise, it should remain the same.
if (!HoldingObject(i))
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
else
- EXPECT_EQ(remaining, ObjType::live_obj_count(), "");
+ EXPECT_EQ(remaining, ObjType::live_obj_count());
// Let go of the object and verify that it has now gone away.
ReleaseObject(i);
- EXPECT_EQ(remaining - 1, ObjType::live_obj_count(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(i));
+ EXPECT_EQ(remaining - 1, ObjType::live_obj_count());
+ TestEnvTraits::CheckCustomDeleteInvocations(i);
}
// Iterator should now be one away from the end, and there should be one
// object left
- EXPECT_EQ(1u, ObjType::live_obj_count(), "");
- EXPECT_EQ(1u, Size(container()), "");
- EXPECT_TRUE(iter != container().end(), "");
+ EXPECT_EQ(1u, ObjType::live_obj_count());
+ EXPECT_EQ(1u, Size(container()));
+ EXPECT_TRUE(iter != container().end());
iter++;
- EXPECT_TRUE(iter == container().end(), "");
+ EXPECT_TRUE(iter == container().end());
// Attempt to erase the element after the final element. This should
// fail, and indicate that it has failed by returning null.
iter = container().begin();
PtrType tmp = container().erase_next(iter);
- EXPECT_NULL(tmp, "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT - 1));
-
- END_TEST;
+ EXPECT_NULL(tmp);
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT - 1);
}
template <typename IterType>
- bool DoInsertAfter(IterType&& iter, size_t pos) {
- BEGIN_TEST;
-
- EXPECT_EQ(ObjType::live_obj_count(), Size(container()), "");
- EXPECT_TRUE(iter != container().end(), "");
+ void DoInsertAfter(IterType&& iter, size_t pos) {
+ EXPECT_EQ(ObjType::live_obj_count(), Size(container()));
+ EXPECT_TRUE(iter != container().end());
size_t orig_container_len = ObjType::live_obj_count();
size_t orig_iter_pos = iter->value();
- ASSERT_LT(orig_iter_pos, OBJ_COUNT, "");
- EXPECT_EQ(objects()[orig_iter_pos], iter->raw_ptr(), "");
+ ASSERT_LT(orig_iter_pos, OBJ_COUNT);
+ EXPECT_EQ(objects()[orig_iter_pos], iter->raw_ptr());
PtrType new_object = this->CreateTrackedObject(pos, pos, true);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[pos], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[pos]);
if (pos & 1) {
#if TEST_WILL_NOT_COMPILE || 0
@@ -342,35 +320,31 @@
#else
container().insert_after(iter, TestEnvTraits::Transfer(new_object));
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
container().insert_after(iter, std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
// List and number of live object should have grown.
- EXPECT_EQ(orig_container_len + 1, ObjType::live_obj_count(), "");
- EXPECT_EQ(orig_container_len + 1, Size(container()), "");
+ EXPECT_EQ(orig_container_len + 1, ObjType::live_obj_count());
+ EXPECT_EQ(orig_container_len + 1, Size(container()));
// The iterator should not have moved yet.
- EXPECT_TRUE(iter != container().end(), "");
- EXPECT_EQ(objects()[orig_iter_pos], iter->raw_ptr(), "");
- EXPECT_EQ(orig_iter_pos, iter->value(), "");
+ EXPECT_TRUE(iter != container().end());
+ EXPECT_EQ(objects()[orig_iter_pos], iter->raw_ptr());
+ EXPECT_EQ(orig_iter_pos, iter->value());
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool InsertAfter() {
- BEGIN_TEST;
-
+ void InsertAfter() {
// In order to insert_after, we need at least one object already in the
// container. Use push_front to make one.
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0U, Size(container()), "");
- EXPECT_TRUE(container().is_empty(), "");
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0U, Size(container()));
+ EXPECT_TRUE(container().is_empty());
container().push_front(std::move(this->CreateTrackedObject(0, 0, true)));
// Insert some elements after the last element container.
@@ -379,23 +353,23 @@
auto iter = container().begin();
for (size_t i = (OBJ_COUNT - END_INSERT_COUNT); i < OBJ_COUNT; ++i) {
- ASSERT_TRUE(DoInsertAfter(iter, i), "");
+ ASSERT_NO_FAILURES(DoInsertAfter(iter, i));
// Now that we have inserted after, we should be able to advance the
// iterator to what we just inserted.
iter++;
- ASSERT_TRUE(iter != container().end(), "");
- EXPECT_EQ(objects()[i], iter->raw_ptr(), "");
- EXPECT_EQ(objects()[i], (*iter).raw_ptr(), "");
- EXPECT_EQ(i, iter->value(), "");
- EXPECT_EQ(i, (*iter).value(), "");
+ ASSERT_TRUE(iter != container().end());
+ EXPECT_EQ(objects()[i], iter->raw_ptr());
+ EXPECT_EQ(objects()[i], (*iter).raw_ptr());
+ EXPECT_EQ(i, iter->value());
+ EXPECT_EQ(i, (*iter).value());
}
// Advancing iter at this point should bring it to the end.
- EXPECT_TRUE(iter != container().end(), "");
+ EXPECT_TRUE(iter != container().end());
iter++;
- EXPECT_TRUE(iter == container().end(), "");
+ EXPECT_TRUE(iter == container().end());
// Reset the iterator to the first element in the container, and test
// inserting between elements instead of at the end. To keep the
@@ -403,39 +377,35 @@
// advance the iterator in the process.
iter = container().begin();
for (size_t i = (OBJ_COUNT - END_INSERT_COUNT - 1); i > 0; --i) {
- ASSERT_TRUE(DoInsertAfter(iter, i), "");
+ ASSERT_NO_FAILURES(DoInsertAfter(iter, i));
}
- EXPECT_TRUE(iter != container().end(), "");
+ EXPECT_TRUE(iter != container().end());
// Check to make sure the container has the expected number of elements, and
// that they are in the proper order.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
size_t i = 0;
for (const auto& obj : container()) {
- EXPECT_EQ(objects()[i], &obj, "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
- EXPECT_EQ(i, obj.value(), "");
+ EXPECT_EQ(objects()[i], &obj);
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
+ EXPECT_EQ(i, obj.value());
i++;
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
template <typename TargetType>
- bool DoInsert(TargetType&& target, size_t pos) {
- BEGIN_TEST;
-
- EXPECT_EQ(ObjType::live_obj_count(), Size(container()), "");
+ void DoInsert(TargetType&& target, size_t pos) {
+ EXPECT_EQ(ObjType::live_obj_count(), Size(container()));
size_t orig_container_len = ObjType::live_obj_count();
PtrType new_object = this->CreateTrackedObject(pos, pos, true);
- ASSERT_NONNULL(new_object, "");
- EXPECT_EQ(new_object->raw_ptr(), objects()[pos], "");
+ ASSERT_NOT_NULL(new_object);
+ EXPECT_EQ(new_object->raw_ptr(), objects()[pos]);
if (pos & 1) {
#if TEST_WILL_NOT_COMPILE || 0
@@ -443,24 +413,20 @@
#else
container().insert(target, TestEnvTraits::Transfer(new_object));
#endif
- EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasTransferred(new_object));
} else {
container().insert(target, std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
// List and number of live object should have grown.
- EXPECT_EQ(orig_container_len + 1, ObjType::live_obj_count(), "");
- EXPECT_EQ(orig_container_len + 1, Size(container()), "");
-
- END_TEST;
+ EXPECT_EQ(orig_container_len + 1, ObjType::live_obj_count());
+ EXPECT_EQ(orig_container_len + 1, Size(container()));
}
- bool Insert() {
- BEGIN_TEST;
-
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0U, Size(container()), "");
+ void Insert() {
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0U, Size(container()));
static constexpr size_t END_INSERT_COUNT = 3;
static constexpr size_t START_INSERT_COUNT = 3;
@@ -473,13 +439,13 @@
// Insert some elements at the end of an initially empty container using the
// end() iterator accessor.
for (size_t i = (OBJ_COUNT - END_INSERT_COUNT); i < OBJ_COUNT; ++i)
- ASSERT_TRUE(DoInsert(container().end(), i), "");
+ ASSERT_NO_FAILURES(DoInsert(container().end(), i));
// Insert some elements at the start of a non-empty container using the
// begin() iterator accessor.
for (size_t i = 0; i < START_INSERT_COUNT; ++i) {
size_t ndx = START_INSERT_COUNT - i - 1;
- ASSERT_TRUE(DoInsert(container().begin(), ndx), "");
+ ASSERT_NO_FAILURES(DoInsert(container().begin(), ndx));
}
// Insert some elements in the middle non-empty container using an iterator
@@ -490,42 +456,38 @@
for (size_t i = 0; i < MID_INSERT_COUNT; ++i) {
size_t ndx = START_INSERT_COUNT + i;
- ASSERT_TRUE(DoInsert(iter, ndx), "");
+ ASSERT_NO_FAILURES(DoInsert(iter, ndx));
}
// iter should be END_INSERT_COUNT from the end of the
// container.
for (size_t i = 0; i < END_INSERT_COUNT; ++i) {
- EXPECT_TRUE(iter != container().end(), "");
+ EXPECT_TRUE(iter != container().end());
++iter;
}
- EXPECT_TRUE(++iter == container().end(), "");
+ EXPECT_TRUE(++iter == container().end());
// Check to make sure the container has the expected number of elements, and
// that they are in the proper order.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
size_t i = 0;
for (const auto& obj : container()) {
- ASSERT_LT(i, OBJ_COUNT, "");
- EXPECT_EQ(objects()[i], &obj, "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
- EXPECT_EQ(i, obj.value(), "");
+ ASSERT_LT(i, OBJ_COUNT);
+ EXPECT_EQ(objects()[i], &obj);
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
+ EXPECT_EQ(i, obj.value());
i++;
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool DirectInsert() {
- BEGIN_TEST;
-
- EXPECT_EQ(0u, ObjType::live_obj_count(), "");
- EXPECT_EQ(0U, Size(container()), "");
+ void DirectInsert() {
+ EXPECT_EQ(0u, ObjType::live_obj_count());
+ EXPECT_EQ(0U, Size(container()));
static constexpr size_t END_INSERT_COUNT = 3;
static constexpr size_t START_INSERT_COUNT = 3;
@@ -537,16 +499,17 @@
// Insert some elements at the end of an initially empty container using
// the end() iterator as the target.
- for (size_t i = (OBJ_COUNT - END_INSERT_COUNT); i < OBJ_COUNT; ++i)
- ASSERT_TRUE(DoInsert(container().end(), i), "");
+ for (size_t i = (OBJ_COUNT - END_INSERT_COUNT); i < OBJ_COUNT; ++i) {
+ ASSERT_NO_FAILURES(DoInsert(container().end(), i));
+ }
// Insert some elements at the start of a non-empty container node
// pointers which are always at the start of the container.
size_t insert_before_ndx = (OBJ_COUNT - END_INSERT_COUNT);
for (size_t i = 0; i < START_INSERT_COUNT; ++i) {
size_t ndx = START_INSERT_COUNT - i - 1;
- ASSERT_NONNULL(objects()[insert_before_ndx], "");
- ASSERT_TRUE(DoInsert(*objects()[insert_before_ndx], ndx), "");
+ ASSERT_NOT_NULL(objects()[insert_before_ndx]);
+ ASSERT_NO_FAILURES(DoInsert(*objects()[insert_before_ndx], ndx));
insert_before_ndx = ndx;
}
@@ -554,57 +517,49 @@
insert_before_ndx = (OBJ_COUNT - END_INSERT_COUNT);
for (size_t i = 0; i < MID_INSERT_COUNT; ++i) {
size_t ndx = START_INSERT_COUNT + i;
- ASSERT_NONNULL(objects()[insert_before_ndx], "");
- ASSERT_TRUE(DoInsert(*objects()[insert_before_ndx], ndx), "");
+ ASSERT_NOT_NULL(objects()[insert_before_ndx]);
+ ASSERT_NO_FAILURES(DoInsert(*objects()[insert_before_ndx], ndx));
}
// Check to make sure the container has the expected number of elements,
// and that they are in the proper order.
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
size_t i = 0;
for (const auto& obj : container()) {
- ASSERT_LT(i, OBJ_COUNT, "");
- EXPECT_EQ(objects()[i], &obj, "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
- EXPECT_EQ(i, obj.value(), "");
+ ASSERT_LT(i, OBJ_COUNT);
+ EXPECT_EQ(objects()[i], &obj);
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
+ EXPECT_EQ(i, obj.value());
i++;
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool FillN(size_t begin, size_t end) {
- BEGIN_TEST;
-
+ void FillN(size_t begin, size_t end) {
for (size_t i = begin; i < end; ++i) {
PtrType new_object = this->CreateTrackedObject(i, i);
- ASSERT_NONNULL(new_object, "");
+ ASSERT_NOT_NULL(new_object);
container().push_back(std::move(new_object));
- EXPECT_TRUE(TestEnvTraits::WasMoved(new_object), "");
+ EXPECT_TRUE(TestEnvTraits::WasMoved(new_object));
}
-
- END_TEST;
}
- bool BidirectionalEquals(const ContainerType& sequence, const size_t* values, size_t size) {
- BEGIN_TEST;
-
+ void BidirectionalEquals(const ContainerType& sequence, const size_t* values, size_t size) {
// We use SupportsConstantOrderErase as a way to discriminate a singly-
// linked list from a doubly-linked list.
static_assert(ContainerType::IsSequenced && ContainerType::SupportsConstantOrderErase,
"BidirectionalEquals must be used with a bi-directional sequence");
- ASSERT_EQ(size, Size(sequence), "");
+ ASSERT_EQ(size, Size(sequence));
// Iterate forwards and verify values.
const size_t* val_iter = values;
for (const auto& node : sequence) {
- EXPECT_EQ(node.value(), *val_iter, "");
+ EXPECT_EQ(node.value(), *val_iter);
++val_iter;
}
@@ -612,107 +567,100 @@
for (auto begin = sequence.begin(), end = sequence.end(); begin != end;) {
--val_iter;
--end;
- EXPECT_EQ(end->value(), *val_iter, "");
+ EXPECT_EQ(end->value(), *val_iter);
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool Splice() {
- BEGIN_TEST;
-
+ void Splice() {
constexpr size_t LIST_COUNT = 2;
static_assert(LIST_COUNT * 4 < OBJ_COUNT, "OBJ_COUNT too small to run Splice test!");
- EXPECT_EQ(0U, Size(container()), "");
+ EXPECT_EQ(0U, Size(container()));
ContainerType target;
- EXPECT_EQ(0U, Size(target), "");
+ EXPECT_EQ(0U, Size(target));
// Splice empty source into end of empty target list.
target.splice(target.end(), container());
- EXPECT_EQ(0U, Size(target), "");
- EXPECT_EQ(0u, Size(container()), "");
+ EXPECT_EQ(0U, Size(target));
+ EXPECT_EQ(0u, Size(container()));
// Populate the source list.
- ASSERT_TRUE(FillN(0, LIST_COUNT), "");
- EXPECT_EQ(LIST_COUNT, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(FillN(0, LIST_COUNT));
+ EXPECT_EQ(LIST_COUNT, Size(container()));
// Splice into end of empty target list.
target.splice(target.end(), container());
static const size_t expected_1[] = {0, 1};
- EXPECT_TRUE(BidirectionalEquals(target, expected_1, fbl::count_of(expected_1)), "");
- EXPECT_EQ(0u, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(BidirectionalEquals(target, expected_1, fbl::count_of(expected_1)));
+ EXPECT_EQ(0u, Size(container()));
// Populate the source list again.
- ASSERT_TRUE(FillN(LIST_COUNT, LIST_COUNT * 2), "");
- EXPECT_EQ(LIST_COUNT, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(FillN(LIST_COUNT, LIST_COUNT * 2));
+ EXPECT_EQ(LIST_COUNT, Size(container()));
// Splice into end of non-empty target list.
target.splice(target.end(), container());
static const size_t expected_2[] = {0, 1, 2, 3};
- EXPECT_TRUE(BidirectionalEquals(target, expected_2, fbl::count_of(expected_2)), "");
- EXPECT_EQ(0u, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(BidirectionalEquals(target, expected_2, fbl::count_of(expected_2)));
+ EXPECT_EQ(0u, Size(container()));
// Populate the source list again.
- ASSERT_TRUE(FillN(LIST_COUNT * 2, LIST_COUNT * 3), "");
- EXPECT_EQ(LIST_COUNT, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(FillN(LIST_COUNT * 2, LIST_COUNT * 3));
+ EXPECT_EQ(LIST_COUNT, Size(container()));
// Splice into start of non-empty target list.
target.splice(target.begin(), container());
static const size_t expected_3[] = {4, 5, 0, 1, 2, 3};
- EXPECT_TRUE(BidirectionalEquals(target, expected_3, fbl::count_of(expected_3)), "");
- EXPECT_EQ(0u, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(BidirectionalEquals(target, expected_3, fbl::count_of(expected_3)));
+ EXPECT_EQ(0u, Size(container()));
// Populate the source list again.
- ASSERT_TRUE(FillN(LIST_COUNT * 3, LIST_COUNT * 4), "");
- EXPECT_EQ(LIST_COUNT, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(FillN(LIST_COUNT * 3, LIST_COUNT * 4));
+ EXPECT_EQ(LIST_COUNT, Size(container()));
// Splice into second element of non-empty target list.
target.splice(++target.begin(), container());
static const size_t expected_4[] = {4, 6, 7, 5, 0, 1, 2, 3};
- EXPECT_TRUE(BidirectionalEquals(target, expected_4, fbl::count_of(expected_4)), "");
- EXPECT_EQ(0u, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(BidirectionalEquals(target, expected_4, fbl::count_of(expected_4)));
+ EXPECT_EQ(0u, Size(container()));
// Splice empty source into end of non-empty target list.
target.splice(target.end(), container());
- EXPECT_TRUE(BidirectionalEquals(target, expected_4, fbl::count_of(expected_4)), "");
- EXPECT_EQ(0u, Size(container()), "");
+ ASSERT_NO_FATAL_FAILURES(BidirectionalEquals(target, expected_4, fbl::count_of(expected_4)));
+ EXPECT_EQ(0u, Size(container()));
// No objects should have been deleted yet.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
// Finally clear the target.
target.clear();
- EXPECT_EQ(0u, Size(target), "");
+ EXPECT_EQ(0u, Size(target));
// By now, we should have created LIST_COUNT * 4 objects. They should all be gone now.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(LIST_COUNT * 4));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(LIST_COUNT * 4);
}
template <typename IterType>
- bool DoSeqIterate(const IterType& begin, const IterType& end) {
- BEGIN_TEST;
+ void DoSeqIterate(const IterType& begin, const IterType& end) {
IterType iter;
// begin() should point to the front of the sequence.
iter = begin;
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_TRUE(container().front() == *iter, "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_TRUE(container().front() == *iter);
// Iterate using begin/end
size_t i = 0;
for (iter = begin; iter != end;) {
// Exercise both -> and * dereferencing
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(objects()[i], iter->raw_ptr(), "");
- EXPECT_EQ(objects()[i], (*iter).raw_ptr(), "");
- EXPECT_EQ(i, iter->value(), "");
- EXPECT_EQ(i, (*iter).value(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(objects()[i], iter->raw_ptr());
+ EXPECT_EQ(objects()[i], (*iter).raw_ptr());
+ EXPECT_EQ(i, iter->value());
+ EXPECT_EQ(i, (*iter).value());
// Exercise both pre and postfix increment
if ((i++) & 1)
@@ -720,258 +668,239 @@
else
++iter;
}
- EXPECT_FALSE(iter.IsValid(), "");
-
- END_TEST;
+ EXPECT_FALSE(iter.IsValid());
}
- bool SeqIterate() {
- BEGIN_TEST;
-
+ void SeqIterate() {
// Start by making some objects.
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
// Test iterator
- EXPECT_TRUE(DoSeqIterate(container().begin(), container().end()), "");
+ ASSERT_NO_FATAL_FAILURES(DoSeqIterate(container().begin(), container().end()));
// Test const_iterator
- EXPECT_TRUE(DoSeqIterate(container().cbegin(), container().cend()), "");
+ ASSERT_NO_FATAL_FAILURES(DoSeqIterate(container().cbegin(), container().cend()));
// Iterate using the range-based for loop syntax
size_t i = 0;
for (auto& obj : container()) {
- EXPECT_EQ(objects()[i], &obj, "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
- EXPECT_EQ(i, obj.value(), "");
+ EXPECT_EQ(objects()[i], &obj);
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
+ EXPECT_EQ(i, obj.value());
i++;
}
// Iterate using the range-based for loop syntax over const references.
i = 0;
for (const auto& obj : container()) {
- EXPECT_EQ(objects()[i], &obj, "");
- EXPECT_EQ(objects()[i], obj.raw_ptr(), "");
- EXPECT_EQ(i, obj.value(), "");
+ EXPECT_EQ(objects()[i], &obj);
+ EXPECT_EQ(objects()[i], obj.raw_ptr());
+ EXPECT_EQ(i, obj.value());
i++;
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
template <typename IterType>
- bool DoSeqReverseIterate(const IterType& begin, const IterType& end) {
- BEGIN_TEST;
+ void DoSeqReverseIterate(const IterType& begin, const IterType& end) {
IterType iter;
// Backing up one from end() should give us back(). Check both pre
// and post-fix behavior.
iter = end;
--iter;
- ASSERT_TRUE(iter.IsValid(), "");
- ASSERT_TRUE(iter != end, "");
- EXPECT_TRUE(container().back() == *iter, "");
+ ASSERT_TRUE(iter.IsValid());
+ ASSERT_TRUE(iter != end);
+ EXPECT_TRUE(container().back() == *iter);
iter = end;
iter--;
- ASSERT_TRUE(iter.IsValid(), "");
- ASSERT_TRUE(iter != end, "");
- EXPECT_TRUE(container().back() == *iter, "");
+ ASSERT_TRUE(iter.IsValid());
+ ASSERT_TRUE(iter != end);
+ EXPECT_TRUE(container().back() == *iter);
// Make sure that backing up an iterator by one points always points
// to the previous object in the container.
iter = begin;
while (++iter != end) {
size_t prev_ndx = iter->value() - 1;
- ASSERT_LT(prev_ndx, OBJ_COUNT, "");
- ASSERT_NONNULL(objects()[prev_ndx], "");
+ ASSERT_LT(prev_ndx, OBJ_COUNT);
+ ASSERT_NOT_NULL(objects()[prev_ndx]);
auto prev_iter = iter;
--prev_iter;
- ASSERT_TRUE(prev_iter.IsValid(), "");
- EXPECT_FALSE(prev_iter == iter, "");
- EXPECT_TRUE(*prev_iter == *objects()[prev_ndx], "");
+ ASSERT_TRUE(prev_iter.IsValid());
+ EXPECT_FALSE(prev_iter == iter);
+ EXPECT_TRUE(*prev_iter == *objects()[prev_ndx]);
prev_iter = iter;
prev_iter--;
- ASSERT_TRUE(prev_iter.IsValid(), "");
- EXPECT_FALSE(prev_iter == iter, "");
- EXPECT_TRUE(*prev_iter == *objects()[prev_ndx], "");
+ ASSERT_TRUE(prev_iter.IsValid());
+ EXPECT_FALSE(prev_iter == iter);
+ EXPECT_TRUE(*prev_iter == *objects()[prev_ndx]);
}
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool SeqReverseIterate() {
- BEGIN_TEST;
-
+ void SeqReverseIterate() {
// Start by making some objects.
- ASSERT_TRUE(Populate(container()), "");
- EXPECT_EQ(OBJ_COUNT, Size(container()), "");
+ ASSERT_NO_FAILURES(Populate(container()));
+ EXPECT_EQ(OBJ_COUNT, Size(container()));
// Test iterator
- EXPECT_TRUE(DoSeqReverseIterate(container().begin(), container().end()), "");
+ ASSERT_NO_FATAL_FAILURES(DoSeqReverseIterate(container().begin(), container().end()));
// Test const_iterator
- EXPECT_TRUE(DoSeqReverseIterate(container().cbegin(), container().cend()), "");
+ ASSERT_NO_FATAL_FAILURES(DoSeqReverseIterate(container().cbegin(), container().cend()));
// This test should delete no objects
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(0));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations(0);
}
- bool ReplaceIfCopy() {
- BEGIN_TEST;
-
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ void ReplaceIfCopy() {
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Try (and fail) to replace an element in an empty container.
{
PtrType new_obj = TestEnvTraits::CreateObject(0);
auto raw_obj = PtrTraits::GetRaw(new_obj);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(1, ObjType::live_obj_count());
PtrType replaced =
container().replace_if([](const ObjType& obj) -> bool { return true; }, new_obj);
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- ASSERT_NONNULL(new_obj, "");
- EXPECT_NULL(replaced, "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NOT_NULL(new_obj);
+ EXPECT_NULL(replaced);
EXPECT_EQ(raw_obj, PtrTraits::GetRaw(new_obj));
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(new_obj);
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0, ObjType::live_obj_count());
}
// The object which we create in an attempt to replace an object in an
// empty container should be gone now.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(1));
+ TestEnvTraits::CheckCustomDeleteInvocations(1);
// Populate our container.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, ObjType::live_obj_count(), "");
+ EXPECT_EQ(i, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT - i - 1);
- ASSERT_NONNULL(new_obj, "");
- EXPECT_EQ(i + 1, ObjType::live_obj_count(), "");
+ ASSERT_NOT_NULL(new_obj);
+ EXPECT_EQ(i + 1, ObjType::live_obj_count());
container().push_front(std::move(new_obj));
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Replace all of the members of the contianer with new members which
// have a value never created during the populate phase.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + i);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
PtrType replaced = container().replace_if(
[i](const ObjType& obj) -> bool { return (obj.value() == i); }, new_obj);
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- ASSERT_NONNULL(replaced, "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NOT_NULL(replaced);
EXPECT_TRUE(new_obj->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_FALSE(replaced->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_EQ(i, replaced->value());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
// All of the replaced objects should have gone away now too.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + 1));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + 1);
// Try again, but this time fail each time (since all of the original
// element values have already been replaced).
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + (2 * i));
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
PtrType replaced = container().replace_if(
[i](const ObjType& obj) -> bool { return (obj.value() == i); }, new_obj);
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
- ASSERT_NULL(replaced, "");
+ ASSERT_NULL(replaced);
EXPECT_FALSE(new_obj->ContainerTraits::ContainableBaseClass::InContainer());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(new_obj);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
// The new objects we created (but failed to replace in the container) should now be gone.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + 1));
+ TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + 1);
// Make sure that the object are in order and have the values we expect.
size_t i = 0;
while (!container().is_empty()) {
PtrType ptr = container().pop_front();
- EXPECT_EQ(OBJ_COUNT + i, ptr->value(), "");
+ EXPECT_EQ(OBJ_COUNT + i, ptr->value());
TestEnvTraits::ReleaseObject(ptr);
++i;
}
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ EXPECT_EQ(0, ObjType::live_obj_count());
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Now all of the objects we created during the test should be gone.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations((3 * OBJ_COUNT) + 1));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations((3 * OBJ_COUNT) + 1);
}
- bool ReplaceIfMove() {
- BEGIN_TEST;
-
+ void ReplaceIfMove() {
// Try (and fail) to replace an element in an empty container.
{
PtrType new_obj = TestEnvTraits::CreateObject(0);
auto raw_obj = PtrTraits::GetRaw(new_obj);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(1, ObjType::live_obj_count());
PtrType replaced =
container().replace_if([](const ObjType& obj) -> bool { return true; }, TakePtr(new_obj));
- EXPECT_NULL(new_obj, "");
- ASSERT_NONNULL(replaced, "");
+ EXPECT_NULL(new_obj);
+ ASSERT_NOT_NULL(replaced);
EXPECT_EQ(raw_obj, PtrTraits::GetRaw(replaced));
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
EXPECT_EQ(0, Size(container()));
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0, ObjType::live_obj_count());
}
// The object which we create in an attempt to replace an object in an
// empty container should be gone now.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(1));
+ TestEnvTraits::CheckCustomDeleteInvocations(1);
// Populate our container.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, ObjType::live_obj_count(), "");
+ EXPECT_EQ(i, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT - i - 1);
- ASSERT_NONNULL(new_obj, "");
- EXPECT_EQ(i + 1, ObjType::live_obj_count(), "");
+ ASSERT_NOT_NULL(new_obj);
+ EXPECT_EQ(i + 1, ObjType::live_obj_count());
container().push_front(std::move(new_obj));
}
@@ -979,140 +908,132 @@
// Replace all of the members of the contianer with new members which
// have a value never created during Populate().
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + i);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
PtrType replaced = container().replace_if(
[i](const ObjType& obj) -> bool { return (obj.value() == i); }, TakePtr(new_obj));
- EXPECT_NULL(new_obj, "");
- ASSERT_NONNULL(replaced, "");
+ EXPECT_NULL(new_obj);
+ ASSERT_NOT_NULL(replaced);
EXPECT_FALSE(replaced->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_EQ(i, replaced->value());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
// All of the replaced objects should have gone away now too.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + 1));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT + 1);
// Try again, but this time fail each time (since all of the original
// element values have already been replaced).
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + (2 * i));
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
auto orig_raw = PtrTraits::GetRaw(new_obj);
PtrType replaced = container().replace_if(
[i](const ObjType& obj) -> bool { return (obj.value() == i); }, TakePtr(new_obj));
- EXPECT_NULL(new_obj, "");
- ASSERT_NONNULL(replaced, "");
- EXPECT_EQ(PtrTraits::GetRaw(replaced), orig_raw, "");
+ EXPECT_NULL(new_obj);
+ ASSERT_NOT_NULL(replaced);
+ EXPECT_EQ(PtrTraits::GetRaw(replaced), orig_raw);
EXPECT_FALSE(replaced->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_EQ(OBJ_COUNT + (2 * i), replaced->value());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
// The new objects we created (but failed to replace in the container) should now be gone.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + 1));
+ TestEnvTraits::CheckCustomDeleteInvocations((2 * OBJ_COUNT) + 1);
// Make sure that the object are in order and have the values we expect.
size_t i = 0;
while (!container().is_empty()) {
PtrType ptr = container().pop_front();
- EXPECT_EQ(OBJ_COUNT + i, ptr->value(), "");
+ EXPECT_EQ(OBJ_COUNT + i, ptr->value());
TestEnvTraits::ReleaseObject(ptr);
++i;
}
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
+ EXPECT_EQ(0, ObjType::live_obj_count());
// Now all of the objects we created during the test should be gone.
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations((3 * OBJ_COUNT) + 1));
-
- END_TEST;
+ TestEnvTraits::CheckCustomDeleteInvocations((3 * OBJ_COUNT) + 1);
}
- bool ReplaceCopy() {
- BEGIN_TEST;
-
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ void ReplaceCopy() {
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Populate our container.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, ObjType::live_obj_count(), "");
+ EXPECT_EQ(i, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT - i - 1);
- ASSERT_NONNULL(new_obj, "");
- EXPECT_EQ(i + 1, ObjType::live_obj_count(), "");
+ ASSERT_NOT_NULL(new_obj);
+ EXPECT_EQ(i + 1, ObjType::live_obj_count());
container().push_front(std::move(new_obj));
}
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
// Replace all of the members of the contianer with new members which
// have a value never created during the populate phase.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + i);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
auto iter =
container().find_if([i](const ObjType& obj) -> bool { return (obj.value() == i); });
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(i, iter->value(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(i, iter->value());
PtrType replaced = container().replace(*iter, new_obj);
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- ASSERT_NONNULL(replaced, "");
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ ASSERT_NOT_NULL(replaced);
EXPECT_TRUE(new_obj->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_FALSE(replaced->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_EQ(i, replaced->value());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
// Make sure that the object are in order and have the values we expect.
size_t i = 0;
while (!container().is_empty()) {
PtrType ptr = container().pop_front();
- EXPECT_EQ(OBJ_COUNT + i, ptr->value(), "");
+ EXPECT_EQ(OBJ_COUNT + i, ptr->value());
TestEnvTraits::ReleaseObject(ptr);
++i;
}
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
- EXPECT_TRUE(ContainerChecker::SanityCheck(container()), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
-
- END_TEST;
+ EXPECT_EQ(0, ObjType::live_obj_count());
+ ASSERT_NO_FATAL_FAILURES(ContainerChecker::SanityCheck(container()));
+ TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT);
}
- bool ReplaceMove() {
- BEGIN_TEST;
-
+ void ReplaceMove() {
// Populate our container.
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(i, ObjType::live_obj_count(), "");
+ EXPECT_EQ(i, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT - i - 1);
- ASSERT_NONNULL(new_obj, "");
- EXPECT_EQ(i + 1, ObjType::live_obj_count(), "");
+ ASSERT_NOT_NULL(new_obj);
+ EXPECT_EQ(i + 1, ObjType::live_obj_count());
container().push_front(std::move(new_obj));
}
@@ -1120,42 +1041,40 @@
// Replace all of the members of the contianer with new members which
// have a value never created during Populate().
for (size_t i = 0; i < OBJ_COUNT; ++i) {
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
PtrType new_obj = TestEnvTraits::CreateObject(OBJ_COUNT + i);
- ASSERT_NONNULL(new_obj, "");
+ ASSERT_NOT_NULL(new_obj);
auto iter =
container().find_if([i](const ObjType& obj) -> bool { return (obj.value() == i); });
- ASSERT_TRUE(iter.IsValid(), "");
- EXPECT_EQ(i, iter->value(), "");
+ ASSERT_TRUE(iter.IsValid());
+ EXPECT_EQ(i, iter->value());
PtrType replaced = container().replace(*iter, TakePtr(new_obj));
- EXPECT_NULL(new_obj, "");
- ASSERT_NONNULL(replaced, "");
+ EXPECT_NULL(new_obj);
+ ASSERT_NOT_NULL(replaced);
EXPECT_FALSE(replaced->ContainerTraits::ContainableBaseClass::InContainer());
EXPECT_EQ(i, replaced->value());
- EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT + 1, ObjType::live_obj_count());
TestEnvTraits::ReleaseObject(replaced);
- EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count(), "");
+ EXPECT_EQ(OBJ_COUNT, ObjType::live_obj_count());
}
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT));
+ TestEnvTraits::CheckCustomDeleteInvocations(OBJ_COUNT);
// Make sure that the object are in order and have the values we expect.
size_t i = 0;
while (!container().is_empty()) {
PtrType ptr = container().pop_front();
- EXPECT_EQ(OBJ_COUNT + i, ptr->value(), "");
+ EXPECT_EQ(OBJ_COUNT + i, ptr->value());
TestEnvTraits::ReleaseObject(ptr);
++i;
}
- EXPECT_EQ(0, ObjType::live_obj_count(), "");
- EXPECT_TRUE(TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT));
-
- END_TEST;
+ EXPECT_EQ(0, ObjType::live_obj_count());
+ TestEnvTraits::CheckCustomDeleteInvocations(2 * OBJ_COUNT);
}
private:
@@ -1177,3 +1096,5 @@
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_SEQUENCE_CONTAINER_TEST_ENVIRONMENT_H_
diff --git a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/test_thunks.h b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/test_thunks.h
index e6792ab..4588300 100644
--- a/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/test_thunks.h
+++ b/zircon/system/ulib/fbl/test/include/fbl/tests/intrusive_containers/test_thunks.h
@@ -2,19 +2,20 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#pragma once
+#ifndef FBL_TESTS_INTRUSIVE_CONTAINERS_TEST_THUNKS_H_
+#define FBL_TESTS_INTRUSIVE_CONTAINERS_TEST_THUNKS_H_
+
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
namespace intrusive_containers {
-#define MAKE_TEST_THUNK(_test_name) \
- static bool _test_name##Test() { \
- TestEnvironmentClass env; \
- BEGIN_TEST; \
- EXPECT_TRUE(env._test_name(), ""); \
- EXPECT_TRUE(env.Reset(), ""); \
- END_TEST; \
+#define MAKE_TEST_THUNK(_test_name) \
+ static void _test_name() { \
+ TestEnvironmentClass env; \
+ ASSERT_NO_FAILURES(env._test_name(), ""); \
+ ASSERT_NO_FAILURES(env.Reset(), ""); \
}
// A utility class used to generate static test thunks for the various
@@ -106,6 +107,14 @@
#define DEFINE_TEST_THUNK(_env_type, _container_type, _ptr_type) \
TestThunks<_env_type##ContainerTestEnvironment<_ptr_type##_container_type##TestTraits>>
+#define RUN_ZXTEST(_group, _flavor, _test) \
+ TEST(_group, _test##_##_flavor) { \
+ auto fn = _flavor ::_test; \
+ ASSERT_NO_FAILURES(fn()); \
+ }
+
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
+
+#endif // FBL_TESTS_INTRUSIVE_CONTAINERS_TEST_THUNKS_H_
diff --git a/zircon/system/ulib/fbl/test/intrusive_container_tests.cc b/zircon/system/ulib/fbl/test/intrusive_container_tests.cc
index 7824359..b0d1826 100644
--- a/zircon/system/ulib/fbl/test/intrusive_container_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_container_tests.cc
@@ -4,7 +4,7 @@
#include <fbl/intrusive_container_utils.h>
#include <fbl/tests/intrusive_containers/objects.h>
-#include <unittest/unittest.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -13,9 +13,7 @@
size_t TestObjBase::live_obj_count_ = 0;
template <typename T>
-bool swap_test(const T initial_a, const T initial_b) {
- BEGIN_HELPER;
-
+void swap_test(const T initial_a, const T initial_b) {
// Starting A and B need to be different in order for us to know that swap
// worked.
EXPECT_NE(::memcmp(&initial_a, &initial_b, sizeof(T)), 0);
@@ -26,13 +24,9 @@
EXPECT_EQ(::memcmp(&a, &initial_b, sizeof(T)), 0);
EXPECT_EQ(::memcmp(&b, &initial_a, sizeof(T)), 0);
-
- END_HELPER;
}
-bool swap_test() {
- BEGIN_TEST;
-
+TEST(IntrusiveContainerUtilsTest, Swap) {
struct SimpleSmallStruct {
uint8_t a, b;
};
@@ -43,35 +37,29 @@
uint64_t a, b;
};
- EXPECT_TRUE(swap_test<char>('a', 'b'));
- EXPECT_TRUE(swap_test<int8_t>(-5, 10));
- EXPECT_TRUE(swap_test<uint8_t>(5, 10));
- EXPECT_TRUE(swap_test<int16_t>(-12345, 12345));
- EXPECT_TRUE(swap_test<uint16_t>(12345, 54321));
- EXPECT_TRUE(swap_test<int32_t>(-1234567890, 123456789));
- EXPECT_TRUE(swap_test<uint32_t>(1234567890, 987654321));
- EXPECT_TRUE(swap_test<int64_t>(-12345678901234567, 12345678901234567));
- EXPECT_TRUE(swap_test<uint64_t>(12345678901234567, 98765432109876543));
- EXPECT_TRUE(swap_test<float>(-0.1234567f, 0.7654321f));
- EXPECT_TRUE(swap_test<double>(-0.12345678901234567890, 0.98765432109876543210));
- EXPECT_TRUE(swap_test<SimpleSmallStruct>({5, 4}, {2, 9}));
- EXPECT_TRUE(swap_test<SimpleBigStruct>({5, 4}, {2, 9}));
+ swap_test<char>('a', 'b');
+ swap_test<int8_t>(-5, 10);
+ swap_test<uint8_t>(5, 10);
+ swap_test<int16_t>(-12345, 12345);
+ swap_test<uint16_t>(12345, 54321);
+ swap_test<int32_t>(-1234567890, 123456789);
+ swap_test<uint32_t>(1234567890, 987654321);
+ swap_test<int64_t>(-12345678901234567, 12345678901234567);
+ swap_test<uint64_t>(12345678901234567, 98765432109876543);
+ swap_test<float>(-0.1234567f, 0.7654321f);
+ swap_test<double>(-0.12345678901234567890, 0.98765432109876543210);
+ swap_test<SimpleSmallStruct>({5, 4}, {2, 9});
+ swap_test<SimpleBigStruct>({5, 4}, {2, 9});
#if TEST_WILL_NOT_COMPILE || 0
- EXPECT_TRUE(swap_test<SimpleHugeStruct>({5, 4}, {2, 9}));
+ swap_test<SimpleHugeStruct>({5, 4}, {2, 9});
#endif
SimpleBigStruct a = {};
SimpleBigStruct b = {};
- EXPECT_TRUE(swap_test<void*>(&a, &b));
- EXPECT_TRUE(swap_test<SimpleBigStruct*>(&a, &b));
-
- END_TEST;
+ swap_test<void*>(&a, &b);
+ swap_test<SimpleBigStruct*>(&a, &b);
}
-BEGIN_TEST_CASE(container_utils_tests)
-RUN_NAMED_TEST("swap test", swap_test)
-END_TEST_CASE(container_utils_tests)
-
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl
diff --git a/zircon/system/ulib/fbl/test/intrusive_doubly_linked_list_tests.cc b/zircon/system/ulib/fbl/test/intrusive_doubly_linked_list_tests.cc
index c06e546..f0d86ab 100644
--- a/zircon/system/ulib/fbl/test/intrusive_doubly_linked_list_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_doubly_linked_list_tests.cc
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <unittest/unittest.h>
#include <fbl/intrusive_double_list.h>
#include <fbl/tests/intrusive_containers/intrusive_doubly_linked_list_checker.h>
#include <fbl/tests/intrusive_containers/sequence_container_test_environment.h>
#include <fbl/tests/intrusive_containers/test_thunks.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -64,219 +64,214 @@
using SUPCDTE = DEFINE_TEST_THUNK(Sequence, DLL, StdUniquePtrCustomDeleter);
using RPTE = DEFINE_TEST_THUNK(Sequence, DLL, RefPtr);
-BEGIN_TEST_CASE(double_linked_list_tests)
//////////////////////////////////////////
// General container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("Clear (unmanaged)", UMTE::ClearTest)
-RUN_NAMED_TEST("Clear (unique)", UPTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr)", SUPDDTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr<Del>)", SUPCDTE::ClearTest)
-RUN_NAMED_TEST("Clear (RefPtr)", RPTE::ClearTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, Clear)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Clear)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Clear)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Clear)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Clear)
-RUN_NAMED_TEST("ClearUnsafe (unmanaged)", UMTE::ClearUnsafeTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ClearUnsafe)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ClearUnsafe (unique)", UPTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr)", SUPDDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr<Del>)", SUPCDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (RefPtr)", RPTE::ClearUnsafeTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ClearUnsafe)
#endif
-RUN_NAMED_TEST("IsEmpty (unmanaged)", UMTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (unique)", UPTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr)", SUPDDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr<Del>)", SUPCDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (RefPtr)", RPTE::IsEmptyTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, IsEmpty)
-RUN_NAMED_TEST("Iterate (unmanaged)", UMTE::IterateTest)
-RUN_NAMED_TEST("Iterate (unique)", UPTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr)", SUPDDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr<Del>)", SUPCDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (RefPtr)", RPTE::IterateTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, Iterate)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Iterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Iterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Iterate)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Iterate)
-RUN_NAMED_TEST("IterErase (unmanaged)", UMTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (unique)", UPTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr)", SUPDDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr<Del>)", SUPCDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (RefPtr)", RPTE::IterEraseTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, IterErase)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, IterErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, IterErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, IterErase)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, IterErase)
-RUN_NAMED_TEST("DirectErase (unmanaged)", UMTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (unique)", UPTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr)", SUPDDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr<Del>)", SUPCDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (RefPtr)", RPTE::DirectEraseTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, DirectErase)
-RUN_NAMED_TEST("MakeIterator (unmanaged)", UMTE::MakeIteratorTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, MakeIterator)
+
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReverseIterErase)
+
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReverseIterate)
+
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, Swap)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Swap)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Swap)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Swap)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Swap)
+
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, RvalueOps)
+
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Scope)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Scope)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Scope)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Scope)
+
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, TwoContainer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("MakeIterator (unique)", UPTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr)", SUPDDTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr<Del>)", SUPCDTE::MakeIteratorTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, TwoContainer)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, TwoContainer)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, TwoContainer)
#endif
-RUN_NAMED_TEST("MakeIterator (RefPtr)", RPTE::MakeIteratorTest)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, TwoContainer)
-RUN_NAMED_TEST("ReverseIterErase (unmanaged)", UMTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (unique)", UPTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr)", SUPDDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr<Del>)", SUPCDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (RefPtr)", RPTE::ReverseIterEraseTest)
-
-RUN_NAMED_TEST("ReverseIterate (unmanaged)", UMTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (unique)", UPTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr)", SUPDDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr<Del>)", SUPCDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (RefPtr)", RPTE::ReverseIterateTest)
-
-RUN_NAMED_TEST("Swap (unmanaged)", UMTE::SwapTest)
-RUN_NAMED_TEST("Swap (unique)", UPTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr)", SUPDDTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr<Del>)", SUPCDTE::SwapTest)
-RUN_NAMED_TEST("Swap (RefPtr)", RPTE::SwapTest)
-
-RUN_NAMED_TEST("Rvalue Ops (unmanaged)", UMTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (unique)", UPTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr)", SUPDDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr<Del>)", SUPCDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (RefPtr)", RPTE::RvalueOpsTest)
-
-RUN_NAMED_TEST("Scope (unique)", UPTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr)", SUPDDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr<Del>)", SUPCDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (RefPtr)", RPTE::ScopeTest)
-
-RUN_NAMED_TEST("TwoContainer (unmanaged)", UMTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ThreeContainerHelper)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("TwoContainer (unique)", UPTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr)", SUPDDTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr<Del>)", SUPCDTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ThreeContainerHelper)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ThreeContainerHelper)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ThreeContainerHelper)
#endif
-RUN_NAMED_TEST("TwoContainer (RefPtr)", RPTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ThreeContainerHelper)
-RUN_NAMED_TEST("ThreeContainerHelper (unmanaged)", UMTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, IterCopyPointer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ThreeContainerHelper (unique)", UPTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr)", SUPDDTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr<Del>)", SUPCDTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, IterCopyPointer)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, IterCopyPointer)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, IterCopyPointer)
#endif
-RUN_NAMED_TEST("ThreeContainerHelper (RefPtr)", RPTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, IterCopyPointer)
-RUN_NAMED_TEST("IterCopyPointer (unmanaged)", UMTE::IterCopyPointerTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterCopyPointer (unique)", UPTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr)", SUPDDTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr<Del>)", SUPCDTE::IterCopyPointerTest)
-#endif
-RUN_NAMED_TEST("IterCopyPointer (RefPtr)", RPTE::IterCopyPointerTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, EraseIf)
-RUN_NAMED_TEST("EraseIf (unmanaged)", UMTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (unique)", UPTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr)", SUPDDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr<Del>)", SUPCDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (RefPtr)", RPTE::EraseIfTest)
-
-RUN_NAMED_TEST("FindIf (unmanaged)", UMTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (unique)", UPTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr)", SUPDDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr<Del>)", SUPCDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (RefPtr)", RPTE::FindIfTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, FindIf)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, FindIf)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, FindIf)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, FindIf)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, FindIf)
//////////////////////////////////////////
// Sequence container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("PushFront (unmanaged)", UMTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (unique)", UPTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (std::uptr)", SUPDDTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (std::uptr<Del>)", SUPCDTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (RefPtr)", RPTE::PushFrontTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, PushFront)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, PushFront)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, PushFront)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, PushFront)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, PushFront)
-RUN_NAMED_TEST("PopFront (unmanaged)", UMTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (unique)", UPTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (std::uptr)", SUPDDTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (std::uptr<Del>)", SUPCDTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (RefPtr)", RPTE::PopFrontTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, PopFront)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, PopFront)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, PopFront)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, PopFront)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, PopFront)
-RUN_NAMED_TEST("PushBack (unmanaged)", UMTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (unique)", UPTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (std::uptr)", SUPDDTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (std::uptr<Del>)", SUPCDTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (RefPtr)", RPTE::PushBackTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, PushBack)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, PushBack)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, PushBack)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, PushBack)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, PushBack)
-RUN_NAMED_TEST("PopBack (unmanaged)", UMTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (unique)", UPTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (std::uptr)", SUPDDTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (std::uptr<Del>)", SUPCDTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (RefPtr)", RPTE::PopBackTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, PopBack)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, PopBack)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, PopBack)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, PopBack)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, PopBack)
-RUN_NAMED_TEST("SeqIterate (unmanaged)", UMTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (unique)", UPTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (std::uptr)", SUPDDTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (std::uptr<Del>)", SUPCDTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (RefPtr)", RPTE::SeqIterateTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, SeqIterate)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, SeqIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, SeqIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, SeqIterate)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, SeqIterate)
-RUN_NAMED_TEST("SeqReverseIterate (unmanaged)", UMTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (unique)", UPTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (std::uptr)", SUPDDTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (std::uptr<Del>)",SUPCDTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (RefPtr)", RPTE::SeqReverseIterateTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, SeqReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, SeqReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, SeqReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, SeqReverseIterate)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, SeqReverseIterate)
-RUN_NAMED_TEST("EraseNext (unmanaged)", UMTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (unique)", UPTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (std::uptr)", SUPDDTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (std::uptr<Del>)", SUPCDTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (RefPtr)", RPTE::EraseNextTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, EraseNext)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, EraseNext)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, EraseNext)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, EraseNext)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, EraseNext)
-RUN_NAMED_TEST("InsertAfter (unmanaged)", UMTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (unique)", UPTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (std::uptr)", SUPDDTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (std::uptr<Del>)", SUPCDTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (RefPtr)", RPTE::InsertAfterTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, InsertAfter)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, InsertAfter)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, InsertAfter)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, InsertAfter)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, InsertAfter)
-RUN_NAMED_TEST("Insert (unmanaged)", UMTE::InsertTest)
-RUN_NAMED_TEST("Insert (unique)", UPTE::InsertTest)
-RUN_NAMED_TEST("Insert (std::uptr)", SUPDDTE::InsertTest)
-RUN_NAMED_TEST("Insert (std::uptr<Del>)", SUPCDTE::InsertTest)
-RUN_NAMED_TEST("Insert (RefPtr)", RPTE::InsertTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, Insert)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Insert)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Insert)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Insert)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Insert)
-RUN_NAMED_TEST("DirectInsert (unmanaged)", UMTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (unique)", UPTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (std::uptr)", SUPDDTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (std::uptr<Del>)", SUPCDTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (RefPtr)", RPTE::DirectInsertTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, DirectInsert)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, DirectInsert)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, DirectInsert)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, DirectInsert)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, DirectInsert)
-RUN_NAMED_TEST("Splice (unmanaged)", UMTE::SpliceTest)
-RUN_NAMED_TEST("Splice (unique)", UPTE::SpliceTest)
-RUN_NAMED_TEST("Splice (std::uptr)", SUPDDTE::SpliceTest)
-RUN_NAMED_TEST("Splice (std::uptr<Del>)", SUPCDTE::SpliceTest)
-RUN_NAMED_TEST("Splice (RefPtr)", RPTE::SpliceTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, Splice)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, Splice)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, Splice)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, Splice)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, Splice)
-RUN_NAMED_TEST("ReplaceIfCopy (unmanaged)", UMTE::ReplaceIfCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReplaceIfCopy)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ReplaceIfCopy (unique)", UPTE::ReplaceIfCopyTest)
-RUN_NAMED_TEST("ReplaceIfCopy (std::uptr)", SUPDDTE::ReplaceIfCopyTest)
-RUN_NAMED_TEST("ReplaceIfCopy (std::uptr<Del>)", SUPCDTE::ReplaceIfCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReplaceIfCopy)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReplaceIfCopy)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReplaceIfCopy)
#endif
-RUN_NAMED_TEST("ReplaceIfCopy (RefPtr)", RPTE::ReplaceIfCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReplaceIfCopy)
-RUN_NAMED_TEST("ReplaceIfMove (unmanaged)", UMTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (unique)", UPTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (std::uptr)", SUPDDTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (std::uptr<Del>)", SUPCDTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (RefPtr)", RPTE::ReplaceIfMoveTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReplaceIfMove)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReplaceIfMove)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReplaceIfMove)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReplaceIfMove)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReplaceIfMove)
-RUN_NAMED_TEST("ReplaceCopy (unmanaged)", UMTE::ReplaceCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReplaceCopy)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ReplaceCopy (unique)", UPTE::ReplaceCopyTest)
-RUN_NAMED_TEST("ReplaceCopy (std::uptr)", SUPDDTE::ReplaceCopyTest)
-RUN_NAMED_TEST("ReplaceCopy (std::uptr<Del>)", SUPCDTE::ReplaceCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReplaceCopy)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReplaceCopy)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReplaceCopy)
#endif
-RUN_NAMED_TEST("ReplaceCopy (RefPtr)", RPTE::ReplaceCopyTest)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReplaceCopy)
-RUN_NAMED_TEST("ReplaceMove (unmanaged)", UMTE::ReplaceMoveTest)
-RUN_NAMED_TEST("ReplaceMove (unique)", UPTE::ReplaceMoveTest)
-RUN_NAMED_TEST("ReplaceMove (std::uptr)", SUPDDTE::ReplaceMoveTest)
-RUN_NAMED_TEST("ReplaceMove (std::uptr<Del>)", SUPCDTE::ReplaceMoveTest)
-RUN_NAMED_TEST("ReplaceMove (RefPtr)", RPTE::ReplaceMoveTest)
-
-END_TEST_CASE(double_linked_list_tests)
+RUN_ZXTEST(DoublyLinkedListTest, UMTE, ReplaceMove)
+RUN_ZXTEST(DoublyLinkedListTest, UPTE, ReplaceMove)
+RUN_ZXTEST(DoublyLinkedListTest, SUPDDTE, ReplaceMove)
+RUN_ZXTEST(DoublyLinkedListTest, SUPCDTE, ReplaceMove)
+RUN_ZXTEST(DoublyLinkedListTest, RPTE, ReplaceMove)
// clang-format on
} // namespace intrusive_containers
diff --git a/zircon/system/ulib/fbl/test/intrusive_hash_table_dll_tests.cc b/zircon/system/ulib/fbl/test/intrusive_hash_table_dll_tests.cc
index 727c88d..682bc6e 100644
--- a/zircon/system/ulib/fbl/test/intrusive_hash_table_dll_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_hash_table_dll_tests.cc
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <unittest/unittest.h>
#include <fbl/intrusive_double_list.h>
#include <fbl/intrusive_hash_table.h>
#include <fbl/tests/intrusive_containers/associative_container_test_environment.h>
#include <fbl/tests/intrusive_containers/intrusive_hash_table_checker.h>
#include <fbl/tests/intrusive_containers/test_thunks.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -102,161 +102,155 @@
using SUPCDTE = DEFINE_TEST_THUNK(Associative, HTDLL, StdUniquePtrCustomDeleter);
using RPTE = DEFINE_TEST_THUNK(Associative, HTDLL, RefPtr);
-BEGIN_TEST_CASE(hashtable_dll_tests)
//////////////////////////////////////////
// General container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("Clear (unmanaged)", UMTE::ClearTest)
-RUN_NAMED_TEST("Clear (unique)", UPTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr)", SUPDDTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr<Del>)", SUPCDTE::ClearTest)
-RUN_NAMED_TEST("Clear (RefPtr)", RPTE::ClearTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, Clear)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, Clear)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, Clear)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, Clear)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, Clear)
-RUN_NAMED_TEST("ClearUnsafe (unmanaged)", UMTE::ClearUnsafeTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, ClearUnsafe)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ClearUnsafe (unique)", UPTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr)", SUPDDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr<Del>)", SUPCDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (RefPtr)", RPTE::ClearUnsafeTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, ClearUnsafe)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, ClearUnsafe)
#endif
-RUN_NAMED_TEST("IsEmpty (unmanaged)", UMTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (unique)", UPTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr)", SUPDDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr<Del>)", SUPCDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (RefPtr)", RPTE::IsEmptyTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, IsEmpty)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, IsEmpty)
-RUN_NAMED_TEST("Iterate (unmanaged)", UMTE::IterateTest)
-RUN_NAMED_TEST("Iterate (unique)", UPTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr)", SUPDDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr<Del>)", SUPCDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (RefPtr)", RPTE::IterateTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, Iterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, Iterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, Iterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, Iterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, Iterate)
-RUN_NAMED_TEST("IterErase (unmanaged)", UMTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (unique)", UPTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr)", SUPDDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr<Del>)", SUPCDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (RefPtr)", RPTE::IterEraseTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, IterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, IterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, IterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, IterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, IterErase)
-RUN_NAMED_TEST("DirectErase (unmanaged)", UMTE::DirectEraseTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("DirectErase (unique)", UPTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr)", SUPDDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr<Del>)", SUPCDTE::DirectEraseTest)
-#endif
-RUN_NAMED_TEST("DirectErase (RefPtr)", RPTE::DirectEraseTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, DirectErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, DirectErase)
-RUN_NAMED_TEST("MakeIterator (unmanaged)", UMTE::MakeIteratorTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("MakeIterator (unique)", UPTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr)", SUPDDTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr<Del>)", SUPCDTE::MakeIteratorTest)
-#endif
-RUN_NAMED_TEST("MakeIterator (RefPtr)", RPTE::MakeIteratorTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, MakeIterator)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, MakeIterator)
-RUN_NAMED_TEST("ReverseIterErase (unmanaged)", UMTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (unique)", UPTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr)", SUPDDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr<Del>)", SUPCDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (RefPtr)", RPTE::ReverseIterEraseTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, ReverseIterErase)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, ReverseIterErase)
-RUN_NAMED_TEST("ReverseIterate (unmanaged)", UMTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (unique)", UPTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr)", SUPDDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr<Del>)", SUPCDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (RefPtr)", RPTE::ReverseIterateTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, ReverseIterate)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, ReverseIterate)
// Hash tables do not support swapping or Rvalue operations (Assignment or
// construction) as doing so would be an O(n) operation (With 'n' == to the
// number of buckets in the hashtable)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("Swap (unmanaged)", UMTE::SwapTest)
-RUN_NAMED_TEST("Swap (unique)", UPTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr)", SUPDDTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr<Del>)", SUPCDTE::SwapTest)
-RUN_NAMED_TEST("Swap (RefPtr)", RPTE::SwapTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, Swap)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, Swap)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, Swap)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, Swap)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, Swap)
-RUN_NAMED_TEST("Rvalue Ops (unmanaged)", UMTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (unique)", UPTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr)", SUPDDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr<Del>)", SUPCDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (RefPtr)", RPTE::RvalueOpsTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, RvalueOps)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, RvalueOps)
#endif
-RUN_NAMED_TEST("Scope (unique)", UPTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr)", SUPDDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr<Del>)", SUPCDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (RefPtr)", RPTE::ScopeTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, Scope)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, Scope)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, Scope)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, Scope)
-RUN_NAMED_TEST("TwoContainer (unmanaged)", UMTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, TwoContainer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("TwoContainer (unique)", UPTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr)", SUPDDTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr<Del>)", SUPCDTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, TwoContainer)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, TwoContainer)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, TwoContainer)
#endif
-RUN_NAMED_TEST("TwoContainer (RefPtr)", RPTE::TwoContainerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, TwoContainer)
-RUN_NAMED_TEST("ThreeContainerHelper (unmanaged)", UMTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, ThreeContainerHelper)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ThreeContainerHelper (unique)", UPTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr)", SUPDDTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr<Del>)", SUPCDTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, ThreeContainerHelper)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, ThreeContainerHelper)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, ThreeContainerHelper)
#endif
-RUN_NAMED_TEST("ThreeContainerHelper (RefPtr)", RPTE::ThreeContainerHelperTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, ThreeContainerHelper)
-RUN_NAMED_TEST("IterCopyPointer (unmanaged)", UMTE::IterCopyPointerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, IterCopyPointer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterCopyPointer (unique)", UPTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr)", SUPDDTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr<Del>)", SUPCDTE::IterCopyPointerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, IterCopyPointer)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, IterCopyPointer)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, IterCopyPointer)
#endif
-RUN_NAMED_TEST("IterCopyPointer (RefPtr)", RPTE::IterCopyPointerTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, IterCopyPointer)
-RUN_NAMED_TEST("EraseIf (unmanaged)", UMTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (unique)", UPTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr)", SUPDDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr<Del>)", SUPCDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (RefPtr)", RPTE::EraseIfTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, EraseIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, EraseIf)
-RUN_NAMED_TEST("FindIf (unmanaged)", UMTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (unique)", UPTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr)", SUPDDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr<Del>)", SUPCDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (RefPtr)", RPTE::FindIfTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, FindIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, FindIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, FindIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, FindIf)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, FindIf)
//////////////////////////////////////////
// Associative container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("InsertByKey (unmanaged)", UMTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (unique)", UPTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr)", SUPDDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr<Del>)", SUPCDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (RefPtr)", RPTE::InsertByKeyTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, InsertByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, InsertByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, InsertByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, InsertByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, InsertByKey)
-RUN_NAMED_TEST("FindByKey (unmanaged)", UMTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (unique)", UPTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr)", SUPDDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr<Del>)", SUPCDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (RefPtr)", RPTE::FindByKeyTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, FindByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, FindByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, FindByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, FindByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, FindByKey)
-RUN_NAMED_TEST("EraseByKey (unmanaged)", UMTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (unique)", UPTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr)", SUPDDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr<Del>)", SUPCDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (RefPtr)", RPTE::EraseByKeyTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, EraseByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, EraseByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, EraseByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, EraseByKey)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, EraseByKey)
-RUN_NAMED_TEST("InsertOrFind (unmanaged)", UMTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (unique)", UPTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (std::uptr)", SUPDDTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (std::uptr<Del>)", SUPCDTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (RefPtr)", RPTE::InsertOrFindTest)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, InsertOrFind)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, InsertOrFind)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, InsertOrFind)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, InsertOrFind)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, InsertOrFind)
-RUN_NAMED_TEST("InsertOrReplace (unmanaged)", UMTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (unique)", UPTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr)", SUPDDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr<Del>)", SUPCDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (RefPtr)", RPTE::InsertOrReplaceTest)
-END_TEST_CASE(hashtable_dll_tests)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UMTE, InsertOrReplace)
+RUN_ZXTEST(DoublyLinkedHashTableTest, UPTE, InsertOrReplace)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPDDTE, InsertOrReplace)
+RUN_ZXTEST(DoublyLinkedHashTableTest, SUPCDTE, InsertOrReplace)
+RUN_ZXTEST(DoublyLinkedHashTableTest, RPTE, InsertOrReplace)
// clang-format on
} // namespace intrusive_containers
diff --git a/zircon/system/ulib/fbl/test/intrusive_hash_table_sll_tests.cc b/zircon/system/ulib/fbl/test/intrusive_hash_table_sll_tests.cc
index f67942b..3444242 100644
--- a/zircon/system/ulib/fbl/test/intrusive_hash_table_sll_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_hash_table_sll_tests.cc
@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <unittest/unittest.h>
-#include <fbl/intrusive_single_list.h>
#include <fbl/intrusive_hash_table.h>
+#include <fbl/intrusive_single_list.h>
#include <fbl/tests/intrusive_containers/associative_container_test_environment.h>
#include <fbl/tests/intrusive_containers/intrusive_hash_table_checker.h>
#include <fbl/tests/intrusive_containers/test_thunks.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -102,165 +102,161 @@
using SUPCDTE = DEFINE_TEST_THUNK(Associative, HTSLL, StdUniquePtrCustomDeleter);
using RPTE = DEFINE_TEST_THUNK(Associative, HTSLL, RefPtr);
-BEGIN_TEST_CASE(hashtable_sll_tests)
//////////////////////////////////////////
// General container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("Clear (unmanaged)", UMTE::ClearTest)
-RUN_NAMED_TEST("Clear (unique)", UPTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr)", SUPDDTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr<Del>)", SUPCDTE::ClearTest)
-RUN_NAMED_TEST("Clear (RefPtr)", RPTE::ClearTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, Clear)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, Clear)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, Clear)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, Clear)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, Clear)
-RUN_NAMED_TEST("ClearUnsafe (unmanaged)", UMTE::ClearUnsafeTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, ClearUnsafe)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ClearUnsafe (unique)", UPTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr)", SUPDDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr<Del>)", SUPCDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (RefPtr)", RPTE::ClearUnsafeTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, ClearUnsafe)
#endif
-RUN_NAMED_TEST("IsEmpty (unmanaged)", UMTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (unique)", UPTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr)", SUPDDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr<Del>)", SUPCDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (RefPtr)", RPTE::IsEmptyTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, IsEmpty)
-RUN_NAMED_TEST("Iterate (unmanaged)", UMTE::IterateTest)
-RUN_NAMED_TEST("Iterate (unique)", UPTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr)", SUPDDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr<Del>)", SUPCDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (RefPtr)", RPTE::IterateTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, Iterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, Iterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, Iterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, Iterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, Iterate)
// Hashtables with singly linked list bucket can perform direct
// iterator/reference erase operations, but the operations will be O(n)
-RUN_NAMED_TEST("IterErase (unmanaged)", UMTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (unique)", UPTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr)", SUPDDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr<Del>)", SUPCDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (RefPtr)", RPTE::IterEraseTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, IterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, IterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, IterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, IterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, IterErase)
-RUN_NAMED_TEST("DirectErase (unmanaged)", UMTE::DirectEraseTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("DirectErase (unique)", UPTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr)", SUPDDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr<Del>)", SUPCDTE::DirectEraseTest)
-#endif
-RUN_NAMED_TEST("DirectErase (RefPtr)", RPTE::DirectEraseTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, DirectErase)
-RUN_NAMED_TEST("MakeIterator (unmanaged)", UMTE::MakeIteratorTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("MakeIterator (unique)", UPTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr)", SUPDDTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr<Del>)", SUPCDTE::MakeIteratorTest)
-#endif
-RUN_NAMED_TEST("MakeIterator (RefPtr)", RPTE::MakeIteratorTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, MakeIterator)
// HashTables with SinglyLinkedList buckets cannot iterate backwards (because
// their buckets cannot iterate backwards)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ReverseIterErase (unmanaged)", UMTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (unique)", UPTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr)", SUPDDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr<Del>)", SUPCDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (RefPtr)", RPTE::ReverseIterEraseTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, ReverseIterErase)
-RUN_NAMED_TEST("ReverseIterate (unmanaged)", UMTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (unique)", UPTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr)", SUPDDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr<Del>)", SUPCDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (RefPtr)", RPTE::ReverseIterateTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, ReverseIterate)
#endif
// Hash tables do not support swapping or Rvalue operations (Assignment or
// construction) as doing so would be an O(n) operation (With 'n' == to the
// number of buckets in the hashtable)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("Swap (unmanaged)", UMTE::SwapTest)
-RUN_NAMED_TEST("Swap (unique)", UPTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr)", SUPDDTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr<Del>)", SUPCDTE::SwapTest)
-RUN_NAMED_TEST("Swap (RefPtr)", RPTE::SwapTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, Swap)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, Swap)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, Swap)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, Swap)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, Swap)
-RUN_NAMED_TEST("Rvalue Ops (unmanaged)", UMTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (unique)", UPTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr)", SUPDDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr<Del>)", SUPCDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (RefPtr)", RPTE::RvalueOpsTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, RvalueOps)
#endif
-RUN_NAMED_TEST("Scope (unique)", UPTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr)", SUPDDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr<Del>)", SUPCDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (RefPtr)", RPTE::ScopeTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, Scope)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, Scope)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, Scope)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, Scope)
-RUN_NAMED_TEST("TwoContainer (unmanaged)", UMTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, TwoContainer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("TwoContainer (unique)", UPTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr)", SUPDDTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr<Del>)", SUPCDTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, TwoContainer)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, TwoContainer)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, TwoContainer)
#endif
-RUN_NAMED_TEST("TwoContainer (RefPtr)", RPTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, TwoContainer)
-RUN_NAMED_TEST("ThreeContainerHelper (unmanaged)", UMTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, ThreeContainerHelper)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ThreeContainerHelper (unique)", UPTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr)", SUPDDTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr<Del>)", SUPCDTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, ThreeContainerHelper)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, ThreeContainerHelper)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, ThreeContainerHelper)
#endif
-RUN_NAMED_TEST("ThreeContainerHelper (RefPtr)", RPTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, ThreeContainerHelper)
-RUN_NAMED_TEST("IterCopyPointer (unmanaged)", UMTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, IterCopyPointer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterCopyPointer (unique)", UPTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr)", SUPDDTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr<Del>)", DDTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, IterCopyPointer)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, IterCopyPointer)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, IterCopyPointer)
#endif
-RUN_NAMED_TEST("IterCopyPointer (RefPtr)", RPTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, IterCopyPointer)
-RUN_NAMED_TEST("EraseIf (unmanaged)", UMTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (unique)", UPTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr)", SUPCDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (RefPtr)", RPTE::EraseIfTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, EraseIf)
-RUN_NAMED_TEST("FindIf (unmanaged)", UMTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (unique)", UPTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr)", SUPDDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr<Del>)", SUPCDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (RefPtr)", RPTE::FindIfTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, FindIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, FindIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, FindIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, FindIf)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, FindIf)
//////////////////////////////////////////
// Associative container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("InsertByKey (unmanaged)", UMTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (unique)", UPTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr)", SUPDDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr<Del>)", SUPCDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (RefPtr)", RPTE::InsertByKeyTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, InsertByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, InsertByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, InsertByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, InsertByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, InsertByKey)
-RUN_NAMED_TEST("FindByKey (unmanaged)", UMTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (unique)", UPTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr)", SUPDDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr<Del>)", SUPCDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (RefPtr)", RPTE::FindByKeyTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, FindByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, FindByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, FindByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, FindByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, FindByKey)
-RUN_NAMED_TEST("EraseByKey (unmanaged)", UMTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (unique)", UPTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr)", SUPDDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr<Del>)", SUPCDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (RefPtr)", RPTE::EraseByKeyTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, EraseByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, EraseByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, EraseByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, EraseByKey)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, EraseByKey)
-RUN_NAMED_TEST("InsertOrFind (unmanaged)", UMTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (unique)", UPTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (std::uptr)", SUPDDTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (RefPtr)", RPTE::InsertOrFindTest)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, InsertOrFind)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, InsertOrFind)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, InsertOrFind)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, InsertOrFind)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, InsertOrFind)
-RUN_NAMED_TEST("InsertOrReplace (unmanaged)", UMTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (unique)", UPTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr)", SUPDDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr<Del>)", SUPCDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (RefPtr)", RPTE::InsertOrReplaceTest)
-END_TEST_CASE(hashtable_sll_tests)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UMTE, InsertOrReplace)
+RUN_ZXTEST(SinglyLinkedHashTableTest, UPTE, InsertOrReplace)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPDDTE, InsertOrReplace)
+RUN_ZXTEST(SinglyLinkedHashTableTest, SUPCDTE, InsertOrReplace)
+RUN_ZXTEST(SinglyLinkedHashTableTest, RPTE, InsertOrReplace)
// clang-format on
} // namespace intrusive_containers
diff --git a/zircon/system/ulib/fbl/test/intrusive_singly_linked_list_tests.cc b/zircon/system/ulib/fbl/test/intrusive_singly_linked_list_tests.cc
index 08820a9..bab204f 100644
--- a/zircon/system/ulib/fbl/test/intrusive_singly_linked_list_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_singly_linked_list_tests.cc
@@ -2,11 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include <unittest/unittest.h>
#include <fbl/intrusive_single_list.h>
#include <fbl/tests/intrusive_containers/intrusive_singly_linked_list_checker.h>
#include <fbl/tests/intrusive_containers/sequence_container_test_environment.h>
#include <fbl/tests/intrusive_containers/test_thunks.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -56,233 +56,228 @@
std::tuple<typename SLLTraits<int*>::Tag1, typename SLLTraits<int*>::Tag2,
typename SLLTraits<int*>::Tag3>>);
+// clang-format off
DEFINE_TEST_OBJECTS(SLL);
-using UMTE = DEFINE_TEST_THUNK(Sequence, SLL, Unmanaged);
-using UPTE = DEFINE_TEST_THUNK(Sequence, SLL, UniquePtr);
+using UMTE = DEFINE_TEST_THUNK(Sequence, SLL, Unmanaged);
+using UPTE = DEFINE_TEST_THUNK(Sequence, SLL, UniquePtr);
using SUPDDTE = DEFINE_TEST_THUNK(Sequence, SLL, StdUniquePtrDefaultDeleter);
using SUPCDTE = DEFINE_TEST_THUNK(Sequence, SLL, StdUniquePtrCustomDeleter);
-using RPTE = DEFINE_TEST_THUNK(Sequence, SLL, RefPtr);
+using RPTE = DEFINE_TEST_THUNK(Sequence, SLL, RefPtr);
-// clang-format off
-BEGIN_TEST_CASE(single_linked_list_tests)
//////////////////////////////////////////
// General container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("Clear (unmanaged)", UMTE::ClearTest)
-RUN_NAMED_TEST("Clear (unique)", UPTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr)", SUPDDTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr<Del>)", SUPCDTE::ClearTest)
-RUN_NAMED_TEST("Clear (RefPtr)", RPTE::ClearTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, Clear)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Clear)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Clear)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Clear)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Clear)
-RUN_NAMED_TEST("ClearUnsafe (unmanaged)", UMTE::ClearUnsafeTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ClearUnsafe)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ClearUnsafe (unique)", UPTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr)", SUPDDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr<Del>)", SUPCDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (RefPtr)", RPTE::ClearUnsafeTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ClearUnsafe)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ClearUnsafe)
#endif
-RUN_NAMED_TEST("IsEmpty (unmanaged)", UMTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (unique)", UPTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr)", SUPDDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr<Del>)", SUPCDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (RefPtr)", RPTE::IsEmptyTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, IsEmpty)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, IsEmpty)
-RUN_NAMED_TEST("Iterate (unmanaged)", UMTE::IterateTest)
-RUN_NAMED_TEST("Iterate (unique)", UPTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr)", SUPDDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr<Del>)", SUPCDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (RefPtr)", RPTE::IterateTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, Iterate)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Iterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Iterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Iterate)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Iterate)
// SinglyLinkedLists cannot perform direct erase operations, nor can they erase
// using an iterator.
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterErase (unmanaged)", UMTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (unique)", UPTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr)", SUPDDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr<Del>)", SUPCDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (RefPtr)", RPTE::IterEraseTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, IterErase)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, IterErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, IterErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, IterErase)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, IterErase)
-RUN_NAMED_TEST("DirectErase (unmanaged)", UMTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (unique)", UPTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr)", SUPDDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr<Del>)", SUPCDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (RefPtr)", RPTE::DirectEraseTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, DirectErase)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, DirectErase)
#endif
-RUN_NAMED_TEST("MakeIterator (unmanaged)", UMTE::MakeIteratorTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("MakeIterator (unique)", UPTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr)", SUPDDTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr<Del>)", SUPCDTE::MakeIteratorTest)
-#endif
-RUN_NAMED_TEST("MakeIterator (RefPtr)", RPTE::MakeIteratorTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, MakeIterator)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, MakeIterator)
// SinglyLinkedLists cannot iterate backwards.
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ReverseIterErase (unmanaged)", UMTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (unique)", UPTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr)", SUPDDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr<Del>)", SUPCDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (RefPtr)", RPTE::ReverseIterEraseTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ReverseIterErase)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ReverseIterErase)
-RUN_NAMED_TEST("ReverseIterate (unmanaged)", UMTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (unique)", UPTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr)", SUPDDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr<Del>)", SUPCDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (RefPtr)", RPTE::ReverseIterateTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ReverseIterate)
#endif
-RUN_NAMED_TEST("Swap (unmanaged)", UMTE::SwapTest)
-RUN_NAMED_TEST("Swap (unique)", UPTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr)", SUPDDTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr<Del>)", SUPCDTE::SwapTest)
-RUN_NAMED_TEST("Swap (RefPtr)", RPTE::SwapTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, Swap)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Swap)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Swap)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Swap)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Swap)
-RUN_NAMED_TEST("Rvalue Ops (unmanaged)", UMTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (unique)", UPTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr)", SUPDDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr<Del>)", SUPCDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (RefPtr)", RPTE::RvalueOpsTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, RvalueOps)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, RvalueOps)
-RUN_NAMED_TEST("Scope (unique)", UPTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr)", SUPDDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr<Del>)", SUPCDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (RefPtr)", RPTE::ScopeTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Scope)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Scope)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Scope)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Scope)
-RUN_NAMED_TEST("TwoContainer (unmanaged)", UMTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, TwoContainer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("TwoContainer (unique)", UPTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr)", SUPDDTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr<Del>)", SUPCDTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, TwoContainer)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, TwoContainer)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, TwoContainer)
#endif
-RUN_NAMED_TEST("TwoContainer (RefPtr)", RPTE::TwoContainerTest)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, TwoContainer)
-RUN_NAMED_TEST("ThreeContainerHelper (unmanaged)", UMTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ThreeContainerHelper)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ThreeContainerHelper (unique)", UPTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr)", SUPDDTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr<Del>)", SUPCDTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ThreeContainerHelper)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ThreeContainerHelper)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ThreeContainerHelper)
#endif
-RUN_NAMED_TEST("ThreeContainerHelper (RefPtr)", RPTE::ThreeContainerHelperTest)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ThreeContainerHelper)
-RUN_NAMED_TEST("IterCopyPointer (unmanaged)", UMTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, IterCopyPointer)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterCopyPointer (unique)", UPTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr)", SUPDDTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr<Del>)", SUPCDTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, IterCopyPointer)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, IterCopyPointer)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, IterCopyPointer)
#endif
-RUN_NAMED_TEST("IterCopyPointer (RefPtr)", RPTE::IterCopyPointerTest)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, IterCopyPointer)
-RUN_NAMED_TEST("EraseIf (unmanaged)", UMTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (unique)", UPTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr)", SUPDDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr<Del>)", SUPCDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (RefPtr)", RPTE::EraseIfTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, EraseIf)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, EraseIf)
-RUN_NAMED_TEST("FindIf (unmanaged)", UMTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (unique)", UPTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr)", SUPDDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr<Del>)", SUPCDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (RefPtr)", RPTE::FindIfTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, FindIf)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, FindIf)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, FindIf)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, FindIf)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, FindIf)
//////////////////////////////////////////
// Sequence container specific tests.
//////////////////////////////////////////
-RUN_NAMED_TEST("PushFront (unmanaged)", UMTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (unique)", UPTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (std::uptr)", SUPDDTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (std::uptr<Del>)", SUPCDTE::PushFrontTest)
-RUN_NAMED_TEST("PushFront (RefPtr)", RPTE::PushFrontTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, PushFront)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, PushFront)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, PushFront)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, PushFront)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, PushFront)
-RUN_NAMED_TEST("PopFront (unmanaged)", UMTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (unique)", UPTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (std::uptr)", SUPDDTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (std::uptr<Del>)", SUPCDTE::PopFrontTest)
-RUN_NAMED_TEST("PopFront (RefPtr)", RPTE::PopFrontTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, PopFront)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, PopFront)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, PopFront)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, PopFront)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, PopFront)
// Singly linked lists cannot push/pop to/from the back
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("PushBack (unmanaged)", UMTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (unique)", UPTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (std::uptr)", SUPDDTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (std::uptr<Del>)", SUPCDTE::PushBackTest)
-RUN_NAMED_TEST("PushBack (RefPtr)", RPTE::PushBackTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, PushBack)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, PushBack)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, PushBack)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, PushBack)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, PushBack)
-RUN_NAMED_TEST("PopBack (unmanaged)", UMTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (unique)", UPTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (std::uptr)", SUPDDTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (std::uptr<Del>)", SUPCDTE::PopBackTest)
-RUN_NAMED_TEST("PopBack (RefPtr)", RPTE::PopBackTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, PopBack)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, PopBack)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, PopBack)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, PopBack)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, PopBack)
#endif
-RUN_NAMED_TEST("SeqIterate (unmanaged)", UMTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (unique)", UPTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (std::uptr)", SUPDDTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (std::uptr<Del>)", SUPCDTE::SeqIterateTest)
-RUN_NAMED_TEST("SeqIterate (RefPtr)", RPTE::SeqIterateTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, SeqIterate)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, SeqIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, SeqIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, SeqIterate)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, SeqIterate)
// SinglyLinkedLists cannot iterate backwards.
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("SeqReverseIterate (unmanaged)", UMTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (unique)", UPTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (std::uptr)", SUPDDTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (std::uptr<Del>)", SUPCDTE::SeqReverseIterateTest)
-RUN_NAMED_TEST("SeqReverseIterate (RefPtr)", RPTE::SeqReverseIterateTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, SeqReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, SeqReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, SeqReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, SeqReverseIterate)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, SeqReverseIterate)
#endif
-RUN_NAMED_TEST("EraseNext (unmanaged)", UMTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (unique)", UPTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (std::uptr)", SUPDDTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (std::uptr<Del>)", SUPCDTE::EraseNextTest)
-RUN_NAMED_TEST("EraseNext (RefPtr)", RPTE::EraseNextTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, EraseNext)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, EraseNext)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, EraseNext)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, EraseNext)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, EraseNext)
-RUN_NAMED_TEST("InsertAfter (unmanaged)", UMTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (unique)", UPTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (std::uptr)", SUPDDTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (std::uptr<Del>)", SUPCDTE::InsertAfterTest)
-RUN_NAMED_TEST("InsertAfter (RefPtr)", RPTE::InsertAfterTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, InsertAfter)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, InsertAfter)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, InsertAfter)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, InsertAfter)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, InsertAfter)
-// SinglyLinkedLists cannot perform inserts-bef ore operations, either with an
+// SinglyLinkedLists cannot perform inserts-before operations, either with an
// iterator or with a direct object reference.
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("Insert (unmanaged)", UMTE::InsertTest)
-RUN_NAMED_TEST("Insert (unique)", UPTE::InsertTest)
-RUN_NAMED_TEST("Insert (std::uptr)", SUPDDTE::InsertTest)
-RUN_NAMED_TEST("Insert (std::uptr<Del>)", SUPCDTE::InsertTest)
-RUN_NAMED_TEST("Insert (RefPtr)", RPTE::InsertTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, Insert)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Insert)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Insert)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Insert)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Insert)
-RUN_NAMED_TEST("DirectInsert (unmanaged)", UMTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (unique)", UPTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (std::uptr)", SUPDDTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (std::uptr<Del>)", SUPCDTE::DirectInsertTest)
-RUN_NAMED_TEST("DirectInsert (RefPtr)", RPTE::DirectInsertTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, DirectInsert)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, DirectInsert)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, DirectInsert)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, DirectInsert)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, DirectInsert)
#endif
-// SinglyLinkedLists cannot perform splice oper ations.
+// SinglyLinkedLists cannot perform splice operations.
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("Splice (unmanaged)", UMTE::SpliceTest)
-RUN_NAMED_TEST("Splice (unique)", UPTE::SpliceTest)
-RUN_NAMED_TEST("Splice (std::uptr)", SUPDDTE::SpliceTest)
-RUN_NAMED_TEST("Splice (std::uptr<Del>)", SUPCDTE::SpliceTest)
-RUN_NAMED_TEST("Splice (RefPtr)", RPTE::SpliceTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, Splice)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, Splice)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, Splice)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, Splice)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, Splice)
#endif
-RUN_NAMED_TEST("ReplaceIfCopy (unmanaged)", UMTE::ReplaceIfCopyTest)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ReplaceIfCopy)
#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ReplaceIfCopy (unique)", UPTE::ReplaceIfCopyTest)
-RUN_NAMED_TEST("ReplaceIfCopy (std::uptr)", SUPDDTE::ReplaceIfCopyTest)
-RUN_NAMED_TEST("ReplaceIfCopy (std::uptr<Del>)", SUPCDTE::ReplaceIfCopyTest)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ReplaceIfCopy)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ReplaceIfCopy)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ReplaceIfCopy)
#endif
-RUN_NAMED_TEST("ReplaceIfCopy (RefPtr)", RPTE::ReplaceIfCopyTest)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ReplaceIfCopy)
-RUN_NAMED_TEST("ReplaceIfMove (unmanaged)", UMTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (unique)", UPTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (std::uptr)", SUPDDTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (std::uptr<Del>)", SUPCDTE::ReplaceIfMoveTest)
-RUN_NAMED_TEST("ReplaceIfMove (RefPtr)", RPTE::ReplaceIfMoveTest)
-
-END_TEST_CASE(single_linked_list_tests)
+RUN_ZXTEST(SinglyLinkedListTest, UMTE, ReplaceIfMove)
+RUN_ZXTEST(SinglyLinkedListTest, UPTE, ReplaceIfMove)
+RUN_ZXTEST(SinglyLinkedListTest, SUPDDTE, ReplaceIfMove)
+RUN_ZXTEST(SinglyLinkedListTest, SUPCDTE, ReplaceIfMove)
+RUN_ZXTEST(SinglyLinkedListTest, RPTE, ReplaceIfMove)
// clang-format on
} // namespace intrusive_containers
diff --git a/zircon/system/ulib/fbl/test/intrusive_wavl_tree_tests.cc b/zircon/system/ulib/fbl/test/intrusive_wavl_tree_tests.cc
index 6b7ada2..b76c953 100644
--- a/zircon/system/ulib/fbl/test/intrusive_wavl_tree_tests.cc
+++ b/zircon/system/ulib/fbl/test/intrusive_wavl_tree_tests.cc
@@ -3,12 +3,13 @@
// found in the LICENSE file.
#include <math.h>
+
+#include <fbl/intrusive_pointer_traits.h>
#include <fbl/intrusive_wavl_tree.h>
#include <fbl/tests/intrusive_containers/intrusive_wavl_tree_checker.h>
#include <fbl/tests/intrusive_containers/ordered_associative_container_test_environment.h>
#include <fbl/tests/intrusive_containers/test_thunks.h>
-#include <fbl/intrusive_pointer_traits.h>
-#include <unittest/unittest.h>
+#include <zxtest/zxtest.h>
namespace fbl {
namespace tests {
@@ -167,8 +168,7 @@
static void RecordEraseDoubleRotation() { ++op_counts_.erase_double_rotations_; }
template <typename TreeType>
- static bool VerifyRankRule(const TreeType& tree, typename TreeType::RawPtrType node) {
- BEGIN_TEST;
+ static void VerifyRankRule(const TreeType& tree, typename TreeType::RawPtrType node) {
using NodeTraits = typename TreeType::NodeTraits;
// Check the rank rule. The rules for a WAVL tree are...
@@ -195,14 +195,10 @@
ASSERT_GE(2, delta, "Right hand rank difference not on range [1, 2]");
}
}
-
- END_TEST;
}
template <typename TreeType>
- static bool VerifyBalance(const TreeType& tree, uint64_t depth) {
- BEGIN_TEST;
-
+ static void VerifyBalance(const TreeType& tree, uint64_t depth) {
// Compute the maximum expected depth.
uint64_t max_depth = 0;
if (tree.size()) {
@@ -238,8 +234,6 @@
EXPECT_LE(total_erase_rotations, op_counts_.erase_ops_, "#erase_rotations must be <= #erases");
EXPECT_GE(max_depth, depth);
-
- END_TEST;
}
private:
@@ -297,26 +291,20 @@
static constexpr size_t kBalanceTestSize = 2048;
-static bool DoBalanceTestInsert(BalanceTestTree& tree, BalanceTestObj* ptr) {
- BEGIN_TEST;
-
+static void DoBalanceTestInsert(BalanceTestTree& tree, BalanceTestObj* ptr) {
// The selected object should not be in the tree.
- ASSERT_NONNULL(ptr);
+ ASSERT_NOT_NULL(ptr);
ASSERT_FALSE(ptr->InContainer());
// Put the object into the tree. Assert that it succeeds, then
// sanity check the tree.
ASSERT_TRUE(tree.insert_or_find(BalanceTestObjPtr(ptr)));
- ASSERT_TRUE(WAVLTreeChecker::SanityCheck(tree));
-
- END_TEST;
+ ASSERT_NO_FAILURES(WAVLTreeChecker::SanityCheck(tree));
}
-static bool DoBalanceTestErase(BalanceTestTree& tree, BalanceTestObj* ptr) {
- BEGIN_TEST;
-
+static void DoBalanceTestErase(BalanceTestTree& tree, BalanceTestObj* ptr) {
// The selected object should still be in the tree.
- ASSERT_NONNULL(ptr);
+ ASSERT_NOT_NULL(ptr);
ASSERT_TRUE(ptr->InContainer());
// Erase should find the object and transfer its pointer back to us.
@@ -327,9 +315,7 @@
// Run a full sanity check on the tree. Its depth should be
// consistent with a tree which has seen both inserts and erases.
- ASSERT_TRUE(WAVLTreeChecker::SanityCheck(tree));
-
- END_TEST;
+ ASSERT_NO_FAILURES(WAVLTreeChecker::SanityCheck(tree));
}
static void ShuffleEraseDeck(const unique_ptr<BalanceTestObj[]>& objects,
@@ -343,9 +329,182 @@
}
}
-static bool WAVLBalanceTest() {
- BEGIN_TEST;
+// clang-format off
+//////////////////////////////////////////
+// General container specific tests.
+//////////////////////////////////////////
+RUN_ZXTEST(WavlTreeTest, UMTE, Clear)
+RUN_ZXTEST(WavlTreeTest, UPTE, Clear)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, Clear)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, Clear)
+RUN_ZXTEST(WavlTreeTest, RPTE, Clear)
+RUN_ZXTEST(WavlTreeTest, UMTE, ClearUnsafe)
+#if TEST_WILL_NOT_COMPILE || 0
+RUN_ZXTEST(WavlTreeTest, UPTE, ClearUnsafe)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, ClearUnsafe)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, ClearUnsafe)
+RUN_ZXTEST(WavlTreeTest, RPTE, ClearUnsafe)
+#endif
+
+RUN_ZXTEST(WavlTreeTest, UMTE, IsEmpty)
+RUN_ZXTEST(WavlTreeTest, UPTE, IsEmpty)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, IsEmpty)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, IsEmpty)
+RUN_ZXTEST(WavlTreeTest, RPTE, IsEmpty)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, Iterate)
+RUN_ZXTEST(WavlTreeTest, UPTE, Iterate)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, Iterate)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, Iterate)
+RUN_ZXTEST(WavlTreeTest, RPTE, Iterate)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, IterErase)
+RUN_ZXTEST(WavlTreeTest, UPTE, IterErase)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, IterErase)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, IterErase)
+RUN_ZXTEST(WavlTreeTest, RPTE, IterErase)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, DirectErase)
+RUN_ZXTEST(WavlTreeTest, UPTE, DirectErase)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, DirectErase)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, DirectErase)
+RUN_ZXTEST(WavlTreeTest, RPTE, DirectErase)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, MakeIterator)
+RUN_ZXTEST(WavlTreeTest, UPTE, MakeIterator)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, MakeIterator)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, MakeIterator)
+RUN_ZXTEST(WavlTreeTest, RPTE, MakeIterator)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, ReverseIterErase)
+RUN_ZXTEST(WavlTreeTest, UPTE, ReverseIterErase)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, ReverseIterErase)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, ReverseIterErase)
+RUN_ZXTEST(WavlTreeTest, RPTE, ReverseIterErase)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, ReverseIterate)
+RUN_ZXTEST(WavlTreeTest, UPTE, ReverseIterate)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, ReverseIterate)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, ReverseIterate)
+RUN_ZXTEST(WavlTreeTest, RPTE, ReverseIterate)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, Swap)
+RUN_ZXTEST(WavlTreeTest, UPTE, Swap)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, Swap)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, Swap)
+RUN_ZXTEST(WavlTreeTest, RPTE, Swap)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, RvalueOps)
+RUN_ZXTEST(WavlTreeTest, UPTE, RvalueOps)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, RvalueOps)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, RvalueOps)
+RUN_ZXTEST(WavlTreeTest, RPTE, RvalueOps)
+
+RUN_ZXTEST(WavlTreeTest, UPTE, Scope)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, Scope)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, Scope)
+RUN_ZXTEST(WavlTreeTest, RPTE, Scope)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, TwoContainer)
+#if TEST_WILL_NOT_COMPILE || 0
+RUN_ZXTEST(WavlTreeTest, UPTE, TwoContainer)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, TwoContainer)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, TwoContainer)
+#endif
+RUN_ZXTEST(WavlTreeTest, RPTE, TwoContainer)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, ThreeContainerHelper)
+#if TEST_WILL_NOT_COMPILE || 0
+RUN_ZXTEST(WavlTreeTest, UPTE, ThreeContainerHelper)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, ThreeContainerHelper)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, ThreeContainerHelper)
+#endif
+RUN_ZXTEST(WavlTreeTest, RPTE, ThreeContainerHelper)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, IterCopyPointer)
+#if TEST_WILL_NOT_COMPILE || 0
+RUN_ZXTEST(WavlTreeTest, UPTE, IterCopyPointer)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, IterCopyPointer)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, IterCopyPointer)
+#endif
+RUN_ZXTEST(WavlTreeTest, RPTE, IterCopyPointer)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, EraseIf)
+RUN_ZXTEST(WavlTreeTest, UPTE, EraseIf)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, EraseIf)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, EraseIf)
+RUN_ZXTEST(WavlTreeTest, RPTE, EraseIf)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, FindIf)
+RUN_ZXTEST(WavlTreeTest, UPTE, FindIf)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, FindIf)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, FindIf)
+RUN_ZXTEST(WavlTreeTest, RPTE, FindIf)
+
+//////////////////////////////////////////
+// Associative container specific tests.
+//////////////////////////////////////////
+RUN_ZXTEST(WavlTreeTest, UMTE, InsertByKey)
+RUN_ZXTEST(WavlTreeTest, UPTE, InsertByKey)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, InsertByKey)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, InsertByKey)
+RUN_ZXTEST(WavlTreeTest, RPTE, InsertByKey)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, FindByKey)
+RUN_ZXTEST(WavlTreeTest, UPTE, FindByKey)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, FindByKey)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, FindByKey)
+RUN_ZXTEST(WavlTreeTest, RPTE, FindByKey)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, EraseByKey)
+RUN_ZXTEST(WavlTreeTest, UPTE, EraseByKey)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, EraseByKey)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, EraseByKey)
+RUN_ZXTEST(WavlTreeTest, RPTE, EraseByKey)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, InsertOrFind)
+RUN_ZXTEST(WavlTreeTest, UPTE, InsertOrFind)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, InsertOrFind)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, InsertOrFind)
+RUN_ZXTEST(WavlTreeTest, RPTE, InsertOrFind)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, InsertOrReplace)
+RUN_ZXTEST(WavlTreeTest, UPTE, InsertOrReplace)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, InsertOrReplace)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, InsertOrReplace)
+RUN_ZXTEST(WavlTreeTest, RPTE, InsertOrReplace)
+
+////////////////////////////////////////////////
+// OrderedAssociative container specific tests.
+////////////////////////////////////////////////
+RUN_ZXTEST(WavlTreeTest, UMTE, OrderedIter)
+RUN_ZXTEST(WavlTreeTest, UPTE, OrderedIter)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, OrderedIter)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, OrderedIter)
+RUN_ZXTEST(WavlTreeTest, RPTE, OrderedIter)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, OrderedReverseIter)
+RUN_ZXTEST(WavlTreeTest, UPTE, OrderedReverseIter)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, OrderedReverseIter)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, OrderedReverseIter)
+RUN_ZXTEST(WavlTreeTest, RPTE, OrderedReverseIter)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, UpperBound)
+RUN_ZXTEST(WavlTreeTest, UPTE, UpperBound)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, UpperBound)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, UpperBound)
+RUN_ZXTEST(WavlTreeTest, RPTE, UpperBound)
+
+RUN_ZXTEST(WavlTreeTest, UMTE, LowerBound)
+RUN_ZXTEST(WavlTreeTest, UPTE, LowerBound)
+RUN_ZXTEST(WavlTreeTest, SUPDDTE, LowerBound)
+RUN_ZXTEST(WavlTreeTest, SUPCDTE, LowerBound)
+RUN_ZXTEST(WavlTreeTest, RPTE, LowerBound)
+
+// The balance test is a pretty heavy test. Only enable it when asked to do so.
+#if FBL_TEST_ENABLE_WAVL_TREE_BALANCE_TEST
+TEST(WavlTreeTest, Balance) {
WAVLBalanceTestObserver::OpCounts op_counts;
// Declare these in a specific order (object pointer first) so that the tree
@@ -399,27 +558,31 @@
// Place each object into the tree, then perform a full sanity check on
// the tree. If anything goes wrong, just abort the test. If we keep
// going, we are just going to get an unmanageable amt of errors.
- for (size_t i = 0; i < kBalanceTestSize; ++i)
- ASSERT_TRUE(DoBalanceTestInsert(tree, &objects[i]));
+ for (size_t i = 0; i < kBalanceTestSize; ++i) {
+ ASSERT_NO_FAILURES(DoBalanceTestInsert(tree, &objects[i]));
+ }
// Shuffle the erase deck.
ShuffleEraseDeck(objects, rng);
// Erase half of the elements in the tree.
- for (size_t i = 0; i < (kBalanceTestSize >> 1); ++i)
- ASSERT_TRUE(DoBalanceTestErase(tree, objects[i].EraseDeckPtr()));
+ for (size_t i = 0; i < (kBalanceTestSize >> 1); ++i) {
+ ASSERT_NO_FAILURES(DoBalanceTestErase(tree, objects[i].EraseDeckPtr()));
+ }
// Put the elements back so that we have inserted some elements into a
// non-empty tree which has seen erase operations.
- for (size_t i = 0; i < (kBalanceTestSize >> 1); ++i)
- ASSERT_TRUE(DoBalanceTestInsert(tree, objects[i].EraseDeckPtr()));
+ for (size_t i = 0; i < (kBalanceTestSize >> 1); ++i) {
+ ASSERT_NO_FAILURES(DoBalanceTestInsert(tree, objects[i].EraseDeckPtr()));
+ }
// Shuffle the erase deck again.
ShuffleEraseDeck(objects, rng);
// Now erase every element from the tree.
- for (size_t i = 0; i < kBalanceTestSize; ++i)
- ASSERT_TRUE(DoBalanceTestErase(tree, objects[i].EraseDeckPtr()));
+ for (size_t i = 0; i < kBalanceTestSize; ++i) {
+ ASSERT_NO_FAILURES(DoBalanceTestErase(tree, objects[i].EraseDeckPtr()));
+ }
ASSERT_EQ(0u, tree.size());
@@ -436,197 +599,9 @@
EXPECT_LT(0u, op_counts.erase_demotes_, "Insufficient test coverage!");
EXPECT_LT(0u, op_counts.erase_rotations_, "Insufficient test coverage!");
EXPECT_LT(0u, op_counts.erase_double_rotations_, "Insufficient test coverage!");
-
- END_TEST;
}
-
-// clang-format off
-BEGIN_TEST_CASE(wavl_tree_tests)
-//////////////////////////////////////////
-// General container specific tests.
-//////////////////////////////////////////
-RUN_NAMED_TEST("Clear (unmanaged)", UMTE::ClearTest)
-RUN_NAMED_TEST("Clear (unique)", UPTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr)", SUPDDTE::ClearTest)
-RUN_NAMED_TEST("Clear (std::uptr<Del>)", SUPCDTE::ClearTest)
-RUN_NAMED_TEST("Clear (RefPtr)", RPTE::ClearTest)
-
-RUN_NAMED_TEST("ClearUnsafe (unmanaged)", UMTE::ClearUnsafeTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ClearUnsafe (unique)", UPTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr)", SUPDDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (std::uptr<Del>)", SUPCDTE::ClearUnsafeTest)
-RUN_NAMED_TEST("ClearUnsafe (RefPtr)", RPTE::ClearUnsafeTest)
#endif
-RUN_NAMED_TEST("IsEmpty (unmanaged)", UMTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (unique)", UPTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr)", SUPDDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (std::uptr<Del>)", SUPCDTE::IsEmptyTest)
-RUN_NAMED_TEST("IsEmpty (RefPtr)", RPTE::IsEmptyTest)
-
-RUN_NAMED_TEST("Iterate (unmanaged)", UMTE::IterateTest)
-RUN_NAMED_TEST("Iterate (unique)", UPTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr)", SUPDDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (std::uptr<Del>)", SUPCDTE::IterateTest)
-RUN_NAMED_TEST("Iterate (RefPtr)", RPTE::IterateTest)
-
-RUN_NAMED_TEST("IterErase (unmanaged)", UMTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (unique)", UPTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr)", SUPDDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (std::uptr<Del>)", SUPCDTE::IterEraseTest)
-RUN_NAMED_TEST("IterErase (RefPtr)", RPTE::IterEraseTest)
-
-RUN_NAMED_TEST("DirectErase (unmanaged)", UMTE::DirectEraseTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("DirectErase (unique)", UPTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr)", SUPDDTE::DirectEraseTest)
-RUN_NAMED_TEST("DirectErase (std::uptr<Del>)", SUPCDTE::DirectEraseTest)
-#endif
-RUN_NAMED_TEST("DirectErase (RefPtr)", RPTE::DirectEraseTest)
-
-RUN_NAMED_TEST("MakeIterator (unmanaged)", UMTE::MakeIteratorTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("MakeIterator (unique)", UPTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr)", SUPDDTE::MakeIteratorTest)
-RUN_NAMED_TEST("MakeIterator (std::uptr<Del>)", SUPCDTE::MakeIteratorTest)
-#endif
-RUN_NAMED_TEST("MakeIterator (RefPtr)", RPTE::MakeIteratorTest)
-
-RUN_NAMED_TEST("ReverseIterErase (unmanaged)", UMTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (unique)", UPTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr)", SUPDDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (std::uptr<Del>)", SUPCDTE::ReverseIterEraseTest)
-RUN_NAMED_TEST("ReverseIterErase (RefPtr)", RPTE::ReverseIterEraseTest)
-
-RUN_NAMED_TEST("ReverseIterate (unmanaged)", UMTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (unique)", UPTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr)", SUPDDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (std::uptr<Del>)", SUPCDTE::ReverseIterateTest)
-RUN_NAMED_TEST("ReverseIterate (RefPtr)", RPTE::ReverseIterateTest)
-
-RUN_NAMED_TEST("Swap (unmanaged)", UMTE::SwapTest)
-RUN_NAMED_TEST("Swap (unique)", UPTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr)", SUPDDTE::SwapTest)
-RUN_NAMED_TEST("Swap (std::uptr<Del>)", SUPCDTE::SwapTest)
-RUN_NAMED_TEST("Swap (RefPtr)", RPTE::SwapTest)
-
-RUN_NAMED_TEST("Rvalue Ops (unmanaged)", UMTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (unique)", UPTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr)", SUPDDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (std::uptr<Del>)", SUPCDTE::RvalueOpsTest)
-RUN_NAMED_TEST("Rvalue Ops (RefPtr)", RPTE::RvalueOpsTest)
-
-RUN_NAMED_TEST("Scope (unique)", UPTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr)", SUPDDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (std::uptr<Del>)", SUPCDTE::ScopeTest)
-RUN_NAMED_TEST("Scope (RefPtr)", RPTE::ScopeTest)
-
-RUN_NAMED_TEST("TwoContainer (unmanaged)", UMTE::TwoContainerTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("TwoContainer (unique)", UPTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr)", SUPDDTE::TwoContainerTest)
-RUN_NAMED_TEST("TwoContainer (std::uptr<Del>)", SUPCDTE::TwoContainerTest)
-#endif
-RUN_NAMED_TEST("TwoContainer (RefPtr)", RPTE::TwoContainerTest)
-
-RUN_NAMED_TEST("ThreeContainerHelper (unmanaged)", UMTE::ThreeContainerHelperTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("ThreeContainerHelper (unique)", UPTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr)", SUPDDTE::ThreeContainerHelperTest)
-RUN_NAMED_TEST("ThreeContainerHelper (std::uptr<Del>)", SUPCDTE::ThreeContainerHelperTest)
-#endif
-RUN_NAMED_TEST("ThreeContainerHelper (RefPtr)", RPTE::ThreeContainerHelperTest)
-
-RUN_NAMED_TEST("IterCopyPointer (unmanaged)", UMTE::IterCopyPointerTest)
-#if TEST_WILL_NOT_COMPILE || 0
-RUN_NAMED_TEST("IterCopyPointer (unique)", UPTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr)", SUPDDTE::IterCopyPointerTest)
-RUN_NAMED_TEST("IterCopyPointer (std::uptr<Del>)", SUPCDTE::IterCopyPointerTest)
-#endif
-RUN_NAMED_TEST("IterCopyPointer (RefPtr)", RPTE::IterCopyPointerTest)
-
-RUN_NAMED_TEST("EraseIf (unmanaged)", UMTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (unique)", UPTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr)", SUPDDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (std::uptr<Del>)", SUPCDTE::EraseIfTest)
-RUN_NAMED_TEST("EraseIf (RefPtr)", RPTE::EraseIfTest)
-
-RUN_NAMED_TEST("FindIf (unmanaged)", UMTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (unique)", UPTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr)", SUPDDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (std::uptr<Del>)", SUPCDTE::FindIfTest)
-RUN_NAMED_TEST("FindIf (RefPtr)", RPTE::FindIfTest)
-
-//////////////////////////////////////////
-// Associative container specific tests.
-//////////////////////////////////////////
-RUN_NAMED_TEST("InsertByKey (unmanaged)", UMTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (unique)", UPTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr)", SUPDDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (std::uptr<Del>)", SUPCDTE::InsertByKeyTest)
-RUN_NAMED_TEST("InsertByKey (RefPtr)", RPTE::InsertByKeyTest)
-
-RUN_NAMED_TEST("FindByKey (unmanaged)", UMTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (unique)", UPTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr)", SUPDDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (std::uptr<Del>)", SUPCDTE::FindByKeyTest)
-RUN_NAMED_TEST("FindByKey (RefPtr)", RPTE::FindByKeyTest)
-
-RUN_NAMED_TEST("EraseByKey (unmanaged)", UMTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (unique)", UPTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr)", SUPDDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (std::uptr<Del>)", SUPCDTE::EraseByKeyTest)
-RUN_NAMED_TEST("EraseByKey (RefPtr)", RPTE::EraseByKeyTest)
-
-RUN_NAMED_TEST("InsertOrFind (unmanaged)", UMTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (unique)", UPTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (std::uptr)", SUPDDTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (std::uptr<Del>)", SUPCDTE::InsertOrFindTest)
-RUN_NAMED_TEST("InsertOrFind (RefPtr)", RPTE::InsertOrFindTest)
-
-RUN_NAMED_TEST("InsertOrReplace (unmanaged)", UMTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (unique)", UPTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr)", SUPDDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (std::uptr<Del>)", SUPCDTE::InsertOrReplaceTest)
-RUN_NAMED_TEST("InsertOrReplace (RefPtr)", RPTE::InsertOrReplaceTest)
-
-////////////////////////////////////////////////
-// OrderedAssociative container specific tests.
-////////////////////////////////////////////////
-RUN_NAMED_TEST("OrderedIter (unmanaged)", UMTE::OrderedIterTest)
-RUN_NAMED_TEST("OrderedIter (unique)", UPTE::OrderedIterTest)
-RUN_NAMED_TEST("OrderedIter (std::uptr)", SUPDDTE::OrderedIterTest)
-RUN_NAMED_TEST("OrderedIter (std::uptr<Del>)", SUPCDTE::OrderedIterTest)
-RUN_NAMED_TEST("OrderedIter (RefPtr)", RPTE::OrderedIterTest)
-
-RUN_NAMED_TEST("OrderedReverseIter (unmanaged)", UMTE::OrderedReverseIterTest)
-RUN_NAMED_TEST("OrderedReverseIter (unique)", UPTE::OrderedReverseIterTest)
-RUN_NAMED_TEST("OrderedReverseIter (std::uptr)", SUPDDTE::OrderedReverseIterTest)
-RUN_NAMED_TEST("OrderedReverseIter (std::uptr<Del>)", SUPCDTE::OrderedReverseIterTest)
-RUN_NAMED_TEST("OrderedReverseIter (RefPtr)", RPTE::OrderedReverseIterTest)
-
-RUN_NAMED_TEST("UpperBound (unmanaged)", UMTE::UpperBoundTest)
-RUN_NAMED_TEST("UpperBound (unique)", UPTE::UpperBoundTest)
-RUN_NAMED_TEST("UpperBound (std::uptr)", SUPDDTE::UpperBoundTest)
-RUN_NAMED_TEST("UpperBound (std::uptr<Del>)", SUPCDTE::UpperBoundTest)
-RUN_NAMED_TEST("UpperBound (RefPtr)", RPTE::UpperBoundTest)
-
-RUN_NAMED_TEST("LowerBound (unmanaged)", UMTE::LowerBoundTest)
-RUN_NAMED_TEST("LowerBound (unique)", UPTE::LowerBoundTest)
-RUN_NAMED_TEST("LowerBound (std::uptr)", SUPDDTE::LowerBoundTest)
-RUN_NAMED_TEST("LowerBound (std::uptr<Del>)", SUPCDTE::LowerBoundTest)
-RUN_NAMED_TEST("LowerBound (RefPtr)", RPTE::LowerBoundTest)
-
-////////////////////////////
-// WAVLTree specific tests.
-////////////////////////////
-// ZX-2230: This can take more than 20 seconds in CI, so mark it medium.
-RUN_NAMED_TEST_MEDIUM("BalanceTest", WAVLBalanceTest)
-
-END_TEST_CASE(wavl_tree_tests)
-// clang-format on
-
} // namespace intrusive_containers
} // namespace tests
} // namespace fbl