File indexing completed on 2024-04-28 05:52:31

0001 /*
0002     This file is part of the Okteta Core library, made within the KDE community.
0003 
0004     SPDX-FileCopyrightText: 2006 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 "addressrangelisttest.hpp"
0010 
0011 // test object
0012 #include <addressrangelist.hpp>
0013 // Qt
0014 #include <QTest>
0015 
0016 namespace Okteta {
0017 
0018 // local variables
0019 static constexpr Address Start1 = 15;
0020 static constexpr Address End1 = 27;
0021 static constexpr Size Width = End1 - Start1 + 1;
0022 static constexpr Size Distance = 10;
0023 static constexpr Address Start2 = End1 + Distance;
0024 static constexpr Address End2 = Start2 + Width - 1;
0025 
0026 void AddressRangeListTest::testSimpleConstructor()
0027 {
0028     AddressRangeList addressRangeList;
0029     QVERIFY(addressRangeList.isEmpty());
0030 }
0031 
0032 void AddressRangeListTest::testAddSingleRange()
0033 {
0034     AddressRangeList addressRangeList;
0035 
0036     AddressRange addressRange(Start1, End1);
0037     addressRangeList.addAddressRange(addressRange);
0038     QCOMPARE(addressRangeList.size(), 1);
0039     QCOMPARE(addressRangeList.first(), addressRange);
0040 }
0041 
0042 void AddressRangeListTest::testAddJoinableRanges()
0043 {
0044     AddressRangeList addressRangeList;
0045 
0046     AddressRange addressRange1(Start1, End1);
0047     AddressRange addressRange2(Start2, End2);
0048     // in front
0049     AddressRange otherAddressRange(0, Start1 - 1);
0050     addressRangeList.addAddressRange(addressRange1);
0051     addressRangeList.addAddressRange(addressRange2);
0052     addressRangeList.addAddressRange(otherAddressRange);
0053 
0054     QCOMPARE(addressRangeList.size(), 2);
0055     QCOMPARE(addressRangeList.first(), AddressRange(otherAddressRange.start(), addressRange1.end()));
0056     QCOMPARE(addressRangeList.last(), addressRange2);
0057 
0058     // in the middle, with first
0059     addressRangeList.clear();
0060     otherAddressRange.set(End1 + 1, Start2 - 2);
0061     addressRangeList.addAddressRange(addressRange1);
0062     addressRangeList.addAddressRange(addressRange2);
0063     addressRangeList.addAddressRange(otherAddressRange);
0064 
0065     QCOMPARE(addressRangeList.size(), 2);
0066     QCOMPARE(addressRangeList.first(), AddressRange(addressRange1.start(), otherAddressRange.end()));
0067     QCOMPARE(addressRangeList.last(), addressRange2);
0068 
0069     // in the middle, with both
0070     addressRangeList.clear();
0071     otherAddressRange.set(End1 + 1, Start2 - 1);
0072     addressRangeList.addAddressRange(addressRange1);
0073     addressRangeList.addAddressRange(addressRange2);
0074     addressRangeList.addAddressRange(otherAddressRange);
0075 
0076     QCOMPARE(addressRangeList.size(), 1);
0077     QCOMPARE(addressRangeList.first(), AddressRange(addressRange1.start(), addressRange2.end()));
0078 
0079     // in the middle, with last
0080     addressRangeList.clear();
0081     otherAddressRange.set(End1 + 2, Start2 - 1);
0082     addressRangeList.addAddressRange(addressRange1);
0083     addressRangeList.addAddressRange(addressRange2);
0084     addressRangeList.addAddressRange(otherAddressRange);
0085 
0086     QCOMPARE(addressRangeList.size(), 2);
0087     QCOMPARE(addressRangeList.first(), addressRange1);
0088     QCOMPARE(addressRangeList.last(), AddressRange(otherAddressRange.start(), addressRange2.end()));
0089 
0090     // behind
0091     addressRangeList.clear();
0092     otherAddressRange.setByWidth(End2 + 1, Width);
0093     addressRangeList.addAddressRange(addressRange1);
0094     addressRangeList.addAddressRange(addressRange2);
0095     addressRangeList.addAddressRange(otherAddressRange);
0096 
0097     QCOMPARE(addressRangeList.size(), 2);
0098     QCOMPARE(addressRangeList.first(), addressRange1);
0099     QCOMPARE(addressRangeList.last(), AddressRange(addressRange2.start(), otherAddressRange.end()));
0100 }
0101 
0102 void AddressRangeListTest::testAddNonJoinableRanges()
0103 {
0104     AddressRangeList addressRangeList;
0105 
0106     AddressRange addressRange1(Start1, End1);
0107     AddressRange addressRange2(Start2, End2);
0108     // in front
0109     AddressRange otherAddressRange(0, Start1 - 2);
0110     addressRangeList.addAddressRange(addressRange1);
0111     addressRangeList.addAddressRange(addressRange2);
0112     addressRangeList.addAddressRange(otherAddressRange);
0113 
0114     QCOMPARE(addressRangeList.size(), 3);
0115     QCOMPARE(addressRangeList.first(), otherAddressRange);
0116     QCOMPARE(addressRangeList.last(), addressRange2);
0117 
0118     // in the middle
0119     addressRangeList.clear();
0120     otherAddressRange.set(End1 + 2, Start2 - 2);
0121     addressRangeList.addAddressRange(addressRange1);
0122     addressRangeList.addAddressRange(addressRange2);
0123     addressRangeList.addAddressRange(otherAddressRange);
0124 
0125     QCOMPARE(addressRangeList.size(), 3);
0126     QCOMPARE(addressRangeList.first(), addressRange1);
0127     QCOMPARE(addressRangeList.last(), addressRange2);
0128 
0129     // behind
0130     addressRangeList.clear();
0131     otherAddressRange.setByWidth(End2 + 2, Width);
0132     addressRangeList.addAddressRange(addressRange1);
0133     addressRangeList.addAddressRange(addressRange2);
0134     addressRangeList.addAddressRange(otherAddressRange);
0135 
0136     QCOMPARE(addressRangeList.size(), 3);
0137     QCOMPARE(addressRangeList.first(), addressRange1);
0138     QCOMPARE(addressRangeList.last(), otherAddressRange);
0139 }
0140 
0141 }
0142 
0143 QTEST_GUILESS_MAIN(Okteta::AddressRangeListTest)
0144 
0145 #include "moc_addressrangelisttest.cpp"