Initial work
This commit is contained in:
commit
3222551702
374 changed files with 40290 additions and 0 deletions
140
external/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp
vendored
Normal file
140
external/android-emugl/shared/emugl/common/smart_ptr_unittest.cpp
vendored
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
// Copyright (C) 2014 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "emugl/common/smart_ptr.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
||||
namespace emugl {
|
||||
|
||||
// This Test sub-class is used to track allocations and deallocations of
|
||||
// the MyTestClass instances that are created through newInstance().
|
||||
// See below for typical usage.
|
||||
class SmartPtrTest : public testing::Test {
|
||||
public:
|
||||
SmartPtrTest() : mNewCount(0), mDeleteCount(0), mDoCount(0) {}
|
||||
|
||||
~SmartPtrTest() {
|
||||
mNewCount = 0;
|
||||
mDoCount = 0;
|
||||
mDeleteCount = 0;
|
||||
}
|
||||
|
||||
class MyClass;
|
||||
|
||||
MyClass* newInstance() {
|
||||
return new MyClass(this);
|
||||
}
|
||||
|
||||
class MyClass {
|
||||
public:
|
||||
MyClass(SmartPtrTest* test) : mTest(test) {
|
||||
mTest->mNewCount++;
|
||||
}
|
||||
|
||||
void doStuff() {
|
||||
mTest->mDoCount++;
|
||||
}
|
||||
|
||||
~MyClass() {
|
||||
mTest->mDeleteCount++;
|
||||
}
|
||||
private:
|
||||
SmartPtrTest* mTest;
|
||||
};
|
||||
|
||||
int mNewCount;
|
||||
int mDeleteCount;
|
||||
int mDoCount;
|
||||
};
|
||||
|
||||
|
||||
TEST_F(SmartPtrTest, Empty) {
|
||||
SmartPtr<MyClass> ptr;
|
||||
EXPECT_FALSE(ptr.Ptr());
|
||||
|
||||
EXPECT_EQ(0, mNewCount);
|
||||
EXPECT_EQ(0, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(SmartPtrTest, SingleRef) {
|
||||
MyClass* obj = newInstance();
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
|
||||
{
|
||||
SmartPtr<MyClass> ptr(obj);
|
||||
EXPECT_EQ(obj, ptr.Ptr());
|
||||
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
EXPECT_EQ(0, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
}
|
||||
// Check that the object was deleted.
|
||||
EXPECT_EQ(1, mDeleteCount);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(SmartPtrTest, CopyConstructor) {
|
||||
MyClass* obj = newInstance();
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
|
||||
{
|
||||
SmartPtr<MyClass> ptr1(obj);
|
||||
{
|
||||
SmartPtr<MyClass> ptr2(ptr1);
|
||||
EXPECT_EQ(2, ptr1.getRefCount());
|
||||
EXPECT_EQ(2, ptr2.getRefCount());
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
EXPECT_EQ(0, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
}
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
EXPECT_EQ(0, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
}
|
||||
EXPECT_EQ(1, mNewCount);
|
||||
EXPECT_EQ(1, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(SmartPtrTest, AssignmentOperator) {
|
||||
SmartPtr<MyClass> ptr1(newInstance());
|
||||
SmartPtr<MyClass> ptr2(newInstance());
|
||||
EXPECT_EQ(2, mNewCount);
|
||||
EXPECT_EQ(0, mDeleteCount);
|
||||
EXPECT_EQ(0, mDoCount);
|
||||
|
||||
ptr2 = ptr1;
|
||||
EXPECT_EQ(2, mNewCount);
|
||||
EXPECT_EQ(1, mDeleteCount);
|
||||
|
||||
EXPECT_EQ(ptr1.Ptr(), ptr2.Ptr());
|
||||
EXPECT_EQ(2, ptr1.getRefCount());
|
||||
EXPECT_EQ(2, ptr2.getRefCount());
|
||||
}
|
||||
|
||||
|
||||
TEST_F(SmartPtrTest, ArrowOperator) {
|
||||
SmartPtr<MyClass> ptr(newInstance());
|
||||
ptr->doStuff();
|
||||
EXPECT_EQ(1, mDoCount);
|
||||
|
||||
(*ptr).doStuff();
|
||||
EXPECT_EQ(2, mDoCount);
|
||||
}
|
||||
|
||||
} // namespace emugl
|
||||
Loading…
Add table
Add a link
Reference in a new issue