From 6bf4b90c90f15f4ab60833bddf5b5756d1a6b1f6 Mon Sep 17 00:00:00 2001 From: Elizabeth Alexander Hunt Date: Thu, 2 Jul 2026 11:55:17 -0700 Subject: Init --- Homework/cs3460/smart_pointers/TestMemory.cpp | 138 ++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 Homework/cs3460/smart_pointers/TestMemory.cpp (limited to 'Homework/cs3460/smart_pointers/TestMemory.cpp') diff --git a/Homework/cs3460/smart_pointers/TestMemory.cpp b/Homework/cs3460/smart_pointers/TestMemory.cpp new file mode 100644 index 0000000..891b8b6 --- /dev/null +++ b/Homework/cs3460/smart_pointers/TestMemory.cpp @@ -0,0 +1,138 @@ + +#include "shared_ptr.hpp" + +#include "gtest/gtest.h" +#include +#include +#include + +class MyClass +{ + public: + MyClass(std::string name) : + m_name(name) {} + + void updateName(std::string name) { m_name = name; } + + std::string m_name; +}; + +int main(int argc, char* argv[]) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} + +template +T testCopyMoveConstructors(T p) +{ + EXPECT_GT(p.use_count(), 1); + return p; +} + +template +void testPrimitives() +{ + std::shared_ptr p1 = std::make_shared(); + usu::shared_ptr p2 = usu::make_shared(); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + + // Create a new scope to validate incrementing, decrementing reference counts + { + auto p1b = p1; + auto p2b = p2; + + EXPECT_EQ(p1.use_count(), p2.use_count()); + } + + EXPECT_EQ(p1.use_count(), p2.use_count()); +} + +TEST(Primitives, DefaultConstruction) +{ + testPrimitives(); + testPrimitives(); + testPrimitives(); + testPrimitives(); +} + +TEST(Primitives, OverloadedConstructors) +{ + std::shared_ptr p1 = std::make_shared(10); + usu::shared_ptr p2 = usu::make_shared(10); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + EXPECT_EQ(*p1, *p2); +} + +TEST(Primitives, CanReuse) +{ + std::shared_ptr p1 = std::make_shared(); + usu::shared_ptr p2 = usu::make_shared(); + + p1 = std::make_shared(10); + p2 = usu::make_shared(10); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + EXPECT_EQ(*p1, *p2); +} + +TEST(Primitives, CopyMoveOperations) +{ + std::shared_ptr p1 = std::make_shared(); + usu::shared_ptr p2 = usu::make_shared(); + + p1 = testCopyMoveConstructors(p1); + p2 = testCopyMoveConstructors(p2); + + EXPECT_EQ(p1.use_count(), p2.use_count()); +} + +TEST(ComplexTypes, CanCreateComplexTypes) +{ + std::shared_ptr p1 = std::make_shared(); + usu::shared_ptr p2 = usu::make_shared(); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + EXPECT_EQ(*p1, *p2); +} + +TEST(ComplexTypes, OverloadedConstructors) +{ + std::shared_ptr p1 = + std::make_shared("This is a test"); + usu::shared_ptr p2 = + usu::make_shared("This is a test"); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + EXPECT_EQ(*p1, *p2); +} + +TEST(ComplexTypes, PointerOperator) +{ + auto p1 = std::make_shared("Some Name"); + auto p2 = usu::make_shared("Some Name"); + + EXPECT_EQ(p1.use_count(), p2.use_count()); + EXPECT_EQ(p1->m_name, p2->m_name); + + p1->updateName("Updated Name"); + p2->updateName("Updated Name"); + EXPECT_EQ(p1->m_name, p2->m_name); +} + +TEST(Array, CanCreateArray) +{ + std::array truth{ 2, 3, 5, 7 }; + usu::shared_ptr primes = usu::make_shared_array(); + primes[0] = truth[0]; + primes[1] = truth[1]; + primes[2] = truth[2]; + primes[3] = truth[3]; + + for (unsigned int i = 0; i < primes.size(); i++) + { + EXPECT_EQ(primes[i], truth[i]); + } +} -- cgit v1.3