| 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 17 matching lines...) Expand all Loading... |
| 28 | 28 |
| 29 #include "wtf/HashSet.h" | 29 #include "wtf/HashSet.h" |
| 30 #include "wtf/OwnPtr.h" | 30 #include "wtf/OwnPtr.h" |
| 31 #include "wtf/PassOwnPtr.h" | 31 #include "wtf/PassOwnPtr.h" |
| 32 #include <gtest/gtest.h> | 32 #include <gtest/gtest.h> |
| 33 | 33 |
| 34 namespace WTF { | 34 namespace WTF { |
| 35 | 35 |
| 36 namespace { | 36 namespace { |
| 37 | 37 |
| 38 TEST(DequeTest, Basic) | 38 TEST(DequeTest, Basic) { |
| 39 { | 39 Deque<int> intDeque; |
| 40 Deque<int> intDeque; | 40 EXPECT_TRUE(intDeque.isEmpty()); |
| 41 EXPECT_TRUE(intDeque.isEmpty()); | 41 EXPECT_EQ(0ul, intDeque.size()); |
| 42 EXPECT_EQ(0ul, intDeque.size()); | 42 } |
| 43 } | 43 |
| 44 | 44 void checkNumberSequence(Deque<int>& deque, int from, int to, bool increment) { |
| 45 void checkNumberSequence(Deque<int>& deque, int from, int to, bool increment) | 45 Deque<int>::iterator it = increment ? deque.begin() : deque.end(); |
| 46 { | 46 size_t index = increment ? 0 : deque.size(); |
| 47 Deque<int>::iterator it = increment ? deque.begin() : deque.end(); | 47 int step = from < to ? 1 : -1; |
| 48 size_t index = increment ? 0 : deque.size(); | 48 for (int i = from; i != to + step; i += step) { |
| 49 int step = from < to ? 1 : -1; | 49 if (!increment) { |
| 50 for (int i = from; i != to + step; i += step) { | 50 --it; |
| 51 if (!increment) { | 51 --index; |
| 52 --it; | 52 } |
| 53 --index; | 53 |
| 54 } | 54 EXPECT_EQ(i, *it); |
| 55 | 55 EXPECT_EQ(i, deque[index]); |
| 56 EXPECT_EQ(i, *it); | 56 |
| 57 EXPECT_EQ(i, deque[index]); | 57 if (increment) { |
| 58 | 58 ++it; |
| 59 if (increment) { | 59 ++index; |
| 60 ++it; | 60 } |
| 61 ++index; | 61 } |
| 62 } | 62 EXPECT_EQ(increment ? deque.end() : deque.begin(), it); |
| 63 } | 63 EXPECT_EQ(increment ? deque.size() : 0, index); |
| 64 EXPECT_EQ(increment ? deque.end() : deque.begin(), it); | 64 } |
| 65 EXPECT_EQ(increment ? deque.size() : 0, index); | 65 |
| 66 } | 66 void checkNumberSequenceReverse(Deque<int>& deque, int from, int to, bool increm
ent) { |
| 67 | 67 Deque<int>::reverse_iterator it = increment ? deque.rbegin() : deque.rend(); |
| 68 void checkNumberSequenceReverse(Deque<int>& deque, int from, int to, bool increm
ent) | 68 size_t index = increment ? 0 : deque.size(); |
| 69 { | 69 int step = from < to ? 1 : -1; |
| 70 Deque<int>::reverse_iterator it = increment ? deque.rbegin() : deque.rend(); | 70 for (int i = from; i != to + step; i += step) { |
| 71 size_t index = increment ? 0 : deque.size(); | 71 if (!increment) { |
| 72 int step = from < to ? 1 : -1; | 72 --it; |
| 73 for (int i = from; i != to + step; i += step) { | 73 --index; |
| 74 if (!increment) { | 74 } |
| 75 --it; | 75 |
| 76 --index; | 76 EXPECT_EQ(i, *it); |
| 77 } | 77 EXPECT_EQ(i, deque.at(deque.size() - 1 - index)); |
| 78 | 78 |
| 79 EXPECT_EQ(i, *it); | 79 if (increment) { |
| 80 EXPECT_EQ(i, deque.at(deque.size() - 1 - index)); | 80 ++it; |
| 81 | 81 ++index; |
| 82 if (increment) { | 82 } |
| 83 ++it; | 83 } |
| 84 ++index; | 84 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it); |
| 85 } | 85 EXPECT_EQ(increment ? deque.size() : 0, index); |
| 86 } | 86 } |
| 87 EXPECT_EQ(increment ? deque.rend() : deque.rbegin(), it); | 87 |
| 88 EXPECT_EQ(increment ? deque.size() : 0, index); | 88 TEST(DequeTest, Reverse) { |
| 89 } | 89 Deque<int> intDeque; |
| 90 | 90 intDeque.append(10); |
| 91 TEST(DequeTest, Reverse) | 91 intDeque.append(11); |
| 92 { | 92 intDeque.append(12); |
| 93 Deque<int> intDeque; | 93 intDeque.append(13); |
| 94 intDeque.append(10); | 94 |
| 95 intDeque.append(11); | 95 checkNumberSequence(intDeque, 10, 13, true); |
| 96 intDeque.append(12); | 96 checkNumberSequence(intDeque, 13, 10, false); |
| 97 intDeque.append(13); | 97 checkNumberSequenceReverse(intDeque, 13, 10, true); |
| 98 | 98 checkNumberSequenceReverse(intDeque, 10, 13, false); |
| 99 checkNumberSequence(intDeque, 10, 13, true); | 99 |
| 100 checkNumberSequence(intDeque, 13, 10, false); | 100 intDeque.append(14); |
| 101 checkNumberSequenceReverse(intDeque, 13, 10, true); | 101 intDeque.append(15); |
| 102 checkNumberSequenceReverse(intDeque, 10, 13, false); | 102 EXPECT_EQ(10, intDeque.takeFirst()); |
| 103 | 103 EXPECT_EQ(15, intDeque.takeLast()); |
| 104 intDeque.append(14); | 104 checkNumberSequence(intDeque, 11, 14, true); |
| 105 intDeque.append(15); | 105 checkNumberSequence(intDeque, 14, 11, false); |
| 106 EXPECT_EQ(10, intDeque.takeFirst()); | 106 checkNumberSequenceReverse(intDeque, 14, 11, true); |
| 107 EXPECT_EQ(15, intDeque.takeLast()); | 107 checkNumberSequenceReverse(intDeque, 11, 14, false); |
| 108 checkNumberSequence(intDeque, 11, 14, true); | 108 |
| 109 checkNumberSequence(intDeque, 14, 11, false); | 109 for (int i = 15; i < 200; ++i) |
| 110 checkNumberSequenceReverse(intDeque, 14, 11, true); | 110 intDeque.append(i); |
| 111 checkNumberSequenceReverse(intDeque, 11, 14, false); | 111 checkNumberSequence(intDeque, 11, 199, true); |
| 112 | 112 checkNumberSequence(intDeque, 199, 11, false); |
| 113 for (int i = 15; i < 200; ++i) | 113 checkNumberSequenceReverse(intDeque, 199, 11, true); |
| 114 intDeque.append(i); | 114 checkNumberSequenceReverse(intDeque, 11, 199, false); |
| 115 checkNumberSequence(intDeque, 11, 199, true); | 115 |
| 116 checkNumberSequence(intDeque, 199, 11, false); | 116 for (int i = 0; i < 180; ++i) { |
| 117 checkNumberSequenceReverse(intDeque, 199, 11, true); | 117 EXPECT_EQ(i + 11, intDeque[0]); |
| 118 checkNumberSequenceReverse(intDeque, 11, 199, false); | 118 EXPECT_EQ(i + 11, intDeque.takeFirst()); |
| 119 | 119 } |
| 120 for (int i = 0; i < 180; ++i) { | 120 checkNumberSequence(intDeque, 191, 199, true); |
| 121 EXPECT_EQ(i + 11, intDeque[0]); | 121 checkNumberSequence(intDeque, 199, 191, false); |
| 122 EXPECT_EQ(i + 11, intDeque.takeFirst()); | 122 checkNumberSequenceReverse(intDeque, 199, 191, true); |
| 123 } | 123 checkNumberSequenceReverse(intDeque, 191, 199, false); |
| 124 checkNumberSequence(intDeque, 191, 199, true); | 124 |
| 125 checkNumberSequence(intDeque, 199, 191, false); | 125 Deque<int> intDeque2; |
| 126 checkNumberSequenceReverse(intDeque, 199, 191, true); | 126 swap(intDeque, intDeque2); |
| 127 checkNumberSequenceReverse(intDeque, 191, 199, false); | 127 |
| 128 | 128 checkNumberSequence(intDeque2, 191, 199, true); |
| 129 Deque<int> intDeque2; | 129 checkNumberSequence(intDeque2, 199, 191, false); |
| 130 swap(intDeque, intDeque2); | 130 checkNumberSequenceReverse(intDeque2, 199, 191, true); |
| 131 | 131 checkNumberSequenceReverse(intDeque2, 191, 199, false); |
| 132 checkNumberSequence(intDeque2, 191, 199, true); | 132 |
| 133 checkNumberSequence(intDeque2, 199, 191, false); | 133 intDeque.swap(intDeque2); |
| 134 checkNumberSequenceReverse(intDeque2, 199, 191, true); | 134 |
| 135 checkNumberSequenceReverse(intDeque2, 191, 199, false); | 135 checkNumberSequence(intDeque, 191, 199, true); |
| 136 | 136 checkNumberSequence(intDeque, 199, 191, false); |
| 137 intDeque.swap(intDeque2); | 137 checkNumberSequenceReverse(intDeque, 199, 191, true); |
| 138 | 138 checkNumberSequenceReverse(intDeque, 191, 199, false); |
| 139 checkNumberSequence(intDeque, 191, 199, true); | 139 |
| 140 checkNumberSequence(intDeque, 199, 191, false); | 140 intDeque.swap(intDeque2); |
| 141 checkNumberSequenceReverse(intDeque, 199, 191, true); | 141 |
| 142 checkNumberSequenceReverse(intDeque, 191, 199, false); | 142 checkNumberSequence(intDeque2, 191, 199, true); |
| 143 | 143 checkNumberSequence(intDeque2, 199, 191, false); |
| 144 intDeque.swap(intDeque2); | 144 checkNumberSequenceReverse(intDeque2, 199, 191, true); |
| 145 | 145 checkNumberSequenceReverse(intDeque2, 191, 199, false); |
| 146 checkNumberSequence(intDeque2, 191, 199, true); | |
| 147 checkNumberSequence(intDeque2, 199, 191, false); | |
| 148 checkNumberSequenceReverse(intDeque2, 199, 191, true); | |
| 149 checkNumberSequenceReverse(intDeque2, 191, 199, false); | |
| 150 } | 146 } |
| 151 | 147 |
| 152 class DestructCounter { | 148 class DestructCounter { |
| 153 public: | 149 public: |
| 154 explicit DestructCounter(int i, int* destructNumber) | 150 explicit DestructCounter(int i, int* destructNumber) |
| 155 : m_i(i) | 151 : m_i(i), m_destructNumber(destructNumber) {} |
| 156 , m_destructNumber(destructNumber) | 152 |
| 157 { } | 153 ~DestructCounter() { ++(*m_destructNumber); } |
| 158 | 154 int get() const { return m_i; } |
| 159 ~DestructCounter() { ++(*m_destructNumber); } | 155 |
| 160 int get() const { return m_i; } | 156 private: |
| 161 | 157 int m_i; |
| 162 private: | 158 int* m_destructNumber; |
| 163 int m_i; | |
| 164 int* m_destructNumber; | |
| 165 }; | 159 }; |
| 166 | 160 |
| 167 using OwnPtrDeque = Deque<OwnPtr<DestructCounter>>; | 161 using OwnPtrDeque = Deque<OwnPtr<DestructCounter>>; |
| 168 | 162 |
| 169 TEST(DequeTest, OwnPtr) | 163 TEST(DequeTest, OwnPtr) { |
| 170 { | 164 int destructNumber = 0; |
| 171 int destructNumber = 0; | 165 OwnPtrDeque deque; |
| 172 OwnPtrDeque deque; | 166 deque.append(adoptPtr(new DestructCounter(0, &destructNumber))); |
| 173 deque.append(adoptPtr(new DestructCounter(0, &destructNumber))); | 167 deque.append(adoptPtr(new DestructCounter(1, &destructNumber))); |
| 174 deque.append(adoptPtr(new DestructCounter(1, &destructNumber))); | 168 EXPECT_EQ(2u, deque.size()); |
| 175 EXPECT_EQ(2u, deque.size()); | 169 |
| 176 | 170 OwnPtr<DestructCounter>& counter0 = deque.first(); |
| 177 OwnPtr<DestructCounter>& counter0 = deque.first(); | 171 EXPECT_EQ(0, counter0->get()); |
| 178 EXPECT_EQ(0, counter0->get()); | 172 int counter1 = deque.last()->get(); |
| 179 int counter1 = deque.last()->get(); | 173 EXPECT_EQ(1, counter1); |
| 180 EXPECT_EQ(1, counter1); | 174 EXPECT_EQ(0, destructNumber); |
| 181 EXPECT_EQ(0, destructNumber); | 175 |
| 182 | 176 size_t index = 0; |
| 183 size_t index = 0; | 177 for (OwnPtrDeque::iterator iter = deque.begin(); iter != deque.end(); ++iter)
{ |
| 184 for (OwnPtrDeque::iterator iter = deque.begin(); iter != deque.end(); ++iter
) { | 178 OwnPtr<DestructCounter>& refCounter = *iter; |
| 185 OwnPtr<DestructCounter>& refCounter = *iter; | 179 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); |
| 186 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); | 180 EXPECT_EQ(index, static_cast<size_t>((*refCounter).get())); |
| 187 EXPECT_EQ(index, static_cast<size_t>((*refCounter).get())); | 181 index++; |
| 188 index++; | 182 } |
| 189 } | 183 EXPECT_EQ(0, destructNumber); |
| 190 EXPECT_EQ(0, destructNumber); | 184 |
| 191 | 185 OwnPtrDeque::iterator it = deque.begin(); |
| 192 OwnPtrDeque::iterator it = deque.begin(); | 186 for (index = 0; index < deque.size(); ++index) { |
| 193 for (index = 0; index < deque.size(); ++index) { | 187 OwnPtr<DestructCounter>& refCounter = *it; |
| 194 OwnPtr<DestructCounter>& refCounter = *it; | 188 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); |
| 195 EXPECT_EQ(index, static_cast<size_t>(refCounter->get())); | 189 index++; |
| 196 index++; | 190 ++it; |
| 197 ++it; | 191 } |
| 198 } | 192 EXPECT_EQ(0, destructNumber); |
| 199 EXPECT_EQ(0, destructNumber); | 193 |
| 200 | 194 EXPECT_EQ(0, deque.first()->get()); |
| 201 EXPECT_EQ(0, deque.first()->get()); | 195 deque.removeFirst(); |
| 202 deque.removeFirst(); | 196 EXPECT_EQ(1, deque.first()->get()); |
| 203 EXPECT_EQ(1, deque.first()->get()); | 197 EXPECT_EQ(1u, deque.size()); |
| 204 EXPECT_EQ(1u, deque.size()); | 198 EXPECT_EQ(1, destructNumber); |
| 205 EXPECT_EQ(1, destructNumber); | 199 |
| 206 | 200 OwnPtr<DestructCounter> ownCounter1 = deque.first().release(); |
| 207 OwnPtr<DestructCounter> ownCounter1 = deque.first().release(); | 201 deque.removeFirst(); |
| 208 deque.removeFirst(); | 202 EXPECT_EQ(counter1, ownCounter1->get()); |
| 209 EXPECT_EQ(counter1, ownCounter1->get()); | 203 EXPECT_EQ(0u, deque.size()); |
| 210 EXPECT_EQ(0u, deque.size()); | 204 EXPECT_EQ(1, destructNumber); |
| 211 EXPECT_EQ(1, destructNumber); | 205 |
| 212 | 206 ownCounter1.clear(); |
| 213 ownCounter1.clear(); | 207 EXPECT_EQ(2, destructNumber); |
| 214 EXPECT_EQ(2, destructNumber); | 208 |
| 215 | 209 size_t count = 1025; |
| 216 size_t count = 1025; | 210 destructNumber = 0; |
| 217 destructNumber = 0; | 211 for (size_t i = 0; i < count; ++i) |
| 218 for (size_t i = 0; i < count; ++i) | 212 deque.prepend(adoptPtr(new DestructCounter(i, &destructNumber))); |
| 219 deque.prepend(adoptPtr(new DestructCounter(i, &destructNumber))); | 213 |
| 220 | 214 // Deque relocation must not destruct OwnPtr element. |
| 221 // Deque relocation must not destruct OwnPtr element. | 215 EXPECT_EQ(0, destructNumber); |
| 222 EXPECT_EQ(0, destructNumber); | 216 EXPECT_EQ(count, deque.size()); |
| 223 EXPECT_EQ(count, deque.size()); | 217 |
| 224 | 218 OwnPtrDeque copyDeque; |
| 225 OwnPtrDeque copyDeque; | 219 deque.swap(copyDeque); |
| 226 deque.swap(copyDeque); | 220 EXPECT_EQ(0, destructNumber); |
| 227 EXPECT_EQ(0, destructNumber); | 221 EXPECT_EQ(count, copyDeque.size()); |
| 228 EXPECT_EQ(count, copyDeque.size()); | 222 EXPECT_EQ(0u, deque.size()); |
| 229 EXPECT_EQ(0u, deque.size()); | 223 |
| 230 | 224 copyDeque.clear(); |
| 231 copyDeque.clear(); | 225 EXPECT_EQ(count, static_cast<size_t>(destructNumber)); |
| 232 EXPECT_EQ(count, static_cast<size_t>(destructNumber)); | |
| 233 } | 226 } |
| 234 | 227 |
| 235 // WrappedInt class will fail if it was memmoved or memcpyed. | 228 // WrappedInt class will fail if it was memmoved or memcpyed. |
| 236 HashSet<void*> constructedWrappedInts; | 229 HashSet<void*> constructedWrappedInts; |
| 237 | 230 |
| 238 class WrappedInt { | 231 class WrappedInt { |
| 239 public: | 232 public: |
| 240 WrappedInt(int i = 0) | 233 WrappedInt(int i = 0) |
| 241 : m_originalThisPtr(this) | 234 : m_originalThisPtr(this), m_i(i) { |
| 242 , m_i(i) | 235 constructedWrappedInts.add(this); |
| 243 { | 236 } |
| 244 constructedWrappedInts.add(this); | 237 |
| 245 } | 238 WrappedInt(const WrappedInt& other) |
| 246 | 239 : m_originalThisPtr(this), m_i(other.m_i) { |
| 247 WrappedInt(const WrappedInt& other) | 240 constructedWrappedInts.add(this); |
| 248 : m_originalThisPtr(this) | 241 } |
| 249 , m_i(other.m_i) | 242 |
| 250 { | 243 WrappedInt& operator=(const WrappedInt& other) { |
| 251 constructedWrappedInts.add(this); | 244 m_i = other.m_i; |
| 252 } | 245 return *this; |
| 253 | 246 } |
| 254 WrappedInt& operator=(const WrappedInt& other) | 247 |
| 255 { | 248 ~WrappedInt() { |
| 256 m_i = other.m_i; | 249 EXPECT_EQ(m_originalThisPtr, this); |
| 257 return *this; | 250 EXPECT_TRUE(constructedWrappedInts.contains(this)); |
| 258 } | 251 constructedWrappedInts.remove(this); |
| 259 | 252 } |
| 260 ~WrappedInt() | 253 |
| 261 { | 254 int get() const { return m_i; } |
| 262 EXPECT_EQ(m_originalThisPtr, this); | 255 |
| 263 EXPECT_TRUE(constructedWrappedInts.contains(this)); | 256 private: |
| 264 constructedWrappedInts.remove(this); | 257 void* m_originalThisPtr; |
| 265 } | 258 int m_i; |
| 266 | |
| 267 int get() const { return m_i; } | |
| 268 | |
| 269 private: | |
| 270 void* m_originalThisPtr; | |
| 271 int m_i; | |
| 272 }; | 259 }; |
| 273 | 260 |
| 274 TEST(DequeTest, SwapWithoutInlineCapacity) | 261 TEST(DequeTest, SwapWithoutInlineCapacity) { |
| 275 { | 262 Deque<WrappedInt> dequeA; |
| 276 Deque<WrappedInt> dequeA; | 263 dequeA.append(WrappedInt(1)); |
| 277 dequeA.append(WrappedInt(1)); | 264 Deque<WrappedInt> dequeB; |
| 278 Deque<WrappedInt> dequeB; | 265 dequeB.append(WrappedInt(2)); |
| 279 dequeB.append(WrappedInt(2)); | 266 |
| 280 | 267 ASSERT_EQ(dequeA.size(), dequeB.size()); |
| 281 ASSERT_EQ(dequeA.size(), dequeB.size()); | 268 dequeA.swap(dequeB); |
| 282 dequeA.swap(dequeB); | 269 |
| 283 | 270 ASSERT_EQ(1u, dequeA.size()); |
| 284 ASSERT_EQ(1u, dequeA.size()); | 271 EXPECT_EQ(2, dequeA.first().get()); |
| 285 EXPECT_EQ(2, dequeA.first().get()); | 272 ASSERT_EQ(1u, dequeB.size()); |
| 286 ASSERT_EQ(1u, dequeB.size()); | 273 EXPECT_EQ(1, dequeB.first().get()); |
| 287 EXPECT_EQ(1, dequeB.first().get()); | 274 |
| 288 | 275 dequeA.append(WrappedInt(3)); |
| 289 dequeA.append(WrappedInt(3)); | 276 |
| 290 | 277 ASSERT_GT(dequeA.size(), dequeB.size()); |
| 291 ASSERT_GT(dequeA.size(), dequeB.size()); | 278 dequeA.swap(dequeB); |
| 292 dequeA.swap(dequeB); | 279 |
| 293 | 280 ASSERT_EQ(1u, dequeA.size()); |
| 294 ASSERT_EQ(1u, dequeA.size()); | 281 EXPECT_EQ(1, dequeA.first().get()); |
| 295 EXPECT_EQ(1, dequeA.first().get()); | 282 ASSERT_EQ(2u, dequeB.size()); |
| 296 ASSERT_EQ(2u, dequeB.size()); | 283 EXPECT_EQ(2, dequeB.first().get()); |
| 297 EXPECT_EQ(2, dequeB.first().get()); | 284 |
| 298 | 285 ASSERT_LT(dequeA.size(), dequeB.size()); |
| 299 ASSERT_LT(dequeA.size(), dequeB.size()); | 286 dequeA.swap(dequeB); |
| 300 dequeA.swap(dequeB); | 287 |
| 301 | 288 ASSERT_EQ(2u, dequeA.size()); |
| 302 ASSERT_EQ(2u, dequeA.size()); | 289 EXPECT_EQ(2, dequeA.first().get()); |
| 303 EXPECT_EQ(2, dequeA.first().get()); | 290 ASSERT_EQ(1u, dequeB.size()); |
| 304 ASSERT_EQ(1u, dequeB.size()); | 291 EXPECT_EQ(1, dequeB.first().get()); |
| 305 EXPECT_EQ(1, dequeB.first().get()); | 292 |
| 306 | 293 dequeA.append(WrappedInt(4)); |
| 307 dequeA.append(WrappedInt(4)); | 294 dequeA.swap(dequeB); |
| 308 dequeA.swap(dequeB); | 295 |
| 309 | 296 ASSERT_EQ(1u, dequeA.size()); |
| 310 ASSERT_EQ(1u, dequeA.size()); | 297 EXPECT_EQ(1, dequeA.first().get()); |
| 311 EXPECT_EQ(1, dequeA.first().get()); | 298 ASSERT_EQ(3u, dequeB.size()); |
| 312 ASSERT_EQ(3u, dequeB.size()); | 299 EXPECT_EQ(2, dequeB.first().get()); |
| 313 EXPECT_EQ(2, dequeB.first().get()); | 300 |
| 314 | 301 dequeB.swap(dequeA); |
| 315 dequeB.swap(dequeA); | 302 } |
| 316 } | 303 |
| 317 | 304 } // anonymous namespace |
| 318 } // anonymous namespace | 305 |
| 319 | 306 } // namespace WTF |
| 320 } // namespace WTF | |
| OLD | NEW |