aseprite/src/base/unique_ptr_unittest.cpp

92 lines
1.5 KiB
C++

// ASEPRITE base library
// Copyright (C) 2001-2012 David Capello
//
// This source file is ditributed under a BSD-like license, please
// read LICENSE.txt for more information.
#include <gtest/gtest.h>
#include "base/unique_ptr.h"
TEST(UniquePtr, DefaultCtor)
{
UniquePtr<int> a;
EXPECT_TRUE(NULL == a.get());
a.reset(new int(2));
ASSERT_TRUE(NULL != a.get());
EXPECT_TRUE(2 == *a);
a.reset();
EXPECT_TRUE(NULL == a.get());
}
TEST(UniquePtr, IntPtr)
{
UniquePtr<int> a(new int(5));
EXPECT_EQ(5, *a);
}
TEST(UniquePtr, CopyValues)
{
UniquePtr<int> a(new int(3));
UniquePtr<int> b(new int(4));
EXPECT_EQ(3, *a);
EXPECT_EQ(4, *b);
*a = *b;
EXPECT_EQ(4, *a);
EXPECT_EQ(4, *b);
}
int valueInDtor;
class A
{
int m_value;
public:
A(int value) : m_value(value) { }
~A() { valueInDtor = m_value; }
};
TEST(UniquePtr, PtrToStruct)
{
valueInDtor = 0;
{
UniquePtr<A> a(new A(100));
{
UniquePtr<A> b(new A(200));
{
UniquePtr<A> c(new A(300));
EXPECT_EQ(0, valueInDtor);
c.reset();
EXPECT_EQ(300, valueInDtor);
c.reset(new A(400));
}
EXPECT_EQ(400, valueInDtor);
}
EXPECT_EQ(200, valueInDtor);
}
EXPECT_EQ(100, valueInDtor);
}
TEST(UniquePtr, Release)
{
UniquePtr<int> a(new int(5));
EXPECT_EQ(5, *a);
int* ptr = a.release();
delete ptr;
}
int main(int argc, char** argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}