103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian/*
203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * Copyright (C) 2012 The Android Open Source Project
303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian *
403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * you may not use this file except in compliance with the License.
603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * You may obtain a copy of the License at
703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian *
803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian *
1003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * Unless required by applicable law or agreed to in writing, software
1103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * See the License for the specific language governing permissions and
1403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian * limitations under the License.
1503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian */
1603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
1703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian#define LOG_TAG "Vector_test"
1803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
1903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian#include <utils/Vector.h>
2003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian#include <cutils/log.h>
2103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian#include <gtest/gtest.h>
2203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian#include <unistd.h>
2303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
2403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopiannamespace android {
2503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
2603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopianclass VectorTest : public testing::Test {
2703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopianprotected:
2803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    virtual void SetUp() {
2903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    }
3003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
3103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    virtual void TearDown() {
3203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    }
3303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
3403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopianpublic:
3503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian};
3603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
3703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
3803b168a69bd155be2675d7dffa342a30990259f7Mathias AgopianTEST_F(VectorTest, CopyOnWrite_CopyAndAddElements) {
3903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
4003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    Vector<int> vector;
4103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    Vector<int> other;
4203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    vector.setCapacity(8);
4303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
4403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    vector.add(1);
4503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    vector.add(2);
4603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    vector.add(3);
4703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
4803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(vector.size(), 3);
4903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
5003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // copy the vector
5103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    other = vector;
5203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
5303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(other.size(), 3);
5403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
5503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // add an element to the first vector
5603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    vector.add(4);
5703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
5803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // make sure the sizes are correct
5903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(vector.size(), 4);
6003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(other.size(), 3);
6103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
6203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // add an element to the copy
6303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    other.add(5);
6403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
6503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // make sure the sizes are correct
6603b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(vector.size(), 4);
6703b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(other.size(), 4);
6803b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
6903b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    // make sure the content of both vectors are correct
7003b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(vector[3], 4);
7103b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian    EXPECT_EQ(other[3], 5);
7203b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian}
7303b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
7403b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian
7503b168a69bd155be2675d7dffa342a30990259f7Mathias Agopian} // namespace android
76