Chromium Code Reviews| Index: blimp/common/compositor/reference_tracker_unittest.cc |
| diff --git a/blimp/common/compositor/reference_tracker_unittest.cc b/blimp/common/compositor/reference_tracker_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..61456afc556f829de84bbc604d8a1f0511f29846 |
| --- /dev/null |
| +++ b/blimp/common/compositor/reference_tracker_unittest.cc |
| @@ -0,0 +1,165 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "blimp/common/compositor/reference_tracker.h" |
| + |
| +#include <stdint.h> |
| +#include <algorithm> |
| +#include <unordered_set> |
| +#include <vector> |
| + |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace blimp { |
| +namespace { |
| + |
| +class ReferenceTrackerTest : public testing::Test { |
| + public: |
| + ReferenceTrackerTest() {} |
| + |
| + protected: |
| + ReferenceTracker tracker_; |
| + std::vector<uint32_t> added_; |
| + std::vector<uint32_t> removed_; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(ReferenceTrackerTest); |
| +}; |
| + |
| +TEST_F(ReferenceTrackerTest, SingleItemCommitFlow) { |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + uint32_t item = 1; |
| + tracker_.IncrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); |
| +} |
| + |
| +TEST_F(ReferenceTrackerTest, SingleItemMultipleTimesInSingleCommit) { |
| + uint32_t item = 1; |
| + tracker_.IncrementRefCount(item); |
| + tracker_.IncrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + tracker_.DecrementRefCount(item); |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); |
| +} |
| + |
| +TEST_F(ReferenceTrackerTest, SingleItemMultipleTimesAcrossCommits) { |
| + uint32_t item = 1; |
| + tracker_.IncrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.IncrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); |
| +} |
| + |
| +TEST_F(ReferenceTrackerTest, SingleItemComplexInteractions) { |
| + uint32_t item = 1; |
| + tracker_.IncrementRefCount(item); |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_TRUE(removed_.empty()); |
| + |
| + tracker_.IncrementRefCount(item); |
| + tracker_.DecrementRefCount(item); |
| + tracker_.IncrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item)); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.DecrementRefCount(item); |
| + tracker_.IncrementRefCount(item); |
| + tracker_.DecrementRefCount(item); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item)); |
| +} |
| + |
| +TEST_F(ReferenceTrackerTest, MultipleItems) { |
| + uint32_t item1 = 1; |
| + uint32_t item2 = 2; |
| + uint32_t item3 = 3; |
| + tracker_.IncrementRefCount(item1); |
| + tracker_.IncrementRefCount(item2); |
| + tracker_.IncrementRefCount(item3); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item1, item2, item3)); |
| + EXPECT_EQ(3U, added_.size()); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.DecrementRefCount(item3); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item3)); |
| + removed_.clear(); |
| + |
| + tracker_.DecrementRefCount(item2); |
| + tracker_.IncrementRefCount(item3); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_EQ(1U, added_.size()); |
| + EXPECT_EQ(1U, removed_.size()); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item3)); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item2)); |
| + added_.clear(); |
| + removed_.clear(); |
| + |
| + tracker_.IncrementRefCount(item2); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_THAT(added_, testing::UnorderedElementsAre(item2)); |
| + EXPECT_TRUE(removed_.empty()); |
| + added_.clear(); |
| + |
| + tracker_.DecrementRefCount(item1); |
| + tracker_.DecrementRefCount(item2); |
| + tracker_.DecrementRefCount(item3); |
| + tracker_.CommitRefCounts(&added_, &removed_); |
| + EXPECT_TRUE(added_.empty()); |
| + EXPECT_THAT(removed_, testing::UnorderedElementsAre(item1, item2, item3)); |
| +} |
| + |
| +} // namespace |
|
Kevin M
2016/06/11 00:29:32
nice tests
nyquist
2016/06/14 01:37:57
Well, thank you sir!
|
| +} // namespace blimp |