diff --git a/AK/Tests/Makefile b/AK/Tests/Makefile index 04acb7a270..a9d2deb49b 100644 --- a/AK/Tests/Makefile +++ b/AK/Tests/Makefile @@ -1,8 +1,8 @@ -PROGRAMS = TestString TestQueue TestVector TestHashMap TestJSON +PROGRAMS = TestString TestQueue TestVector TestHashMap TestJSON TestWeakPtr all: $(PROGRAMS) -CXXFLAGS = -std=c++17 -Wall -Wextra +CXXFLAGS = -std=c++17 -Wall -Wextra -ggdb3 -O2 TestString: TestString.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../TestSuite.h ../LogStream.cpp $(CXX) $(CXXFLAGS) -I../ -I../../ -o $@ TestString.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../LogStream.cpp @@ -19,5 +19,8 @@ TestHashMap: TestHashMap.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cp TestJSON: TestJSON.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../TestSuite.h ../LogStream.cpp ../JsonObject.cpp ../JsonValue.cpp ../JsonArray.cpp ../JsonParser.cpp $(CXX) $(CXXFLAGS) -I../ -I../../ -o $@ TestJSON.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../LogStream.cpp ../JsonObject.cpp ../JsonValue.cpp ../JsonArray.cpp ../JsonParser.cpp +TestWeakPtr: TestWeakPtr.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../TestSuite.h ../LogStream.cpp ../WeakPtr.h ../Weakable.h + $(CXX) $(CXXFLAGS) -I../ -I../../ -o $@ TestWeakPtr.cpp ../String.cpp ../StringImpl.cpp ../StringBuilder.cpp ../StringView.cpp ../LogStream.cpp + clean: rm -f $(PROGRAMS) diff --git a/AK/Tests/TestWeakPtr.cpp b/AK/Tests/TestWeakPtr.cpp new file mode 100644 index 0000000000..f3145544ef --- /dev/null +++ b/AK/Tests/TestWeakPtr.cpp @@ -0,0 +1,57 @@ +#include +#include +#include +#include + +namespace AK{ +int g_weaklinks = 0; +} + +class SimpleWeakable : public Weakable { +public: + SimpleWeakable() {} + +private: + int m_member { 123 }; +}; + +TEST_CASE(basic_weak) +{ + WeakPtr weak1; + WeakPtr weak2; + + { + SimpleWeakable simple; + weak1 = simple.make_weak_ptr(); + weak2 = simple.make_weak_ptr(); + EXPECT_EQ(weak1.is_null(), false); + EXPECT_EQ(weak2.is_null(), false); + EXPECT_EQ(weak1.ptr(), &simple); + EXPECT_EQ(weak1.ptr(), weak2.ptr()); + } + + EXPECT_EQ(weak1.is_null(), true); + EXPECT_EQ(weak1.ptr(), nullptr); + EXPECT_EQ(weak1.ptr(), weak2.ptr()); +} + +TEST_CASE(weakptr_move) +{ + WeakPtr weak1; + WeakPtr weak2; + + { + SimpleWeakable simple; + weak1 = simple.make_weak_ptr(); + weak2 = move(weak1); + EXPECT_EQ(weak1.is_null(), true); + EXPECT_EQ(weak2.is_null(), false); + EXPECT_EQ(weak2.ptr(), &simple); + } + + EXPECT_EQ(weak2.is_null(), false); + + fprintf(stderr, "ok\n"); +} + +TEST_MAIN(WeakPtr)