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