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

0001 /*
0002     This file is part of the Okteta Gui 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 "coordrangetest.hpp"
0010 
0011 // test object
0012 #include <coordrange.hpp>
0013 // Qt
0014 #include <QTest>
0015 
0016 namespace Okteta {
0017 
0018 // local variables
0019 static constexpr LinePosition Pos1 = 15;
0020 static constexpr LinePosition Pos2 = 25;
0021 static constexpr Line Line1 = 10;
0022 static constexpr LineSize LineCount = 10;
0023 static constexpr Line Line2 = Line1 + LineCount - 1;
0024 static constexpr Coord Start(Pos1, Line1);
0025 static constexpr Coord End(Pos2, Line2);
0026 
0027 static constexpr Size BufferWidth = Pos2 + 5;
0028 
0029 void CoordRangeTest::testConstructorByCoords()
0030 {
0031     CoordRange coordRange(Start, End);
0032     QCOMPARE(coordRange.start(), Start);
0033     QCOMPARE(coordRange.end(),   End);
0034     QCOMPARE(coordRange.lines(), LineCount);
0035     QVERIFY(coordRange.isValid());
0036 }
0037 
0038 void CoordRangeTest::testConstructorByPosLines()
0039 {
0040     LinePositionRange positions(Pos1, Pos2);
0041     LineRange lines(Line1, Line2);
0042 
0043     CoordRange coordRange(positions, lines);
0044     QCOMPARE(coordRange.start(), Coord(Pos1, Line1));
0045     QCOMPARE(coordRange.end(),   Coord(Pos2, Line2));
0046     QCOMPARE(coordRange.lines(), LineCount);
0047     QVERIFY(coordRange.isValid());
0048 }
0049 
0050 void CoordRangeTest::testSimpleConstructor()
0051 {
0052     CoordRange coordRange;
0053     QVERIFY(coordRange.isEmpty());
0054     QVERIFY(!coordRange.isValid());
0055 }
0056 
0057 void CoordRangeTest::testSetGetStart()
0058 {
0059     CoordRange coordRange;
0060     coordRange.setStart(Start);
0061     QCOMPARE(coordRange.start(), Start);
0062 }
0063 
0064 void CoordRangeTest::testSetGetEnd()
0065 {
0066     CoordRange coordRange;
0067     coordRange.setEnd(End);
0068     QCOMPARE(coordRange.end(), End);
0069 }
0070 
0071 void CoordRangeTest::testIsEmpty()
0072 {
0073     CoordRange coordRange(Start, End);
0074     QVERIFY(!coordRange.isEmpty());
0075     coordRange.unset();
0076     QVERIFY(coordRange.isEmpty());
0077 }
0078 
0079 void CoordRangeTest::testCompare()
0080 {
0081     CoordRange coordRange(Start, End);
0082     // same
0083     CoordRange otherCoordRange(Start, End);
0084     QVERIFY(coordRange == otherCoordRange);
0085     // different start
0086     otherCoordRange.set(Coord(Pos1 + 1, Line1), End);
0087     QVERIFY(!(coordRange == otherCoordRange));
0088     // different end
0089     otherCoordRange.set(Start, Coord(Pos2 + 1, Line2));
0090     QVERIFY(!(coordRange == otherCoordRange));
0091 }
0092 
0093 void CoordRangeTest::testIncludes()
0094 {
0095     CoordRange coordRange(Start, End);
0096     // at start
0097     Coord coord = coordRange.start();
0098     QVERIFY(coordRange.includes(coord));
0099     // before start
0100     coord.goLeft();
0101     QVERIFY(!coordRange.includes(coord));
0102     // at end
0103     coord = coordRange.end();
0104     QVERIFY(coordRange.includes(coord));
0105     // behind end
0106     coord.goRight();
0107     QVERIFY(!coordRange.includes(coord));
0108 }
0109 
0110 void CoordRangeTest::testIncludesLine()
0111 {
0112     CoordRange coordRange(Start, End);
0113     // at start
0114     Line L = coordRange.start().line();
0115     QVERIFY(coordRange.includesLine(L));
0116     // before start
0117     --L;
0118     QVERIFY(!coordRange.includesLine(L));
0119     // at end
0120     L = coordRange.end().line();
0121     QVERIFY(coordRange.includesLine(L));
0122     // behind end
0123     ++L;
0124     QVERIFY(!coordRange.includesLine(L));
0125 }
0126 
0127 void CoordRangeTest::testWidth()
0128 {
0129     CoordRange coordRange(Start, End);
0130     const Size width = BufferWidth * (LineCount - 1) - Start.pos() + End.pos() + 1;
0131     QCOMPARE(coordRange.width(BufferWidth), width);
0132 }
0133 
0134 /*
0135 
0136 void CoordRangeTest::testAdaptToChange()
0137 {
0138     // adaptToChange, same length, behind
0139     CoordRange coordRange( Start, End );
0140     CoordRange otherCoordRange( coordRange );
0141     coordRange.adaptToChange( End+1, Width, Width );
0142     QCOMPARE( coordRange, otherCoordRange );
0143 
0144     // adaptToChange, same length, before
0145     coordRange.set( Start, End );
0146     otherCoordRange.set( coordRange );
0147     coordRange.adaptToChange( Start-2, 1, 1 );
0148     QCOMPARE( coordRange, otherCoordRange );
0149 
0150     // adaptToChange, same length, -1,-1
0151     coordRange.set( Start-1, End-1 );
0152     otherCoordRange.set( Start-1, Start-1 );
0153     coordRange.adaptToChange( Start, Width, Width );
0154     QCOMPARE( coordRange, otherCoordRange );
0155 
0156     // adaptToChange, same length, -1,0
0157     coordRange.set( Start-1, End );
0158     otherCoordRange.set( coordRange );
0159     coordRange.adaptToChange( Start, Width, Width );
0160     QCOMPARE( coordRange, otherCoordRange );
0161 
0162     // adaptToChange, same length, -1,+1
0163     coordRange.set( Start-1, End+1 );
0164     otherCoordRange.set( coordRange );
0165     coordRange.adaptToChange( Start, Width, Width );
0166     QCOMPARE( coordRange, otherCoordRange );
0167 
0168     // adaptToChange, same length, 0,-1
0169     coordRange.set( Start, End-1 );
0170     otherCoordRange.set( coordRange );
0171     coordRange.adaptToChange( Start, Width, Width );
0172     QVERIFY( !coordRange.isValid() );
0173 
0174     // adaptToChange, same length, 0,0
0175     coordRange.set( Start, End );
0176     otherCoordRange.set( coordRange );
0177     coordRange.adaptToChange( Start, Width, Width );
0178     QCOMPARE( coordRange, otherCoordRange );
0179 
0180     // adaptToChange, same length, 0,+1
0181     coordRange.set( Start, End+1 );
0182     otherCoordRange.set( coordRange );
0183     coordRange.adaptToChange( Start, Width, Width );
0184     QCOMPARE( coordRange, otherCoordRange );
0185 
0186     // adaptToChange, same length, +1,-1
0187     coordRange.set( Start+1, End-1 );
0188     coordRange.adaptToChange( Start, Width, Width );
0189     QVERIFY( !coordRange.isValid() );
0190 
0191     // adaptToChange, same length, +1,0
0192     coordRange.set( Start+1, End );
0193     coordRange.adaptToChange( Start, Width, Width );
0194     QVERIFY( !coordRange.isValid() );
0195 
0196     // adaptToChange, same length, +1,+1
0197     coordRange.set( Start+1, End+1 );
0198     otherCoordRange.set( End+1, End+1 );
0199     coordRange.adaptToChange( Start, Width, Width );
0200     QCOMPARE( coordRange, otherCoordRange );
0201 
0202 
0203     // adaptToChange, less length, behind
0204     coordRange.set( Start, End );
0205     otherCoordRange.set( coordRange );
0206     coordRange.adaptToChange( End+1, Width, Width-2 );
0207     QCOMPARE( coordRange, otherCoordRange );
0208 
0209     // adaptToChange, less length, before
0210     coordRange.set( Start, End );
0211     otherCoordRange.set( Start-2, End-2 );
0212     coordRange.adaptToChange( Start-Width, Width, Width-2 );
0213     QCOMPARE( coordRange, otherCoordRange );
0214 
0215     // adaptToChange, less length, -1,-1
0216     coordRange.set( Start-1, End-1 );
0217     otherCoordRange.set( Start-1, Start-1 );
0218     coordRange.adaptToChange( Start, Width, Width-2 );
0219     QCOMPARE( coordRange, otherCoordRange );
0220 
0221     // adaptToChange, less length, -1,0
0222     coordRange.set( Start-1, End );
0223     otherCoordRange.set( Start-1, End-2 );
0224     coordRange.adaptToChange( Start, Width, Width-2 );
0225     QCOMPARE( coordRange, otherCoordRange );
0226 
0227     // adaptToChange, less length, -1,+1
0228     coordRange.set( Start-1, End+1 );
0229     otherCoordRange.set( Start-1, End-1 );
0230     coordRange.adaptToChange( Start, Width, Width-2 );
0231     QCOMPARE( coordRange, otherCoordRange );
0232 
0233     // adaptToChange, less length, 0,-1
0234     coordRange.set( Start, End-1 );
0235     coordRange.adaptToChange( Start, Width, Width-2 );
0236     QVERIFY( !coordRange.isValid() );
0237 
0238     // adaptToChange, less length, 0,0
0239     coordRange.set( Start, End );
0240     otherCoordRange.set( Start, End-2 );
0241     coordRange.adaptToChange( Start, Width, Width-2 );
0242     QCOMPARE( coordRange, otherCoordRange );
0243 
0244     // adaptToChange, less length, 0,+1
0245     coordRange.set( Start, End+1 );
0246     otherCoordRange.set( Start, End-1 );
0247     coordRange.adaptToChange( Start, Width, Width-2 );
0248     QCOMPARE( coordRange, otherCoordRange );
0249 
0250     // adaptToChange, less length, +1,-1
0251     coordRange.set( Start+1, End-1 );
0252     coordRange.adaptToChange( Start, Width, Width-2 );
0253     QVERIFY( !coordRange.isValid() );
0254 
0255     // adaptToChange, less length, +1,0
0256     coordRange.set( Start+1, End );
0257     coordRange.adaptToChange( Start, Width, Width-2 );
0258     QVERIFY( !coordRange.isValid() );
0259 
0260     // adaptToChange, less length, +1,+1
0261     coordRange.set( Start+1, End+1 );
0262     otherCoordRange.set( End-1, End-1 );
0263     coordRange.adaptToChange( Start, Width, Width-2 );
0264     QCOMPARE( coordRange, otherCoordRange );
0265 
0266 
0267     // adaptToChange, greater length, behind
0268     coordRange.set( Start, End );
0269     otherCoordRange.set( coordRange );
0270     coordRange.adaptToChange( End+1, Width, Width+2 );
0271     QCOMPARE( coordRange, otherCoordRange );
0272 
0273     // adaptToChange, greater length, before
0274     coordRange.set( Start, End );
0275     otherCoordRange.set( Start+2, End+2 );
0276     coordRange.adaptToChange( Start-Width, Width, Width+2 );
0277     QCOMPARE( coordRange, otherCoordRange );
0278 
0279     // adaptToChange, greater length, -1,-1
0280     coordRange.set( Start-1, End-1 );
0281     otherCoordRange.set( Start-1, Start-1 );
0282     coordRange.adaptToChange( Start, Width, Width+2 );
0283     QCOMPARE( coordRange, otherCoordRange );
0284 
0285     // adaptToChange, greater length, -1,0
0286     coordRange.set( Start-1, End );
0287     otherCoordRange.set( Start-1, End+2 );
0288     coordRange.adaptToChange( Start, Width, Width+2 );
0289     QCOMPARE( coordRange, otherCoordRange );
0290 
0291     // adaptToChange, greater length, -1,+1
0292     coordRange.set( Start-1, End+1 );
0293     otherCoordRange.set( Start-1, End+3 );
0294     coordRange.adaptToChange( Start, Width, Width+2 );
0295     QCOMPARE( coordRange, otherCoordRange );
0296 
0297     // adaptToChange, greater length, 0,-1
0298     coordRange.set( Start, End-1 );
0299     coordRange.adaptToChange( Start, Width, Width+2 );
0300     QVERIFY( !coordRange.isValid() );
0301 
0302     // adaptToChange, greater length, 0,0
0303     coordRange.set( Start, End );
0304     otherCoordRange.set( Start, End+2 );
0305     coordRange.adaptToChange( Start, Width, Width+2 );
0306     QCOMPARE( coordRange, otherCoordRange );
0307 
0308     // adaptToChange, greater length, 0,+1
0309     coordRange.set( Start, End+1 );
0310     otherCoordRange.set( Start, End+3 );
0311     coordRange.adaptToChange( Start, Width, Width+2 );
0312     QCOMPARE( coordRange, otherCoordRange );
0313 
0314     // adaptToChange, greater length, +1,-1
0315     coordRange.set( Start+1, End-1 );
0316     coordRange.adaptToChange( Start, Width, Width+2 );
0317     QVERIFY( !coordRange.isValid() );
0318 
0319     // adaptToChange, greater length, +1,0
0320     coordRange.set( Start+1, End );
0321     coordRange.adaptToChange( Start, Width, Width+2 );
0322     QVERIFY( !coordRange.isValid() );
0323 
0324     // adaptToChange, greater length, +1,+1
0325     coordRange.set( Start+1, End+1 );
0326     otherCoordRange.set( End+3, End+3 );
0327     coordRange.adaptToChange( Start, Width, Width+2 );
0328     QCOMPARE( coordRange, otherCoordRange );
0329 
0330 
0331     // adaptToChange, insert, behind
0332     coordRange.set( Start-1, Start-1 );
0333     otherCoordRange.set( Start-1, End );
0334     coordRange.adaptToChange( Start, 0, Width );
0335     QCOMPARE( coordRange, otherCoordRange );
0336 
0337     // adaptToChange, insert, middle
0338     coordRange.set( Start-1, Start );
0339     otherCoordRange.set( Start-1, End+1 );
0340     coordRange.adaptToChange( Start, 0, Width );
0341     QCOMPARE( coordRange, otherCoordRange );
0342 
0343     // adaptToChange, insert, before
0344     coordRange.set( Start, Start );
0345     otherCoordRange.set( End+1, End+1 );
0346     coordRange.adaptToChange( Start, 0, Width );
0347     QCOMPARE( coordRange, otherCoordRange );
0348 }
0349 
0350 void CoordRangeTest::testStartForInclude()
0351 {
0352     // testStartForInclude, same length, start at start
0353     const CoordRange coordRange( Start, End );
0354     CoordRange otherCoordRange( coordRange );
0355     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0356 
0357     // testStartForInclude, same length, start before start
0358     otherCoordRange.moveBy( -1 );
0359     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0360 
0361     // testStartForInclude, same length, end behind end
0362     otherCoordRange.moveBy( 2 );
0363     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0364 
0365     // testStartForInclude, smaller length, start at start
0366     otherCoordRange.set( Start, End-1 );
0367     int Diff = coordRange.width() - otherCoordRange.width();
0368     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0369 
0370     // testStartForInclude, smaller length, start before start
0371     otherCoordRange.moveBy( -1 );
0372     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0373 
0374     // testStartForInclude, smaller length, end behind end
0375     otherCoordRange.moveBy( 2 );
0376     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start()-Diff );
0377 
0378 *    // undefined in startForInclude
0379     // testStartForInclude, greater length, start at start
0380     otherCoordRange.set( Start, End+1 );
0381     Diff = coordRange.width() - otherCoordRange.width();
0382     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0383 
0384     // testStartForInclude, smaller length, start before start
0385     otherCoordRange.moveBy( -1 );
0386     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start() );
0387 
0388     // testStartForInclude, smaller length, end behind end
0389     otherCoordRange.moveBy( 2 );
0390     QCOMPARE( coordRange.startForInclude(otherCoordRange), otherCoordRange.start()-Diff );
0391 *
0392 }
0393 
0394 
0395 void CoordRangeTest::testIsJoinable()
0396 {
0397     // testStartForInclude, same length, start at start
0398     const CoordRange coordRange( Start, End );
0399     CoordRange otherCoordRange( coordRange );
0400     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0401 
0402     // adaptToChange, insert, before
0403     otherCoordRange.set( End+1, End+Width );
0404     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0405 
0406     // Overlapping, right shifted
0407     otherCoordRange.set( Start+1, End+1 );
0408     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0409 
0410     // Overlapping, left shifted
0411     otherCoordRange.set( Start-1, End-1 );
0412     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0413 
0414     // Overlapping, 1 includes 2
0415     otherCoordRange.set( Start+1, End-1 );
0416     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0417 
0418     // Overlapping, 2 includes 1
0419     otherCoordRange.set( Start-1, End+1 );
0420     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0421 
0422     // Overlapping, identic
0423     otherCoordRange.set( coordRange );
0424     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0425 
0426     // Coupled, first, then second
0427     otherCoordRange.set( End+1, End+Width );
0428     QVERIFY( coordRange.isJoinable(otherCoordRange) );
0429 
0430     // Coupled, second, then first
0431     QVERIFY( otherCoordRange.isJoinable(coordRange) );
0432 
0433     // NonOverlapping, first, then second
0434     otherCoordRange.set( End+2, End+Width+1 );
0435     QVERIFY( !coordRange.isJoinable(otherCoordRange) );
0436 
0437     // NonOverlapping, second, then first
0438     QVERIFY( !otherCoordRange.isJoinable(coordRange) );
0439 }
0440 */
0441 
0442 }
0443 
0444 QTEST_MAIN(Okteta::CoordRangeTest)
0445 
0446 #include "moc_coordrangetest.cpp"