From 583108004ce3fc9025c5e6d5d3b7809a19b6d310 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Fri, 12 Jun 2020 16:33:38 +0300 Subject: [PATCH] AK: Use unsigned int for refcount And while fixing all the tests that look at ref_count(), sneak in a fix for the test suite name. --- AK/RefCounted.h | 10 ++++++---- AK/Tests/TestNonnullRefPtr.cpp | 20 ++++++++++---------- AK/Tests/TestRefPtr.cpp | 26 +++++++++++++------------- 3 files changed, 29 insertions(+), 27 deletions(-) diff --git a/AK/RefCounted.h b/AK/RefCounted.h index 9804940547..590e8f5e15 100644 --- a/AK/RefCounted.h +++ b/AK/RefCounted.h @@ -58,22 +58,24 @@ constexpr auto call_one_ref_left_if_present(...) -> FalseType class RefCountedBase { public: + typedef unsigned int RefCountType; + ALWAYS_INLINE void ref() const { ASSERT(m_ref_count); ++m_ref_count; } - ALWAYS_INLINE int ref_count() const + ALWAYS_INLINE RefCountType ref_count() const { return m_ref_count; } protected: - RefCountedBase() {} + RefCountedBase() { } ALWAYS_INLINE ~RefCountedBase() { - ASSERT(!m_ref_count); + ASSERT(m_ref_count == 0); } ALWAYS_INLINE void deref_base() const @@ -82,7 +84,7 @@ protected: --m_ref_count; } - mutable int m_ref_count { 1 }; + mutable RefCountType m_ref_count { 1 }; }; template diff --git a/AK/Tests/TestNonnullRefPtr.cpp b/AK/Tests/TestNonnullRefPtr.cpp index 77d9fe777a..f4c997e2c3 100644 --- a/AK/Tests/TestNonnullRefPtr.cpp +++ b/AK/Tests/TestNonnullRefPtr.cpp @@ -37,26 +37,26 @@ TEST_CASE(basics) { auto object = adopt(*new Object); EXPECT(object.ptr() != nullptr); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object->ref(); - EXPECT_EQ(object->ref_count(), 2); + EXPECT_EQ(object->ref_count(), 2u); object->unref(); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); { NonnullRefPtr another = object; - EXPECT_EQ(object->ref_count(), 2); + EXPECT_EQ(object->ref_count(), 2u); } - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_reference) { auto object = adopt(*new Object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object = *object; - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_owner_of_self) @@ -70,14 +70,14 @@ TEST_CASE(assign_owner_of_self) child->parent = move(parent); child = *child->parent; - EXPECT_EQ(child->ref_count(), 1); + EXPECT_EQ(child->ref_count(), 1u); } TEST_CASE(swap_with_self) { auto object = adopt(*new Object); swap(object, object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } -TEST_MAIN(String) +TEST_MAIN(NonnullRefPtr) diff --git a/AK/Tests/TestRefPtr.cpp b/AK/Tests/TestRefPtr.cpp index 8b5d02dc8c..5208dc03ad 100644 --- a/AK/Tests/TestRefPtr.cpp +++ b/AK/Tests/TestRefPtr.cpp @@ -37,48 +37,48 @@ TEST_CASE(basics) { RefPtr object = adopt(*new Object); EXPECT(object.ptr() != nullptr); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object->ref(); - EXPECT_EQ(object->ref_count(), 2); + EXPECT_EQ(object->ref_count(), 2u); object->unref(); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); { NonnullRefPtr another = *object; - EXPECT_EQ(object->ref_count(), 2); + EXPECT_EQ(object->ref_count(), 2u); } - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_reference) { RefPtr object = adopt(*new Object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object = *object; - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_ptr) { RefPtr object = adopt(*new Object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object = object.ptr(); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_moved_self) { RefPtr object = adopt(*new Object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); object = move(object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_CASE(assign_copy_self) { RefPtr object = adopt(*new Object); - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); #ifdef __clang__ #pragma clang diagnostic push @@ -89,7 +89,7 @@ TEST_CASE(assign_copy_self) #pragma clang diagnostic pop #endif - EXPECT_EQ(object->ref_count(), 1); + EXPECT_EQ(object->ref_count(), 1u); } TEST_MAIN(RefPtr)