File indexing completed on 2024-04-28 05:52:32
0001 /* 0002 This file is part of the Okteta Core library, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2006, 2008 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "addressrangetest.hpp" 0010 0011 // test object 0012 #include <addressrange.hpp> 0013 // Qt 0014 #include <QTest> 0015 0016 // TODO: find out how to test a template class with Qt/KDE, 0017 // so e.g. NumberRange can be tested with more than AddressRange 0018 namespace Okteta { 0019 0020 // local variables 0021 static constexpr Address Start = 15; 0022 static constexpr Address End = 27; 0023 0024 static constexpr Size Width = End - Start + 1; 0025 0026 void AddressRangeTest::testConstructorByEnd() 0027 { 0028 AddressRange addressRange(Start, End); 0029 QCOMPARE(addressRange.start(), Start); 0030 QCOMPARE(addressRange.end(), End); 0031 QCOMPARE(addressRange.width(), Width); 0032 } 0033 0034 void AddressRangeTest::testConstructorByWidth() 0035 { 0036 AddressRange addressRange = AddressRange::fromWidth(Start, Width); 0037 0038 QCOMPARE(addressRange.start(), Start); 0039 QCOMPARE(addressRange.end(), End); 0040 QCOMPARE(addressRange.width(), Width); 0041 0042 addressRange = AddressRange::fromWidth(Width); 0043 0044 QCOMPARE(addressRange.start(), 0); 0045 QCOMPARE(addressRange.end(), Width - 1); 0046 QCOMPARE(addressRange.width(), Width); 0047 } 0048 0049 void AddressRangeTest::testSimpleConstructor() 0050 { 0051 AddressRange addressRange; 0052 QVERIFY(addressRange.isEmpty()); 0053 } 0054 0055 void AddressRangeTest::testCopyConstructor() 0056 { 0057 const AddressRange otherAddressRange(Start, End); 0058 0059 AddressRange addressRange(otherAddressRange); 0060 QCOMPARE(addressRange.start(), Start); 0061 QCOMPARE(addressRange.end(), End); 0062 QCOMPARE(addressRange.width(), Width); 0063 QVERIFY(!addressRange.isEmpty()); 0064 } 0065 0066 void AddressRangeTest::testSetGetStart() 0067 { 0068 AddressRange addressRange; 0069 addressRange.setStart(Start); 0070 QCOMPARE(addressRange.start(), Start); 0071 } 0072 0073 void AddressRangeTest::testSetGetEnd() 0074 { 0075 AddressRange addressRange; 0076 addressRange.setEnd(End); 0077 QCOMPARE(addressRange.end(), End); 0078 } 0079 0080 void AddressRangeTest::testSetGetWidth() 0081 { 0082 AddressRange addressRange; 0083 // end, width by width 0084 addressRange.setStart(Start); 0085 addressRange.setEndByWidth(Width); 0086 QCOMPARE(addressRange.end(), End); 0087 QCOMPARE(addressRange.width(), Width); 0088 // start, width by width 0089 addressRange.setEnd(End); 0090 addressRange.setStartByWidth(Width); 0091 QCOMPARE(addressRange.start(), Start); 0092 QCOMPARE(addressRange.width(), Width); 0093 } 0094 0095 void AddressRangeTest::testIsEmpty() 0096 { 0097 AddressRange addressRange(Start, End); 0098 QVERIFY(!addressRange.isEmpty()); 0099 addressRange.unset(); 0100 QVERIFY(addressRange.isEmpty()); 0101 } 0102 0103 void AddressRangeTest::testCompare() 0104 { 0105 AddressRange addressRange(Start, End); 0106 // same 0107 AddressRange otherAddressRange(Start, End); 0108 QVERIFY(addressRange == otherAddressRange); 0109 QVERIFY(!(addressRange != otherAddressRange)); 0110 // different start 0111 otherAddressRange.set(Start + 1, End); 0112 QVERIFY(!(addressRange == otherAddressRange)); 0113 QVERIFY(addressRange != otherAddressRange); 0114 // different end 0115 otherAddressRange.set(Start, End + 1); 0116 QVERIFY(!(addressRange == otherAddressRange)); 0117 QVERIFY(addressRange != otherAddressRange); 0118 } 0119 0120 void AddressRangeTest::testIncludes() 0121 { 0122 AddressRange addressRange(Start, End); 0123 // at start 0124 Address i = addressRange.start(); 0125 QVERIFY(addressRange.includes(i)); 0126 // before start 0127 --i; 0128 QVERIFY(!addressRange.includes(i)); 0129 // at end 0130 i = addressRange.end(); 0131 QVERIFY(addressRange.includes(i)); 0132 // behind end 0133 ++i; 0134 QVERIFY(!addressRange.includes(i)); 0135 } 0136 0137 void AddressRangeTest::testLocalIndex() 0138 { 0139 AddressRange addressRange(Start, End); 0140 0141 Address localIndex = addressRange.localIndex(Start); 0142 QCOMPARE(localIndex, 0); 0143 0144 localIndex = addressRange.localIndex(End); 0145 QCOMPARE(localIndex, Width - 1); 0146 } 0147 0148 void AddressRangeTest::testLocalRange() 0149 { 0150 AddressRange addressRange(Start, End); 0151 0152 AddressRange localRange = addressRange.localRange(AddressRange(Start, End)); 0153 QCOMPARE(localRange.start(), 0); 0154 QCOMPARE(localRange.end(), Width - 1); 0155 0156 localRange = addressRange.localRange(AddressRange(Start + 1, End)); 0157 QCOMPARE(localRange.start(), 1); 0158 QCOMPARE(localRange.end(), Width - 1); 0159 0160 localRange = addressRange.localRange(AddressRange(Start, End - 1)); 0161 QCOMPARE(localRange.start(), 0); 0162 QCOMPARE(localRange.end(), Width - 2); 0163 0164 localRange = addressRange.localRange(AddressRange(Start + 1, End - 1)); 0165 QCOMPARE(localRange.start(), 1); 0166 QCOMPARE(localRange.end(), Width - 2); 0167 } 0168 0169 void AddressRangeTest::testSubRange() 0170 { 0171 AddressRange addressRange(Start, End); 0172 0173 AddressRange subRange = addressRange.subRange(AddressRange::fromWidth(Width)); 0174 QCOMPARE(subRange.start(), Start); 0175 QCOMPARE(subRange.end(), End); 0176 0177 subRange = addressRange.subRange(AddressRange(1, Width - 1)); 0178 QCOMPARE(subRange.start(), Start + 1); 0179 QCOMPARE(subRange.end(), End); 0180 0181 subRange = addressRange.subRange(AddressRange(0, Width - 2)); 0182 QCOMPARE(subRange.start(), Start); 0183 QCOMPARE(subRange.end(), End - 1); 0184 0185 subRange = addressRange.subRange(AddressRange(1, Width - 2)); 0186 QCOMPARE(subRange.start(), Start + 1); 0187 QCOMPARE(subRange.end(), End - 1); 0188 } 0189 0190 void AddressRangeTest::testAdaptToReplacement() 0191 { 0192 // adaptToReplacement, same length, behind 0193 AddressRange addressRange(Start, End); 0194 AddressRange otherAddressRange(addressRange); 0195 addressRange.adaptToReplacement(End + 1, Width, Width); 0196 QCOMPARE(addressRange, otherAddressRange); 0197 0198 // adaptToReplacement, same length, before 0199 addressRange.set(Start, End); 0200 otherAddressRange.set(addressRange); 0201 addressRange.adaptToReplacement(Start - 2, 1, 1); 0202 QCOMPARE(addressRange, otherAddressRange); 0203 0204 // adaptToReplacement, same length, -1,-1 0205 addressRange.set(Start - 1, End - 1); 0206 otherAddressRange.set(Start - 1, Start - 1); 0207 addressRange.adaptToReplacement(Start, Width, Width); 0208 QCOMPARE(addressRange, otherAddressRange); 0209 0210 // adaptToReplacement, same length, -1,0 0211 addressRange.set(Start - 1, End); 0212 otherAddressRange.set(addressRange); 0213 addressRange.adaptToReplacement(Start, Width, Width); 0214 QCOMPARE(addressRange, otherAddressRange); 0215 0216 // adaptToReplacement, same length, -1,+1 0217 addressRange.set(Start - 1, End + 1); 0218 otherAddressRange.set(addressRange); 0219 addressRange.adaptToReplacement(Start, Width, Width); 0220 QCOMPARE(addressRange, otherAddressRange); 0221 0222 // adaptToReplacement, same length, 0,-1 0223 addressRange.set(Start, End - 1); 0224 otherAddressRange.set(addressRange); 0225 addressRange.adaptToReplacement(Start, Width, Width); 0226 QVERIFY(!addressRange.isValid()); 0227 0228 // adaptToReplacement, same length, 0,0 0229 addressRange.set(Start, End); 0230 otherAddressRange.set(addressRange); 0231 addressRange.adaptToReplacement(Start, Width, Width); 0232 QCOMPARE(addressRange, otherAddressRange); 0233 0234 // adaptToReplacement, same length, 0,+1 0235 addressRange.set(Start, End + 1); 0236 otherAddressRange.set(addressRange); 0237 addressRange.adaptToReplacement(Start, Width, Width); 0238 QCOMPARE(addressRange, otherAddressRange); 0239 0240 // adaptToReplacement, same length, +1,-1 0241 addressRange.set(Start + 1, End - 1); 0242 addressRange.adaptToReplacement(Start, Width, Width); 0243 QVERIFY(!addressRange.isValid()); 0244 0245 // adaptToReplacement, same length, +1,0 0246 addressRange.set(Start + 1, End); 0247 addressRange.adaptToReplacement(Start, Width, Width); 0248 QVERIFY(!addressRange.isValid()); 0249 0250 // adaptToReplacement, same length, +1,+1 0251 addressRange.set(Start + 1, End + 1); 0252 otherAddressRange.set(End + 1, End + 1); 0253 addressRange.adaptToReplacement(Start, Width, Width); 0254 QCOMPARE(addressRange, otherAddressRange); 0255 0256 // adaptToReplacement, less length, behind 0257 addressRange.set(Start, End); 0258 otherAddressRange.set(addressRange); 0259 addressRange.adaptToReplacement(End + 1, Width, Width - 2); 0260 QCOMPARE(addressRange, otherAddressRange); 0261 0262 // adaptToReplacement, less length, before 0263 addressRange.set(Start, End); 0264 otherAddressRange.set(Start - 2, End - 2); 0265 addressRange.adaptToReplacement(Start - Width, Width, Width - 2); 0266 QCOMPARE(addressRange, otherAddressRange); 0267 0268 // adaptToReplacement, less length, -1,-1 0269 addressRange.set(Start - 1, End - 1); 0270 otherAddressRange.set(Start - 1, Start - 1); 0271 addressRange.adaptToReplacement(Start, Width, Width - 2); 0272 QCOMPARE(addressRange, otherAddressRange); 0273 0274 // adaptToReplacement, less length, -1,0 0275 addressRange.set(Start - 1, End); 0276 otherAddressRange.set(Start - 1, End - 2); 0277 addressRange.adaptToReplacement(Start, Width, Width - 2); 0278 QCOMPARE(addressRange, otherAddressRange); 0279 0280 // adaptToReplacement, less length, -1,+1 0281 addressRange.set(Start - 1, End + 1); 0282 otherAddressRange.set(Start - 1, End - 1); 0283 addressRange.adaptToReplacement(Start, Width, Width - 2); 0284 QCOMPARE(addressRange, otherAddressRange); 0285 0286 // adaptToReplacement, less length, 0,-1 0287 addressRange.set(Start, End - 1); 0288 addressRange.adaptToReplacement(Start, Width, Width - 2); 0289 QVERIFY(!addressRange.isValid()); 0290 0291 // adaptToReplacement, less length, 0,0 0292 addressRange.set(Start, End); 0293 otherAddressRange.set(Start, End - 2); 0294 addressRange.adaptToReplacement(Start, Width, Width - 2); 0295 QCOMPARE(addressRange, otherAddressRange); 0296 0297 // adaptToReplacement, less length, 0,+1 0298 addressRange.set(Start, End + 1); 0299 otherAddressRange.set(Start, End - 1); 0300 addressRange.adaptToReplacement(Start, Width, Width - 2); 0301 QCOMPARE(addressRange, otherAddressRange); 0302 0303 // adaptToReplacement, less length, +1,-1 0304 addressRange.set(Start + 1, End - 1); 0305 addressRange.adaptToReplacement(Start, Width, Width - 2); 0306 QVERIFY(!addressRange.isValid()); 0307 0308 // adaptToReplacement, less length, +1,0 0309 addressRange.set(Start + 1, End); 0310 addressRange.adaptToReplacement(Start, Width, Width - 2); 0311 QVERIFY(!addressRange.isValid()); 0312 0313 // adaptToReplacement, less length, +1,+1 0314 addressRange.set(Start + 1, End + 1); 0315 otherAddressRange.set(End - 1, End - 1); 0316 addressRange.adaptToReplacement(Start, Width, Width - 2); 0317 QCOMPARE(addressRange, otherAddressRange); 0318 0319 // adaptToReplacement, greater length, behind 0320 addressRange.set(Start, End); 0321 otherAddressRange.set(addressRange); 0322 addressRange.adaptToReplacement(End + 1, Width, Width + 2); 0323 QCOMPARE(addressRange, otherAddressRange); 0324 0325 // adaptToReplacement, greater length, before 0326 addressRange.set(Start, End); 0327 otherAddressRange.set(Start + 2, End + 2); 0328 addressRange.adaptToReplacement(Start - Width, Width, Width + 2); 0329 QCOMPARE(addressRange, otherAddressRange); 0330 0331 // adaptToReplacement, greater length, -1,-1 0332 addressRange.set(Start - 1, End - 1); 0333 otherAddressRange.set(Start - 1, Start - 1); 0334 addressRange.adaptToReplacement(Start, Width, Width + 2); 0335 QCOMPARE(addressRange, otherAddressRange); 0336 0337 // adaptToReplacement, greater length, -1,0 0338 addressRange.set(Start - 1, End); 0339 otherAddressRange.set(Start - 1, End + 2); 0340 addressRange.adaptToReplacement(Start, Width, Width + 2); 0341 QCOMPARE(addressRange, otherAddressRange); 0342 0343 // adaptToReplacement, greater length, -1,+1 0344 addressRange.set(Start - 1, End + 1); 0345 otherAddressRange.set(Start - 1, End + 3); 0346 addressRange.adaptToReplacement(Start, Width, Width + 2); 0347 QCOMPARE(addressRange, otherAddressRange); 0348 0349 // adaptToReplacement, greater length, 0,-1 0350 addressRange.set(Start, End - 1); 0351 addressRange.adaptToReplacement(Start, Width, Width + 2); 0352 QVERIFY(!addressRange.isValid()); 0353 0354 // adaptToReplacement, greater length, 0,0 0355 addressRange.set(Start, End); 0356 otherAddressRange.set(Start, End + 2); 0357 addressRange.adaptToReplacement(Start, Width, Width + 2); 0358 QCOMPARE(addressRange, otherAddressRange); 0359 0360 // adaptToReplacement, greater length, 0,+1 0361 addressRange.set(Start, End + 1); 0362 otherAddressRange.set(Start, End + 3); 0363 addressRange.adaptToReplacement(Start, Width, Width + 2); 0364 QCOMPARE(addressRange, otherAddressRange); 0365 0366 // adaptToReplacement, greater length, +1,-1 0367 addressRange.set(Start + 1, End - 1); 0368 addressRange.adaptToReplacement(Start, Width, Width + 2); 0369 QVERIFY(!addressRange.isValid()); 0370 0371 // adaptToReplacement, greater length, +1,0 0372 addressRange.set(Start + 1, End); 0373 addressRange.adaptToReplacement(Start, Width, Width + 2); 0374 QVERIFY(!addressRange.isValid()); 0375 0376 // adaptToReplacement, greater length, +1,+1 0377 addressRange.set(Start + 1, End + 1); 0378 otherAddressRange.set(End + 3, End + 3); 0379 addressRange.adaptToReplacement(Start, Width, Width + 2); 0380 QCOMPARE(addressRange, otherAddressRange); 0381 0382 // adaptToReplacement, insert, behind 0383 addressRange.set(Start - 1, Start - 1); 0384 otherAddressRange.set(Start - 1, End); 0385 addressRange.adaptToReplacement(Start, 0, Width); 0386 QCOMPARE(addressRange, otherAddressRange); 0387 0388 // adaptToReplacement, insert, middle 0389 addressRange.set(Start - 1, Start); 0390 otherAddressRange.set(Start - 1, End + 1); 0391 addressRange.adaptToReplacement(Start, 0, Width); 0392 QCOMPARE(addressRange, otherAddressRange); 0393 0394 // adaptToReplacement, insert, before 0395 addressRange.set(Start, Start); 0396 otherAddressRange.set(End + 1, End + 1); 0397 addressRange.adaptToReplacement(Start, 0, Width); 0398 QCOMPARE(addressRange, otherAddressRange); 0399 } 0400 0401 void AddressRangeTest::testSplitAt() 0402 { 0403 AddressRange addressRange(Start, End); 0404 0405 // split at start 0406 AddressRange splitAddressRange = addressRange.splitAt(Start); 0407 QVERIFY(!addressRange.isValid()); 0408 QCOMPARE(splitAddressRange.start(), Start); 0409 QCOMPARE(splitAddressRange.end(), End); 0410 0411 // split at one after start 0412 addressRange.set(Start, End); 0413 splitAddressRange = addressRange.splitAt(Start + 1); 0414 QCOMPARE(addressRange.start(), Start); 0415 QCOMPARE(addressRange.end(), Start); 0416 QCOMPARE(splitAddressRange.start(), Start + 1); 0417 QCOMPARE(splitAddressRange.end(), End); 0418 0419 // split at mid 0420 const Address Mid = (Start + End) / 2; 0421 addressRange.set(Start, End); 0422 splitAddressRange = addressRange.splitAt(Mid); 0423 QCOMPARE(addressRange.start(), Start); 0424 QCOMPARE(addressRange.end(), Mid - 1); 0425 QCOMPARE(splitAddressRange.start(), Mid); 0426 QCOMPARE(splitAddressRange.end(), End); 0427 0428 // split at one before end 0429 addressRange.set(Start, End); 0430 splitAddressRange = addressRange.splitAt(End); 0431 QCOMPARE(addressRange.start(), Start); 0432 QCOMPARE(addressRange.end(), End - 1); 0433 QCOMPARE(splitAddressRange.start(), End); 0434 QCOMPARE(splitAddressRange.end(), End); 0435 0436 // split at start so the split is the full 0437 addressRange.set(Start, End); 0438 splitAddressRange = addressRange.splitAt(End + 1); 0439 QCOMPARE(addressRange.start(), Start); 0440 QCOMPARE(addressRange.end(), End); 0441 QVERIFY(!splitAddressRange.isValid()); 0442 } 0443 0444 void AddressRangeTest::testSplitAtLocal() 0445 { 0446 AddressRange addressRange(Start, End); 0447 0448 // split at start 0449 AddressRange splitAddressRange = addressRange.splitAtLocal(0); 0450 QVERIFY(!addressRange.isValid()); 0451 QCOMPARE(splitAddressRange.start(), Start); 0452 QCOMPARE(splitAddressRange.end(), End); 0453 0454 // split at one after start 0455 addressRange.set(Start, End); 0456 splitAddressRange = addressRange.splitAtLocal(1); 0457 QCOMPARE(addressRange.start(), Start); 0458 QCOMPARE(addressRange.end(), Start); 0459 QCOMPARE(splitAddressRange.start(), Start + 1); 0460 QCOMPARE(splitAddressRange.end(), End); 0461 0462 // split at mid 0463 const Address Mid = Width / 2; 0464 addressRange.set(Start, End); 0465 splitAddressRange = addressRange.splitAtLocal(Mid); 0466 QCOMPARE(addressRange.start(), Start); 0467 QCOMPARE(addressRange.end(), Start + Mid - 1); 0468 QCOMPARE(splitAddressRange.start(), Start + Mid); 0469 QCOMPARE(splitAddressRange.end(), End); 0470 0471 // split at one before end 0472 addressRange.set(Start, End); 0473 splitAddressRange = addressRange.splitAtLocal(Width - 1); 0474 QCOMPARE(addressRange.start(), Start); 0475 QCOMPARE(addressRange.end(), End - 1); 0476 QCOMPARE(splitAddressRange.start(), End); 0477 QCOMPARE(splitAddressRange.end(), End); 0478 0479 // split at start so the split is the full 0480 addressRange.set(Start, End); 0481 splitAddressRange = addressRange.splitAtLocal(Width); 0482 QCOMPARE(addressRange.start(), Start); 0483 QCOMPARE(addressRange.end(), End); 0484 QVERIFY(!splitAddressRange.isValid()); 0485 } 0486 0487 void AddressRangeTest::testRemove() 0488 { 0489 const Address Mid = (Start + End) / 2; 0490 AddressRange addressRange(Start, End); 0491 0492 // remove none at start 0493 AddressRange removeAddressRange(Start, Start - 1); 0494 AddressRange splitAddressRange = addressRange.remove(removeAddressRange); 0495 QVERIFY(!addressRange.isValid()); 0496 QCOMPARE(splitAddressRange.start(), Start); 0497 QCOMPARE(splitAddressRange.end(), End); 0498 0499 // remove one at start 0500 addressRange.set(Start, End); 0501 removeAddressRange.set(Start, Start); 0502 splitAddressRange = addressRange.remove(removeAddressRange); 0503 QVERIFY(!addressRange.isValid()); 0504 QCOMPARE(splitAddressRange.start(), Start + 1); 0505 QCOMPARE(splitAddressRange.end(), End); 0506 0507 // remove many at start 0508 addressRange.set(Start, End); 0509 removeAddressRange.set(Start, Mid); 0510 splitAddressRange = addressRange.remove(removeAddressRange); 0511 QVERIFY(!addressRange.isValid()); 0512 QCOMPARE(splitAddressRange.start(), Mid + 1); 0513 QCOMPARE(splitAddressRange.end(), End); 0514 0515 // remove all except last 0516 addressRange.set(Start, End); 0517 removeAddressRange.set(Start, End - 1); 0518 splitAddressRange = addressRange.remove(removeAddressRange); 0519 QVERIFY(!addressRange.isValid()); 0520 QCOMPARE(splitAddressRange.start(), End); 0521 QCOMPARE(splitAddressRange.end(), End); 0522 0523 // remove at mid 0524 addressRange.set(Start, End); 0525 removeAddressRange.set(Mid - 1, Mid + 1); 0526 splitAddressRange = addressRange.remove(removeAddressRange); 0527 QCOMPARE(addressRange.start(), Start); 0528 QCOMPARE(addressRange.end(), Mid - 2); 0529 QCOMPARE(splitAddressRange.start(), Mid + 2); 0530 QCOMPARE(splitAddressRange.end(), End); 0531 0532 // remove none at end 0533 addressRange.set(Start, End); 0534 removeAddressRange.set(End + 1, End); 0535 splitAddressRange = addressRange.remove(removeAddressRange); 0536 QCOMPARE(addressRange.start(), Start); 0537 QCOMPARE(addressRange.end(), End); 0538 QVERIFY(!splitAddressRange.isValid()); 0539 0540 // remove one at end 0541 addressRange.set(Start, End); 0542 removeAddressRange.set(End, End); 0543 splitAddressRange = addressRange.remove(removeAddressRange); 0544 QCOMPARE(addressRange.start(), Start); 0545 QCOMPARE(addressRange.end(), End - 1); 0546 QVERIFY(!splitAddressRange.isValid()); 0547 0548 // remove many at end 0549 addressRange.set(Start, End); 0550 removeAddressRange.set(Mid, End); 0551 splitAddressRange = addressRange.remove(removeAddressRange); 0552 QCOMPARE(addressRange.start(), Start); 0553 QCOMPARE(addressRange.end(), Mid - 1); 0554 QVERIFY(!splitAddressRange.isValid()); 0555 0556 // remove all except first 0557 addressRange.set(Start, End); 0558 removeAddressRange.set(Start + 1, End); 0559 splitAddressRange = addressRange.remove(removeAddressRange); 0560 QCOMPARE(addressRange.start(), Start); 0561 QCOMPARE(addressRange.end(), Start); 0562 QVERIFY(!splitAddressRange.isValid()); 0563 0564 // remove all 0565 addressRange.set(Start, End); 0566 removeAddressRange.set(Start, End); 0567 splitAddressRange = addressRange.remove(removeAddressRange); 0568 QVERIFY(!addressRange.isValid()); 0569 QVERIFY(!splitAddressRange.isValid()); 0570 } 0571 0572 void AddressRangeTest::testRemoveLocal() 0573 { 0574 const Address Mid = Width / 2; 0575 AddressRange addressRange(Start, End); 0576 0577 // remove none at start 0578 AddressRange removeAddressRange(0, 0 - 1); 0579 AddressRange splitAddressRange = addressRange.removeLocal(removeAddressRange); 0580 QVERIFY(!addressRange.isValid()); 0581 QCOMPARE(splitAddressRange.start(), Start); 0582 QCOMPARE(splitAddressRange.end(), End); 0583 0584 // remove one at start 0585 addressRange.set(Start, End); 0586 removeAddressRange.set(0, 0); 0587 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0588 QVERIFY(!addressRange.isValid()); 0589 QCOMPARE(splitAddressRange.start(), Start + 1); 0590 QCOMPARE(splitAddressRange.end(), End); 0591 0592 // remove many at start 0593 addressRange.set(Start, End); 0594 removeAddressRange.set(0, Mid); 0595 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0596 QVERIFY(!addressRange.isValid()); 0597 QCOMPARE(splitAddressRange.start(), Start + Mid + 1); 0598 QCOMPARE(splitAddressRange.end(), End); 0599 0600 // remove all except last 0601 addressRange.set(Start, End); 0602 removeAddressRange.set(0, Width - 2); 0603 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0604 QVERIFY(!addressRange.isValid()); 0605 QCOMPARE(splitAddressRange.start(), End); 0606 QCOMPARE(splitAddressRange.end(), End); 0607 0608 // remove at mid 0609 addressRange.set(Start, End); 0610 removeAddressRange.set(Mid - 1, Mid + 1); 0611 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0612 QCOMPARE(addressRange.start(), Start); 0613 QCOMPARE(addressRange.end(), Start + Mid - 2); 0614 QCOMPARE(splitAddressRange.start(), Start + Mid + 2); 0615 QCOMPARE(splitAddressRange.end(), End); 0616 0617 // remove none at end 0618 addressRange.set(Start, End); 0619 removeAddressRange.set(Width, Width - 1); 0620 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0621 QCOMPARE(addressRange.start(), Start); 0622 QCOMPARE(addressRange.end(), End); 0623 QVERIFY(!splitAddressRange.isValid()); 0624 0625 // remove one at end 0626 addressRange.set(Start, End); 0627 removeAddressRange.set(Width - 1, Width - 1); 0628 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0629 QCOMPARE(addressRange.start(), Start); 0630 QCOMPARE(addressRange.end(), End - 1); 0631 QVERIFY(!splitAddressRange.isValid()); 0632 0633 // remove many at end 0634 addressRange.set(Start, End); 0635 removeAddressRange.set(Mid, Width - 1); 0636 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0637 QCOMPARE(addressRange.start(), Start); 0638 QCOMPARE(addressRange.end(), Start + Mid - 1); 0639 QVERIFY(!splitAddressRange.isValid()); 0640 0641 // remove all except first 0642 addressRange.set(Start, End); 0643 removeAddressRange.set(1, Width - 1); 0644 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0645 QCOMPARE(addressRange.start(), Start); 0646 QCOMPARE(addressRange.end(), Start); 0647 QVERIFY(!splitAddressRange.isValid()); 0648 0649 // remove all 0650 addressRange.set(Start, End); 0651 removeAddressRange.set(0, Width - 1); 0652 splitAddressRange = addressRange.removeLocal(removeAddressRange); 0653 QVERIFY(!addressRange.isValid()); 0654 QVERIFY(!splitAddressRange.isValid()); 0655 } 0656 0657 void AddressRangeTest::testStartForInclude() 0658 { 0659 // testStartForInclude, same length, start at start 0660 const AddressRange addressRange(Start, End); 0661 AddressRange otherAddressRange(addressRange); 0662 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start()); 0663 0664 // testStartForInclude, same length, start before start 0665 otherAddressRange.moveBy(-1); 0666 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start()); 0667 0668 // testStartForInclude, same length, end behind end 0669 otherAddressRange.moveBy(2); 0670 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start()); 0671 0672 // testStartForInclude, smaller length, start at start 0673 otherAddressRange.set(Start, End - 1); 0674 Size Diff = addressRange.width() - otherAddressRange.width(); 0675 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start()); 0676 0677 // testStartForInclude, smaller length, start before start 0678 otherAddressRange.moveBy(-1); 0679 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start()); 0680 0681 // testStartForInclude, smaller length, end behind end 0682 otherAddressRange.moveBy(2); 0683 QCOMPARE(addressRange.startForInclude(otherAddressRange), otherAddressRange.start() - Diff); 0684 0685 /* // undefined in startForInclude 0686 // testStartForInclude, greater length, start at start 0687 otherAddressRange.set( Start, End+1 ); 0688 Diff = addressRange.width() - otherAddressRange.width(); 0689 QCOMPARE( addressRange.startForInclude(otherAddressRange), otherAddressRange.start() ); 0690 0691 // testStartForInclude, smaller length, start before start 0692 otherAddressRange.moveBy( -1 ); 0693 QCOMPARE( addressRange.startForInclude(otherAddressRange), otherAddressRange.start() ); 0694 0695 // testStartForInclude, smaller length, end behind end 0696 otherAddressRange.moveBy( 2 ); 0697 QCOMPARE( addressRange.startForInclude(otherAddressRange), otherAddressRange.start()-Diff ); 0698 */ 0699 } 0700 0701 void AddressRangeTest::testIsJoinable() 0702 { 0703 // testStartForInclude, same length, start at start 0704 const AddressRange addressRange(Start, End); 0705 AddressRange otherAddressRange(addressRange); 0706 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0707 0708 // adaptToReplacement, insert, before 0709 otherAddressRange.set(End + 1, End + Width); 0710 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0711 0712 // Overlapping, right shifted 0713 otherAddressRange.set(Start + 1, End + 1); 0714 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0715 0716 // Overlapping, left shifted 0717 otherAddressRange.set(Start - 1, End - 1); 0718 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0719 0720 // Overlapping, 1 includes 2 0721 otherAddressRange.set(Start + 1, End - 1); 0722 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0723 0724 // Overlapping, 2 includes 1 0725 otherAddressRange.set(Start - 1, End + 1); 0726 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0727 0728 // Overlapping, identic 0729 otherAddressRange.set(addressRange); 0730 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0731 0732 // Coupled, first, then second 0733 otherAddressRange.set(End + 1, End + Width); 0734 QVERIFY(addressRange.isJoinable(otherAddressRange)); 0735 0736 // Coupled, second, then first 0737 QVERIFY(otherAddressRange.isJoinable(addressRange)); 0738 0739 // NonOverlapping, first, then second 0740 otherAddressRange.set(End + 2, End + Width + 1); 0741 QVERIFY(!addressRange.isJoinable(otherAddressRange)); 0742 0743 // NonOverlapping, second, then first 0744 QVERIFY(!otherAddressRange.isJoinable(addressRange)); 0745 } 0746 0747 } 0748 0749 QTEST_GUILESS_MAIN(Okteta::AddressRangeTest) 0750 0751 #include "moc_addressrangetest.cpp"