#include "CppUnitTest.h" #include "MemoryLeakDetector.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace TestingUtilities { TEST_CLASS(_MemoryLeakDetector) { public: // =========== MEMORY LEAK TESTS =========== // These tests depends on debug-mode for memory insights. // Thus, they only works in debug mode. #ifdef _DEBUG // Tests to detect no memory leak, if the test does nothing at all TEST_METHOD(No_Memleak_For_Nothing) { MemoryLeakDetector mld; mld.Init(); { // Do nothing here } Assert::IsFalse(mld.DetectLeak()); return; } // Tests to detect no memory leak when not even touching pointers TEST_METHOD(No_Memleak_For_No_Pointer_Action) { MemoryLeakDetector mld; mld.Init(); { int i = 33; int c = i * 9; } Assert::IsFalse(mld.DetectLeak()); return; } // Tests to detect no memory leak when correctly cleaning up pointers TEST_METHOD(No_Memleak_For_Cleaned_Up_Pointers) { MemoryLeakDetector mld; mld.Init(); { int* ptr = new int[333]; delete[] ptr; } Assert::IsFalse(mld.DetectLeak()); return; } // Tests to detect a memory leak when not cleaning up pointers TEST_METHOD(Memleak_For_No_Pointer_Cleanup) { MemoryLeakDetector mld; mld.Init(); { int* ptr = new int[333]; } Assert::IsTrue(mld.DetectLeak()); return; } // Tests to detect no memory leak when correctly cleaning up pointers, using C-Methods TEST_METHOD(No_Memleak_For_Cleaned_Up_Pointers_C_Like) { MemoryLeakDetector mld; mld.Init(); { int* ptr = (int*)malloc(sizeof(int) * 333); free(ptr); } Assert::IsFalse(mld.DetectLeak()); return; } // Tests to detect a memory leak when not cleaning up pointers, using C-Methods TEST_METHOD(Memleak_For_No_Pointer_Cleanup_C_Like) { MemoryLeakDetector mld; mld.Init(); { int* ptr = (int*)malloc(sizeof(int) * 333); } Assert::IsTrue(mld.DetectLeak()); return; } #endif }; }