| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/base/list_container.h" | 5 #include "cc/base/list_container.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 10 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 }; | 100 }; |
| 101 | 101 |
| 102 class SimpleDerivedElementConstructMagicNumberTwo | 102 class SimpleDerivedElementConstructMagicNumberTwo |
| 103 : public SimpleDerivedElement { | 103 : public SimpleDerivedElement { |
| 104 public: | 104 public: |
| 105 SimpleDerivedElementConstructMagicNumberTwo() { | 105 SimpleDerivedElementConstructMagicNumberTwo() { |
| 106 set_value(kMagicNumberToUseForSimpleDerivedElementTwo); | 106 set_value(kMagicNumberToUseForSimpleDerivedElementTwo); |
| 107 } | 107 } |
| 108 }; | 108 }; |
| 109 | 109 |
| 110 class SimpleDerivedElementConstructMagicNumberThree |
| 111 : public SimpleDerivedElement { |
| 112 public: |
| 113 SimpleDerivedElementConstructMagicNumberThree() { |
| 114 set_value(kMagicNumberToUseForSimpleDerivedElementThree); |
| 115 } |
| 116 }; |
| 117 |
| 110 class MockDerivedElement : public SimpleDerivedElementConstructMagicNumberOne { | 118 class MockDerivedElement : public SimpleDerivedElementConstructMagicNumberOne { |
| 111 public: | 119 public: |
| 112 ~MockDerivedElement() override { Destruct(); } | 120 ~MockDerivedElement() override { Destruct(); } |
| 113 MOCK_METHOD0(Destruct, void()); | 121 MOCK_METHOD0(Destruct, void()); |
| 114 }; | 122 }; |
| 115 | 123 |
| 116 class MockDerivedElementSubclass : public MockDerivedElement { | 124 class MockDerivedElementSubclass : public MockDerivedElement { |
| 117 public: | 125 public: |
| 118 MockDerivedElementSubclass() { | 126 MockDerivedElementSubclass() { |
| 119 set_value(kMagicNumberToUseForSimpleDerivedElementTwo); | 127 set_value(kMagicNumberToUseForSimpleDerivedElementTwo); |
| (...skipping 754 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 list_1.AppendByMoving(list_2.back()); | 882 list_1.AppendByMoving(list_2.back()); |
| 875 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, | 883 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, |
| 876 list_1.front()->get_value()); | 884 list_1.front()->get_value()); |
| 877 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementThree, | 885 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementThree, |
| 878 list_1.back()->get_value()); | 886 list_1.back()->get_value()); |
| 879 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, | 887 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, |
| 880 list_2.back()->get_value()); | 888 list_2.back()->get_value()); |
| 881 | 889 |
| 882 // AppendByMoving replaces the source element with a new derived element so | 890 // AppendByMoving replaces the source element with a new derived element so |
| 883 // we do not expect sizes to shrink after AppendByMoving is called. | 891 // we do not expect sizes to shrink after AppendByMoving is called. |
| 884 EXPECT_EQ(2u, | 892 EXPECT_EQ(2u, list_1.size()); // One direct allocation, one AppendByMoving. |
| 885 list_1.size()); // One direct allocation and one AppendByMoving. | |
| 886 EXPECT_EQ(1u, list_2.size()); // One AppendByMoving. | 893 EXPECT_EQ(1u, list_2.size()); // One AppendByMoving. |
| 887 } | 894 } |
| 888 | 895 |
| 889 const size_t kLongCountForLongSimpleDerivedElement = 5; | 896 const size_t kLongCountForLongSimpleDerivedElement = 5; |
| 890 | 897 |
| 891 class LongSimpleDerivedElement : public SimpleDerivedElement { | 898 class LongSimpleDerivedElement : public SimpleDerivedElement { |
| 892 public: | 899 public: |
| 893 ~LongSimpleDerivedElement() override {} | 900 ~LongSimpleDerivedElement() override {} |
| 894 void SetAllValues(unsigned long value) { | 901 void SetAllValues(unsigned long value) { |
| 895 for (size_t i = 0; i < kLongCountForLongSimpleDerivedElement; i++) | 902 for (size_t i = 0; i < kLongCountForLongSimpleDerivedElement; i++) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 947 | 954 |
| 948 LongSimpleDerivedElement* long_element = | 955 LongSimpleDerivedElement* long_element = |
| 949 static_cast<LongSimpleDerivedElement*>(list.back()); | 956 static_cast<LongSimpleDerivedElement*>(list.back()); |
| 950 list.AppendByMoving(simple_element); | 957 list.AppendByMoving(simple_element); |
| 951 EXPECT_TRUE(long_element->AreAllValuesEqualTo( | 958 EXPECT_TRUE(long_element->AreAllValuesEqualTo( |
| 952 kMagicNumberToUseForLongSimpleDerivedElement)); | 959 kMagicNumberToUseForLongSimpleDerivedElement)); |
| 953 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, | 960 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, |
| 954 list.back()->get_value()); | 961 list.back()->get_value()); |
| 955 } | 962 } |
| 956 | 963 |
| 964 TEST(ListContainerTest, Swap) { |
| 965 ListContainer<SimpleDerivedElement> list_1(kCurrentLargestDerivedElementSize); |
| 966 list_1.AllocateAndConstruct<SimpleDerivedElementConstructMagicNumberOne>(); |
| 967 ListContainer<SimpleDerivedElement> list_2(kCurrentLargestDerivedElementSize); |
| 968 list_2.AllocateAndConstruct<SimpleDerivedElementConstructMagicNumberTwo>(); |
| 969 list_2.AllocateAndConstruct<SimpleDerivedElementConstructMagicNumberThree>(); |
| 970 |
| 971 SimpleDerivedElement* pre_swap_list_1_front = list_1.front(); |
| 972 |
| 973 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, |
| 974 list_1.front()->get_value()); |
| 975 EXPECT_EQ(1u, list_1.size()); |
| 976 |
| 977 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, |
| 978 list_2.front()->get_value()); |
| 979 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementThree, |
| 980 list_2.back()->get_value()); |
| 981 EXPECT_EQ(2u, list_2.size()); |
| 982 |
| 983 list_2.swap(list_1); |
| 984 |
| 985 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementTwo, |
| 986 list_1.front()->get_value()); |
| 987 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementThree, |
| 988 list_1.back()->get_value()); |
| 989 EXPECT_EQ(2u, list_1.size()); |
| 990 |
| 991 EXPECT_EQ(kMagicNumberToUseForSimpleDerivedElementOne, |
| 992 list_2.front()->get_value()); |
| 993 EXPECT_EQ(1u, list_2.size()); |
| 994 |
| 995 // Ensure pointers are still valid after swapping. |
| 996 EXPECT_EQ(pre_swap_list_1_front, list_2.front()); |
| 997 } |
| 998 |
| 957 } // namespace | 999 } // namespace |
| 958 } // namespace cc | 1000 } // namespace cc |
| OLD | NEW |