• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "gn/immutable_vector.h"
6 #include "util/test/test.h"
7 
8 #include <set>
9 #include <vector>
10 
TEST(ImmutableVector,CreationDestruction)11 TEST(ImmutableVector, CreationDestruction) {
12   ImmutableVector<int> empty;
13   EXPECT_TRUE(empty.empty());
14   EXPECT_EQ(0u, empty.size());
15 
16   ImmutableVector<int> vec1 = {100, 42};
17   EXPECT_FALSE(vec1.empty());
18   EXPECT_EQ(2u, vec1.size());
19   EXPECT_EQ(100, vec1.front());
20   EXPECT_EQ(42, vec1.back());
21   EXPECT_EQ(100, vec1[0]);
22   EXPECT_EQ(42, vec1[1]);
23   EXPECT_TRUE(vec1.begin());
24   EXPECT_TRUE(vec1.end());
25   EXPECT_NE(vec1.begin(), vec1.end());
26   EXPECT_EQ(vec1.begin() + 2, vec1.end());
27 
28   std::vector<int> input;
29   input.push_back(100);
30   input.push_back(42);
31   input.push_back(-12);
32   ImmutableVector<int> vec2(input);
33   EXPECT_FALSE(vec2.empty());
34   EXPECT_EQ(3u, vec2.size());
35   EXPECT_EQ(100, vec2.front());
36   EXPECT_EQ(100, vec2[0]);
37   EXPECT_EQ(42, vec2[1]);
38   EXPECT_EQ(-12, vec2[2]);
39   EXPECT_NE(vec2.begin(), &input[0]);
40   EXPECT_NE(vec2.end(), &input[0] + 3);
41 }
42 
TEST(ImmutableVetor,InPlaceConstruction)43 TEST(ImmutableVetor, InPlaceConstruction) {
44   size_t count = 0;
45   auto count_producer = [&count]() { return count++; };
46   ImmutableVector<int> vec(count_producer, 5u);
47   EXPECT_EQ(5u, vec.size());
48   EXPECT_EQ(0, vec[0]);
49   EXPECT_EQ(1, vec[1]);
50   EXPECT_EQ(2, vec[2]);
51   EXPECT_EQ(3, vec[3]);
52   EXPECT_EQ(4, vec[4]);
53 }
54 
TEST(ImmutableVector,CopyAndMoveOperations)55 TEST(ImmutableVector, CopyAndMoveOperations) {
56   ImmutableVector<int> vec1 = {1, 2, 3, 4};
57   ImmutableVector<int> vec2 = vec1;
58   ImmutableVector<int> vec3 = std::move(vec1);
59 
60   EXPECT_TRUE(vec1.empty());
61   EXPECT_EQ(4u, vec2.size());
62   EXPECT_EQ(4u, vec3.size());
63   EXPECT_NE(vec2.begin(), vec3.begin());
64   EXPECT_NE(vec2.end(), vec3.end());
65   EXPECT_TRUE(std::equal(vec2.begin(), vec2.end(), vec3.begin(), vec3.end()));
66 }
67 
TEST(ImmutableVectorView,Creation)68 TEST(ImmutableVectorView, Creation) {
69   ImmutableVector<int> vec1 = {1, 3, 5, 7};
70   ImmutableVectorView<int> view1 = vec1;
71   ImmutableVectorView<int> view2(view1);
72 
73   EXPECT_EQ(vec1.size(), view1.size());
74   EXPECT_EQ(vec1.size(), view2.size());
75 
76   EXPECT_EQ(vec1.begin(), view1.begin());
77   EXPECT_EQ(vec1.end(), view1.end());
78 
79   EXPECT_EQ(vec1.begin(), view2.begin());
80   EXPECT_EQ(vec1.end(), view2.end());
81 }
82