1a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian/*
2a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * Copyright (C) 2012 The Android Open Source Project
3a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian *
4a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * you may not use this file except in compliance with the License.
6a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * You may obtain a copy of the License at
7a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian *
8a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian *
10a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * Unless required by applicable law or agreed to in writing, software
11a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * See the License for the specific language governing permissions and
14a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian * limitations under the License.
15a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian */
16a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
17a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian#define LOG_TAG "Vector_test"
18a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
19a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian#include <utils/Vector.h>
20a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian#include <cutils/log.h>
21a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian#include <gtest/gtest.h>
22a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian#include <unistd.h>
23a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
24a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopiannamespace android {
25a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
26a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopianclass VectorTest : public testing::Test {
27a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopianprotected:
28a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    virtual void SetUp() {
29a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    }
30a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
31a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    virtual void TearDown() {
32a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    }
33a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
34a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopianpublic:
35a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian};
36a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
37a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
38a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias AgopianTEST_F(VectorTest, CopyOnWrite_CopyAndAddElements) {
39a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
40a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    Vector<int> vector;
41a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    Vector<int> other;
42a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    vector.setCapacity(8);
43a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
44a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    vector.add(1);
45a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    vector.add(2);
46a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    vector.add(3);
47a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
48a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(vector.size(), 3);
49a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
50a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // copy the vector
51a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    other = vector;
52a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
53a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(other.size(), 3);
54a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
55a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // add an element to the first vector
56a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    vector.add(4);
57a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
58a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // make sure the sizes are correct
59a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(vector.size(), 4);
60a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(other.size(), 3);
61a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
62a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // add an element to the copy
63a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    other.add(5);
64a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
65a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // make sure the sizes are correct
66a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(vector.size(), 4);
67a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(other.size(), 4);
68a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
69a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    // make sure the content of both vectors are correct
70a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(vector[3], 4);
71a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian    EXPECT_EQ(other[3], 5);
72a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian}
73a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
74a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian
75a9611c5d5b61c594b9f5f24b24a665dc1e647f81Mathias Agopian} // namespace android
76