| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 }; | 129 }; |
| 130 | 130 |
| 131 typedef WTF::Vector<OwnPtr<DestructCounter> > OwnPtrVector; | 131 typedef WTF::Vector<OwnPtr<DestructCounter> > OwnPtrVector; |
| 132 | 132 |
| 133 TEST(WTF_Vector, OwnPtr) | 133 TEST(WTF_Vector, OwnPtr) |
| 134 { | 134 { |
| 135 int destructNumber = 0; | 135 int destructNumber = 0; |
| 136 OwnPtrVector vector; | 136 OwnPtrVector vector; |
| 137 vector.append(adoptPtr(new DestructCounter(0, &destructNumber))); | 137 vector.append(adoptPtr(new DestructCounter(0, &destructNumber))); |
| 138 vector.append(adoptPtr(new DestructCounter(1, &destructNumber))); | 138 vector.append(adoptPtr(new DestructCounter(1, &destructNumber))); |
| 139 ASSERT_EQ(2u, vector.size()); | 139 EXPECT_EQ(2u, vector.size()); |
| 140 | 140 |
| 141 OwnPtr<DestructCounter>& counter0 = vector.first(); | 141 OwnPtr<DestructCounter>& counter0 = vector.first(); |
| 142 ASSERT_EQ(0, counter0->get()); | 142 ASSERT_EQ(0, counter0->get()); |
| 143 int counter1 = vector.last()->get(); | 143 int counter1 = vector.last()->get(); |
| 144 ASSERT_EQ(1, counter1); | 144 ASSERT_EQ(1, counter1); |
| 145 ASSERT_EQ(0, destructNumber); | 145 ASSERT_EQ(0, destructNumber); |
| 146 | 146 |
| 147 size_t index = 0; | 147 size_t index = 0; |
| 148 for (OwnPtrVector::iterator iter = vector.begin(); iter != vector.end(); ++i
ter) { | 148 for (OwnPtrVector::iterator iter = vector.begin(); iter != vector.end(); ++i
ter) { |
| 149 OwnPtr<DestructCounter>* refCounter = iter; | 149 OwnPtr<DestructCounter>* refCounter = iter; |
| 150 ASSERT_EQ(index, static_cast<size_t>(refCounter->get()->get())); | 150 EXPECT_EQ(index, static_cast<size_t>(refCounter->get()->get())); |
| 151 ASSERT_EQ(index, static_cast<size_t>((*refCounter)->get())); | 151 EXPECT_EQ(index, static_cast<size_t>((*refCounter)->get())); |
| 152 index++; | 152 index++; |
| 153 } | 153 } |
| 154 ASSERT_EQ(0, destructNumber); | 154 EXPECT_EQ(0, destructNumber); |
| 155 | 155 |
| 156 for (index = 0; index < vector.size(); index++) { | 156 for (index = 0; index < vector.size(); index++) { |
| 157 OwnPtr<DestructCounter>& refCounter = vector[index]; | 157 OwnPtr<DestructCounter>& refCounter = vector[index]; |
| 158 ASSERT_EQ(index, static_cast<size_t>(refCounter->get())); | 158 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); |
| 159 index++; | 159 index++; |
| 160 } | 160 } |
| 161 ASSERT_EQ(0, destructNumber); | 161 EXPECT_EQ(0, destructNumber); |
| 162 | 162 |
| 163 ASSERT_EQ(0, vector[0]->get()); | 163 EXPECT_EQ(0, vector[0]->get()); |
| 164 ASSERT_EQ(1, vector[1]->get()); | 164 EXPECT_EQ(1, vector[1]->get()); |
| 165 vector.remove(0); | 165 vector.remove(0); |
| 166 ASSERT_EQ(1, vector[0]->get()); | 166 EXPECT_EQ(1, vector[0]->get()); |
| 167 ASSERT_EQ(1u, vector.size()); | 167 EXPECT_EQ(1u, vector.size()); |
| 168 ASSERT_EQ(1, destructNumber); | 168 EXPECT_EQ(1, destructNumber); |
| 169 | 169 |
| 170 OwnPtr<DestructCounter> ownCounter1 = vector[0].release(); | 170 OwnPtr<DestructCounter> ownCounter1 = vector[0].release(); |
| 171 vector.remove(0); | 171 vector.remove(0); |
| 172 ASSERT_EQ(counter1, ownCounter1->get()); | 172 ASSERT_EQ(counter1, ownCounter1->get()); |
| 173 ASSERT_EQ(0u, vector.size()); | 173 ASSERT_EQ(0u, vector.size()); |
| 174 ASSERT_EQ(1, destructNumber); | 174 ASSERT_EQ(1, destructNumber); |
| 175 | 175 |
| 176 ownCounter1.clear(); | 176 ownCounter1.clear(); |
| 177 ASSERT_EQ(2, destructNumber); | 177 EXPECT_EQ(2, destructNumber); |
| 178 | 178 |
| 179 size_t count = 1025; | 179 size_t count = 1025; |
| 180 destructNumber = 0; | 180 destructNumber = 0; |
| 181 for (size_t i = 0; i < count; i++) | 181 for (size_t i = 0; i < count; i++) |
| 182 vector.prepend(adoptPtr(new DestructCounter(i, &destructNumber))); | 182 vector.prepend(adoptPtr(new DestructCounter(i, &destructNumber))); |
| 183 | 183 |
| 184 // Vector relocation must not destruct OwnPtr element. | 184 // Vector relocation must not destruct OwnPtr element. |
| 185 ASSERT_EQ(0, destructNumber); | 185 EXPECT_EQ(0, destructNumber); |
| 186 ASSERT_EQ(count, vector.size()); | 186 EXPECT_EQ(count, vector.size()); |
| 187 | 187 |
| 188 OwnPtrVector copyVector; | 188 OwnPtrVector copyVector; |
| 189 vector.swap(copyVector); | 189 vector.swap(copyVector); |
| 190 ASSERT_EQ(0, destructNumber); | 190 EXPECT_EQ(0, destructNumber); |
| 191 ASSERT_EQ(count, copyVector.size()); | 191 EXPECT_EQ(count, copyVector.size()); |
| 192 ASSERT_EQ(0u, vector.size()); | 192 EXPECT_EQ(0u, vector.size()); |
| 193 | 193 |
| 194 copyVector.clear(); | 194 copyVector.clear(); |
| 195 ASSERT_EQ(count, static_cast<size_t>(destructNumber)); | 195 EXPECT_EQ(count, static_cast<size_t>(destructNumber)); |
| 196 } | 196 } |
| 197 | 197 |
| 198 // WrappedInt class will fail if it was memmoved or memcpyed. | 198 // WrappedInt class will fail if it was memmoved or memcpyed. |
| 199 static HashSet<void*> constructedWrappedInts; | 199 static HashSet<void*> constructedWrappedInts; |
| 200 class WrappedInt { | 200 class WrappedInt { |
| 201 public: | 201 public: |
| 202 WrappedInt(int i = 0) | 202 WrappedInt(int i = 0) |
| 203 : m_originalThisPtr(this) | 203 : m_originalThisPtr(this) |
| 204 , m_i(i) | 204 , m_i(i) |
| 205 { | 205 { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 234 }; | 234 }; |
| 235 | 235 |
| 236 TEST(WTF_Vector, SwapWithInlineCapacity) | 236 TEST(WTF_Vector, SwapWithInlineCapacity) |
| 237 { | 237 { |
| 238 const size_t inlineCapacity = 2; | 238 const size_t inlineCapacity = 2; |
| 239 Vector<WrappedInt, inlineCapacity> vectorA; | 239 Vector<WrappedInt, inlineCapacity> vectorA; |
| 240 vectorA.append(WrappedInt(1)); | 240 vectorA.append(WrappedInt(1)); |
| 241 Vector<WrappedInt, inlineCapacity> vectorB; | 241 Vector<WrappedInt, inlineCapacity> vectorB; |
| 242 vectorB.append(WrappedInt(2)); | 242 vectorB.append(WrappedInt(2)); |
| 243 | 243 |
| 244 ASSERT_EQ(vectorA.size(), vectorB.size()); | 244 EXPECT_EQ(vectorA.size(), vectorB.size()); |
| 245 vectorA.swap(vectorB); | 245 vectorA.swap(vectorB); |
| 246 | 246 |
| 247 ASSERT_EQ(1u, vectorA.size()); | 247 EXPECT_EQ(1u, vectorA.size()); |
| 248 EXPECT_EQ(2, vectorA.at(0).get()); | 248 EXPECT_EQ(2, vectorA.at(0).get()); |
| 249 ASSERT_EQ(1u, vectorB.size()); | 249 EXPECT_EQ(1u, vectorB.size()); |
| 250 EXPECT_EQ(1, vectorB.at(0).get()); | 250 EXPECT_EQ(1, vectorB.at(0).get()); |
| 251 | 251 |
| 252 vectorA.append(WrappedInt(3)); | 252 vectorA.append(WrappedInt(3)); |
| 253 | 253 |
| 254 ASSERT_GT(vectorA.size(), vectorB.size()); | 254 EXPECT_GT(vectorA.size(), vectorB.size()); |
| 255 vectorA.swap(vectorB); | 255 vectorA.swap(vectorB); |
| 256 | 256 |
| 257 ASSERT_EQ(1u, vectorA.size()); | 257 EXPECT_EQ(1u, vectorA.size()); |
| 258 EXPECT_EQ(1, vectorA.at(0).get()); | 258 EXPECT_EQ(1, vectorA.at(0).get()); |
| 259 ASSERT_EQ(2u, vectorB.size()); | 259 EXPECT_EQ(2u, vectorB.size()); |
| 260 EXPECT_EQ(2, vectorB.at(0).get()); | 260 EXPECT_EQ(2, vectorB.at(0).get()); |
| 261 EXPECT_EQ(3, vectorB.at(1).get()); | 261 EXPECT_EQ(3, vectorB.at(1).get()); |
| 262 | 262 |
| 263 ASSERT_LT(vectorA.size(), vectorB.size()); | 263 EXPECT_LT(vectorA.size(), vectorB.size()); |
| 264 vectorA.swap(vectorB); | 264 vectorA.swap(vectorB); |
| 265 | 265 |
| 266 ASSERT_EQ(2u, vectorA.size()); | 266 EXPECT_EQ(2u, vectorA.size()); |
| 267 EXPECT_EQ(2, vectorA.at(0).get()); | 267 EXPECT_EQ(2, vectorA.at(0).get()); |
| 268 EXPECT_EQ(3, vectorA.at(1).get()); | 268 EXPECT_EQ(3, vectorA.at(1).get()); |
| 269 ASSERT_EQ(1u, vectorB.size()); | 269 EXPECT_EQ(1u, vectorB.size()); |
| 270 EXPECT_EQ(1, vectorB.at(0).get()); | 270 EXPECT_EQ(1, vectorB.at(0).get()); |
| 271 | 271 |
| 272 vectorA.append(WrappedInt(4)); | 272 vectorA.append(WrappedInt(4)); |
| 273 ASSERT_GT(vectorA.size(), inlineCapacity); | 273 EXPECT_GT(vectorA.size(), inlineCapacity); |
| 274 vectorA.swap(vectorB); | 274 vectorA.swap(vectorB); |
| 275 | 275 |
| 276 ASSERT_EQ(1u, vectorA.size()); | 276 EXPECT_EQ(1u, vectorA.size()); |
| 277 EXPECT_EQ(1, vectorA.at(0).get()); | 277 EXPECT_EQ(1, vectorA.at(0).get()); |
| 278 ASSERT_EQ(3u, vectorB.size()); | 278 EXPECT_EQ(3u, vectorB.size()); |
| 279 EXPECT_EQ(2, vectorB.at(0).get()); | 279 EXPECT_EQ(2, vectorB.at(0).get()); |
| 280 EXPECT_EQ(3, vectorB.at(1).get()); | 280 EXPECT_EQ(3, vectorB.at(1).get()); |
| 281 EXPECT_EQ(4, vectorB.at(2).get()); | 281 EXPECT_EQ(4, vectorB.at(2).get()); |
| 282 | 282 |
| 283 vectorB.swap(vectorA); | 283 vectorB.swap(vectorA); |
| 284 } | 284 } |
| 285 | 285 |
| 286 } // namespace | 286 } // namespace |
| OLD | NEW |