OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2016 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 "blimp/common/compositor/reference_tracker.h" | |
6 | |
7 #include <stdint.h> | |
8 #include <algorithm> | |
9 #include <unordered_set> | |
10 #include <vector> | |
11 | |
12 #include "testing/gmock/include/gmock/gmock.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 | |
15 namespace blimp { | |
16 namespace { | |
17 | |
18 class ReferenceTrackerTest : public testing::Test { | |
19 public: | |
20 ReferenceTrackerTest() {} | |
Kevin M
2016/06/21 21:35:04
Add override dtor
nyquist
2016/06/24 11:11:15
Done.
| |
21 | |
22 protected: | |
23 ReferenceTracker tracker_; | |
24 std::vector<uint32_t> added_; | |
25 std::vector<uint32_t> removed_; | |
26 | |
27 private: | |
28 DISALLOW_COPY_AND_ASSIGN(ReferenceTrackerTest); | |
29 }; | |
30 | |
31 TEST_F(ReferenceTrackerTest, SingleItemCommitFlow) { | |
32 tracker_.CommitRefCounts(&added_, &removed_); | |
33 EXPECT_TRUE(added_.empty()); | |
34 EXPECT_TRUE(removed_.empty()); | |
35 | |
36 uint32_t item = 1; | |
37 tracker_.IncrementRefCount(item); | |
38 tracker_.CommitRefCounts(&added_, &removed_); | |
39 EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); | |
40 EXPECT_TRUE(removed_.empty()); | |
41 added_.clear(); | |
42 | |
43 tracker_.CommitRefCounts(&added_, &removed_); | |
44 EXPECT_TRUE(added_.empty()); | |
45 EXPECT_TRUE(removed_.empty()); | |
46 | |
47 tracker_.DecrementRefCount(item); | |
48 tracker_.CommitRefCounts(&added_, &removed_); | |
49 EXPECT_TRUE(added_.empty()); | |
50 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); | |
51 } | |
52 | |
53 TEST_F(ReferenceTrackerTest, SingleItemMultipleTimesInSingleCommit) { | |
54 uint32_t item = 1; | |
55 tracker_.IncrementRefCount(item); | |
56 tracker_.IncrementRefCount(item); | |
57 tracker_.CommitRefCounts(&added_, &removed_); | |
58 EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); | |
59 EXPECT_TRUE(removed_.empty()); | |
60 added_.clear(); | |
61 | |
62 tracker_.CommitRefCounts(&added_, &removed_); | |
63 EXPECT_TRUE(added_.empty()); | |
64 EXPECT_TRUE(removed_.empty()); | |
65 | |
66 tracker_.DecrementRefCount(item); | |
67 tracker_.DecrementRefCount(item); | |
68 tracker_.CommitRefCounts(&added_, &removed_); | |
69 EXPECT_TRUE(added_.empty()); | |
70 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); | |
71 } | |
72 | |
73 TEST_F(ReferenceTrackerTest, SingleItemMultipleTimesAcrossCommits) { | |
74 uint32_t item = 1; | |
75 tracker_.IncrementRefCount(item); | |
76 tracker_.CommitRefCounts(&added_, &removed_); | |
77 EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); | |
78 EXPECT_TRUE(removed_.empty()); | |
79 added_.clear(); | |
80 | |
81 tracker_.IncrementRefCount(item); | |
82 tracker_.CommitRefCounts(&added_, &removed_); | |
83 EXPECT_TRUE(added_.empty()); | |
84 EXPECT_TRUE(removed_.empty()); | |
85 | |
86 tracker_.DecrementRefCount(item); | |
87 tracker_.CommitRefCounts(&added_, &removed_); | |
88 EXPECT_TRUE(added_.empty()); | |
89 EXPECT_TRUE(removed_.empty()); | |
90 | |
91 tracker_.DecrementRefCount(item); | |
92 tracker_.CommitRefCounts(&added_, &removed_); | |
93 EXPECT_TRUE(added_.empty()); | |
94 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); | |
95 } | |
96 | |
97 TEST_F(ReferenceTrackerTest, SingleItemComplexInteractions) { | |
98 uint32_t item = 1; | |
99 tracker_.IncrementRefCount(item); | |
100 tracker_.DecrementRefCount(item); | |
101 tracker_.CommitRefCounts(&added_, &removed_); | |
102 EXPECT_TRUE(added_.empty()); | |
103 EXPECT_TRUE(removed_.empty()); | |
104 | |
105 tracker_.IncrementRefCount(item); | |
106 tracker_.DecrementRefCount(item); | |
107 tracker_.IncrementRefCount(item); | |
108 tracker_.CommitRefCounts(&added_, &removed_); | |
109 EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); | |
110 EXPECT_TRUE(removed_.empty()); | |
111 added_.clear(); | |
112 | |
113 tracker_.DecrementRefCount(item); | |
114 tracker_.IncrementRefCount(item); | |
115 tracker_.DecrementRefCount(item); | |
116 tracker_.CommitRefCounts(&added_, &removed_); | |
117 EXPECT_TRUE(added_.empty()); | |
118 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); | |
119 } | |
120 | |
121 TEST_F(ReferenceTrackerTest, MultipleItems) { | |
122 uint32_t item1 = 1; | |
123 uint32_t item2 = 2; | |
124 uint32_t item3 = 3; | |
125 tracker_.IncrementRefCount(item1); | |
126 tracker_.IncrementRefCount(item2); | |
127 tracker_.IncrementRefCount(item3); | |
128 tracker_.CommitRefCounts(&added_, &removed_); | |
129 EXPECT_THAT(added_, testing::UnorderedElementsAre(item1, item2, item3)); | |
130 EXPECT_EQ(3U, added_.size()); | |
131 EXPECT_TRUE(removed_.empty()); | |
132 added_.clear(); | |
133 | |
134 tracker_.DecrementRefCount(item3); | |
135 tracker_.CommitRefCounts(&added_, &removed_); | |
136 EXPECT_TRUE(added_.empty()); | |
137 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item3)); | |
138 removed_.clear(); | |
139 | |
140 tracker_.DecrementRefCount(item2); | |
141 tracker_.IncrementRefCount(item3); | |
142 tracker_.CommitRefCounts(&added_, &removed_); | |
143 EXPECT_EQ(1U, added_.size()); | |
144 EXPECT_EQ(1U, removed_.size()); | |
145 EXPECT_THAT(added_, testing::UnorderedElementsAre(item3)); | |
146 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item2)); | |
147 added_.clear(); | |
148 removed_.clear(); | |
149 | |
150 tracker_.IncrementRefCount(item2); | |
151 tracker_.CommitRefCounts(&added_, &removed_); | |
152 EXPECT_THAT(added_, testing::UnorderedElementsAre(item2)); | |
153 EXPECT_TRUE(removed_.empty()); | |
154 added_.clear(); | |
155 | |
156 tracker_.DecrementRefCount(item1); | |
157 tracker_.DecrementRefCount(item2); | |
158 tracker_.DecrementRefCount(item3); | |
159 tracker_.CommitRefCounts(&added_, &removed_); | |
160 EXPECT_TRUE(added_.empty()); | |
161 EXPECT_THAT(removed_, testing::UnorderedElementsAre(item1, item2, item3)); | |
162 } | |
163 | |
164 } // namespace | |
165 } // namespace blimp | |
OLD | NEW |