tests/auto/qmediatimerange/tst_qmediatimerange.cpp
changeset 0 876b1a06bc25
equal deleted inserted replaced
-1:000000000000 0:876b1a06bc25
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the Qt Mobility Components.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 
       
    42 #include <QtTest/QtTest>
       
    43 #include <QtCore/qdebug.h>
       
    44 
       
    45 #include <qmediatimerange.h>
       
    46 
       
    47 QT_USE_NAMESPACE
       
    48 
       
    49 class tst_QMediaTimeRange: public QObject
       
    50 {
       
    51     Q_OBJECT
       
    52 
       
    53 public slots:
       
    54 
       
    55 private slots:
       
    56     void testCtor();
       
    57     void testGetters();
       
    58     void testAssignment();
       
    59     void testNormalize();
       
    60     void testTranslated();
       
    61     void testEarliestLatest();
       
    62     void testContains();
       
    63     void testAddInterval();
       
    64     void testAddTimeRange();
       
    65     void testRemoveInterval();
       
    66     void testRemoveTimeRange();
       
    67     void testClear();
       
    68     void testComparisons();
       
    69     void testArithmetic();
       
    70 };
       
    71 
       
    72 void tst_QMediaTimeRange::testCtor()
       
    73 {
       
    74     // Default Ctor
       
    75     QMediaTimeRange a;
       
    76     QVERIFY(a.isEmpty());
       
    77 
       
    78     // (qint, qint) Ctor
       
    79     QMediaTimeRange b(10, 20);
       
    80 
       
    81     QVERIFY(!b.isEmpty());
       
    82     QVERIFY(b.isContinuous());
       
    83     QVERIFY(b.earliestTime() == 10);
       
    84     QVERIFY(b.latestTime() == 20);
       
    85 
       
    86     // Interval Ctor
       
    87     QMediaTimeRange c(QMediaTimeInterval(30, 40));
       
    88 
       
    89     QVERIFY(!c.isEmpty());
       
    90     QVERIFY(c.isContinuous());
       
    91     QVERIFY(c.earliestTime() == 30);
       
    92     QVERIFY(c.latestTime() == 40);
       
    93 
       
    94     // Abnormal Interval Ctor
       
    95     QMediaTimeRange d(QMediaTimeInterval(20, 10));
       
    96 
       
    97     QVERIFY(d.isEmpty());
       
    98 
       
    99     // Copy Ctor
       
   100     QMediaTimeRange e(b);
       
   101 
       
   102     QVERIFY(!e.isEmpty());
       
   103     QVERIFY(e.isContinuous());
       
   104     QVERIFY(e.earliestTime() == 10);
       
   105     QVERIFY(e.latestTime() == 20);
       
   106 }
       
   107 
       
   108 void tst_QMediaTimeRange::testGetters()
       
   109 {
       
   110     QMediaTimeRange x;
       
   111 
       
   112     // isEmpty
       
   113     QVERIFY(x.isEmpty());
       
   114 
       
   115     x.addInterval(10, 20);
       
   116 
       
   117     // isEmpty + isContinuous
       
   118     QVERIFY(!x.isEmpty());
       
   119     QVERIFY(x.isContinuous());
       
   120 
       
   121     x.addInterval(30, 40);
       
   122 
       
   123     // isEmpty + isContinuous + intervals + start + end
       
   124     QVERIFY(!x.isEmpty());
       
   125     QVERIFY(!x.isContinuous());
       
   126     QVERIFY(x.intervals().count() == 2);
       
   127     QVERIFY(x.intervals()[0].start() == 10);
       
   128     QVERIFY(x.intervals()[0].end() == 20);
       
   129     QVERIFY(x.intervals()[1].start() == 30);
       
   130     QVERIFY(x.intervals()[1].end() == 40);
       
   131 }
       
   132 
       
   133 void tst_QMediaTimeRange::testAssignment()
       
   134 {
       
   135     QMediaTimeRange x;
       
   136 
       
   137     // Range Assignment
       
   138     x = QMediaTimeRange(10, 20);
       
   139 
       
   140     QVERIFY(!x.isEmpty());
       
   141     QVERIFY(x.isContinuous());
       
   142     QVERIFY(x.earliestTime() == 10);
       
   143     QVERIFY(x.latestTime() == 20);
       
   144 
       
   145     // Interval Assignment
       
   146     x = QMediaTimeInterval(30, 40);
       
   147 
       
   148     QVERIFY(!x.isEmpty());
       
   149     QVERIFY(x.isContinuous());
       
   150     QVERIFY(x.earliestTime() == 30);
       
   151     QVERIFY(x.latestTime() == 40);
       
   152 
       
   153     // Shared Data Check
       
   154     QMediaTimeRange y;
       
   155 
       
   156     y = x;
       
   157     y.addInterval(10, 20);
       
   158 
       
   159     QVERIFY(!x.isEmpty());
       
   160     QVERIFY(x.isContinuous());
       
   161     QVERIFY(x.earliestTime() == 30);
       
   162     QVERIFY(x.latestTime() == 40);
       
   163 }
       
   164 
       
   165 void tst_QMediaTimeRange::testNormalize()
       
   166 {
       
   167     QMediaTimeInterval x(20, 10);
       
   168 
       
   169     QVERIFY(!x.isNormal());
       
   170 
       
   171     x = x.normalized();
       
   172 
       
   173     QVERIFY(x.isNormal());
       
   174     QVERIFY(x.start() == 10);
       
   175     QVERIFY(x.end() == 20);
       
   176 }
       
   177 
       
   178 void tst_QMediaTimeRange::testTranslated()
       
   179 {
       
   180     QMediaTimeInterval x(10, 20);
       
   181     x = x.translated(10);
       
   182 
       
   183     QVERIFY(x.start() == 20);
       
   184     QVERIFY(x.end() == 30);
       
   185 }
       
   186 
       
   187 void tst_QMediaTimeRange::testEarliestLatest()
       
   188 {
       
   189     // Test over a single interval
       
   190     QMediaTimeRange x(30, 40);
       
   191 
       
   192     QVERIFY(x.earliestTime() == 30);
       
   193     QVERIFY(x.latestTime() == 40);
       
   194 
       
   195     // Test over multiple intervals
       
   196     x.addInterval(50, 60);
       
   197 
       
   198     QVERIFY(x.earliestTime() == 30);
       
   199     QVERIFY(x.latestTime() == 60);
       
   200 }
       
   201 
       
   202 void tst_QMediaTimeRange::testContains()
       
   203 {    
       
   204     // Test over a single interval
       
   205     QMediaTimeRange x(10, 20);
       
   206 
       
   207     QVERIFY(!x.isEmpty());
       
   208     QVERIFY(x.isContinuous());
       
   209     QVERIFY(x.contains(15));
       
   210     QVERIFY(x.contains(10));
       
   211     QVERIFY(x.contains(20));
       
   212     QVERIFY(!x.contains(25));
       
   213 
       
   214     // Test over multiple intervals
       
   215     x.addInterval(40, 50);
       
   216     
       
   217     QVERIFY(!x.isEmpty());
       
   218     QVERIFY(!x.isContinuous());
       
   219     QVERIFY(x.contains(15));
       
   220     QVERIFY(x.contains(45));
       
   221     QVERIFY(!x.contains(30));
       
   222 
       
   223     // Test over a concrete interval
       
   224     QMediaTimeInterval y(10, 20);
       
   225     QVERIFY(y.contains(15));
       
   226     QVERIFY(y.contains(10));
       
   227     QVERIFY(y.contains(20));
       
   228     QVERIFY(!y.contains(25));
       
   229 }
       
   230 
       
   231 void tst_QMediaTimeRange::testAddInterval()
       
   232 {
       
   233     // All intervals Overlap
       
   234     QMediaTimeRange x;
       
   235     x.addInterval(10, 40);
       
   236     x.addInterval(30, 50);
       
   237     x.addInterval(20, 60);
       
   238 
       
   239     QVERIFY(!x.isEmpty());
       
   240     QVERIFY(x.isContinuous());
       
   241     QVERIFY(x.earliestTime() == 10);
       
   242     QVERIFY(x.latestTime() == 60);
       
   243 
       
   244     // 1 adjacent interval, 1 encompassed interval
       
   245     x = QMediaTimeRange();
       
   246     x.addInterval(10, 40);
       
   247     x.addInterval(20, 30);
       
   248     x.addInterval(41, 50);
       
   249 
       
   250     QVERIFY(!x.isEmpty());
       
   251     QVERIFY(x.isContinuous());
       
   252     QVERIFY(x.earliestTime() == 10);
       
   253     QVERIFY(x.latestTime() == 50);
       
   254 
       
   255     // 1 overlapping interval, 1 disjoint interval
       
   256     x = QMediaTimeRange();
       
   257     x.addInterval(10, 30);
       
   258     x.addInterval(20, 40);
       
   259     x.addInterval(50, 60);
       
   260 
       
   261     QVERIFY(!x.isEmpty());
       
   262     QVERIFY(!x.isContinuous());
       
   263     QVERIFY(x.intervals().count() == 2);
       
   264     QVERIFY(x.intervals()[0].start() == 10);
       
   265     QVERIFY(x.intervals()[0].end() == 40);
       
   266     QVERIFY(x.intervals()[1].start() == 50);
       
   267     QVERIFY(x.intervals()[1].end() == 60);
       
   268 
       
   269     // Identical Add
       
   270     x = QMediaTimeRange();
       
   271     x.addInterval(10, 20);
       
   272     x.addInterval(10, 20);
       
   273 
       
   274     QVERIFY(!x.isEmpty());
       
   275     QVERIFY(x.isContinuous());
       
   276     QVERIFY(x.earliestTime() == 10);
       
   277     QVERIFY(x.latestTime() == 20);
       
   278 
       
   279     // Multi-Merge
       
   280     x = QMediaTimeRange();
       
   281     x.addInterval(10, 20);
       
   282     x.addInterval(30, 40);
       
   283     x.addInterval(50, 60);
       
   284     x.addInterval(15, 55);
       
   285 
       
   286     QVERIFY(!x.isEmpty());
       
   287     QVERIFY(x.isContinuous());
       
   288     QVERIFY(x.earliestTime() == 10);
       
   289     QVERIFY(x.latestTime() == 60);
       
   290 
       
   291     // Interval Parameter - All intervals Overlap
       
   292     x = QMediaTimeRange();
       
   293     x.addInterval(QMediaTimeInterval(10, 40));
       
   294     x.addInterval(QMediaTimeInterval(30, 50));
       
   295     x.addInterval(QMediaTimeInterval(20, 60));
       
   296 
       
   297     QVERIFY(!x.isEmpty());
       
   298     QVERIFY(x.isContinuous());
       
   299     QVERIFY(x.earliestTime() == 10);
       
   300     QVERIFY(x.latestTime() == 60);
       
   301 
       
   302     // Interval Parameter - Abnormal Interval
       
   303     x = QMediaTimeRange();
       
   304     x.addInterval(QMediaTimeInterval(20, 10));
       
   305 
       
   306     QVERIFY(x.isEmpty());
       
   307 }
       
   308 
       
   309 void tst_QMediaTimeRange::testAddTimeRange()
       
   310 {
       
   311     // Add Time Range uses Add Interval internally,
       
   312     // so in this test the focus is on combinations of number
       
   313     // of intervals added, rather than the different types of
       
   314     // merges which can occur.
       
   315     QMediaTimeRange a, b;
       
   316 
       
   317     // Add Single into Single
       
   318     a = QMediaTimeRange(10, 30);
       
   319     b = QMediaTimeRange(20, 40);
       
   320 
       
   321     b.addTimeRange(a);
       
   322 
       
   323     QVERIFY(!b.isEmpty());
       
   324     QVERIFY(b.isContinuous());
       
   325     QVERIFY(b.earliestTime() == 10);
       
   326     QVERIFY(b.latestTime() == 40);
       
   327 
       
   328     // Add Multiple into Single
       
   329     a = QMediaTimeRange();
       
   330     a.addInterval(10, 30);
       
   331     a.addInterval(40, 60);
       
   332 
       
   333     b = QMediaTimeRange(20, 50);
       
   334 
       
   335     b.addTimeRange(a);
       
   336 
       
   337     QVERIFY(!b.isEmpty());
       
   338     QVERIFY(b.isContinuous());
       
   339     QVERIFY(b.earliestTime() == 10);
       
   340     QVERIFY(b.latestTime() == 60);
       
   341 
       
   342     // Add Single into Multiple
       
   343     a = QMediaTimeRange(20, 50);
       
   344 
       
   345     b = QMediaTimeRange();
       
   346     b.addInterval(10, 30);
       
   347     b.addInterval(40, 60);
       
   348 
       
   349     b.addTimeRange(a);
       
   350 
       
   351     QVERIFY(!b.isEmpty());
       
   352     QVERIFY(b.isContinuous());
       
   353     QVERIFY(b.earliestTime() == 10);
       
   354     QVERIFY(b.latestTime() == 60);
       
   355 
       
   356     // Add Multiple into Multiple
       
   357     a = QMediaTimeRange();
       
   358     a.addInterval(10, 30);
       
   359     a.addInterval(40, 70);
       
   360     a.addInterval(80, 100);
       
   361 
       
   362     b = QMediaTimeRange();
       
   363     b.addInterval(20, 50);
       
   364     b.addInterval(60, 90);
       
   365 
       
   366     b.addTimeRange(a);
       
   367 
       
   368     QVERIFY(!b.isEmpty());
       
   369     QVERIFY(b.isContinuous());
       
   370     QVERIFY(b.earliestTime() == 10);
       
   371     QVERIFY(b.latestTime() == 100);
       
   372 
       
   373     // Add Nothing to Single
       
   374     a = QMediaTimeRange();
       
   375     b = QMediaTimeRange(10, 20);
       
   376 
       
   377     b.addTimeRange(a);
       
   378 
       
   379     QVERIFY(!b.isEmpty());
       
   380     QVERIFY(b.isContinuous());
       
   381     QVERIFY(b.earliestTime() == 10);
       
   382     QVERIFY(b.latestTime() == 20);
       
   383 
       
   384     // Add Single to Nothing
       
   385     a = QMediaTimeRange(10, 20);
       
   386     b = QMediaTimeRange();
       
   387 
       
   388     b.addTimeRange(a);
       
   389 
       
   390     QVERIFY(!b.isEmpty());
       
   391     QVERIFY(b.isContinuous());
       
   392     QVERIFY(b.earliestTime() == 10);
       
   393     QVERIFY(b.latestTime() == 20);
       
   394 
       
   395     // Add Nothing to Nothing
       
   396     a = QMediaTimeRange();
       
   397     b = QMediaTimeRange();
       
   398 
       
   399     b.addTimeRange(a);
       
   400 
       
   401     QVERIFY(b.isEmpty());
       
   402 }
       
   403 
       
   404 void tst_QMediaTimeRange::testRemoveInterval()
       
   405 {
       
   406     // Removing an interval, causing a split
       
   407     QMediaTimeRange x;
       
   408     x.addInterval(10, 50);
       
   409     x.removeInterval(20, 40);
       
   410 
       
   411     QVERIFY(!x.isEmpty());
       
   412     QVERIFY(!x.isContinuous());
       
   413     QVERIFY(x.intervals().count() == 2);
       
   414     QVERIFY(x.intervals()[0].start() == 10);
       
   415     QVERIFY(x.intervals()[0].end() == 19);
       
   416     QVERIFY(x.intervals()[1].start() == 41);
       
   417     QVERIFY(x.intervals()[1].end() == 50);
       
   418 
       
   419     // Removing an interval, causing a deletion
       
   420     x = QMediaTimeRange();
       
   421     x.addInterval(20, 30);
       
   422     x.removeInterval(10, 40);
       
   423 
       
   424     QVERIFY(x.isEmpty());
       
   425 
       
   426     // Removing an interval, causing a tail trim
       
   427     x = QMediaTimeRange();
       
   428     x.addInterval(20, 40);
       
   429     x.removeInterval(30, 50);
       
   430 
       
   431     QVERIFY(!x.isEmpty());
       
   432     QVERIFY(x.isContinuous());
       
   433     QVERIFY(x.earliestTime() == 20);
       
   434     QVERIFY(x.latestTime() == 29);
       
   435 
       
   436     // Removing an interval, causing a head trim
       
   437     x = QMediaTimeRange();
       
   438     x.addInterval(20, 40);
       
   439     x.removeInterval(10, 30);
       
   440 
       
   441     QVERIFY(!x.isEmpty());
       
   442     QVERIFY(x.isContinuous());
       
   443     QVERIFY(x.earliestTime() == 31);
       
   444     QVERIFY(x.latestTime() == 40);
       
   445 
       
   446     // Identical Remove
       
   447     x = QMediaTimeRange();
       
   448     x.addInterval(10, 20);
       
   449     x.removeInterval(10, 20);
       
   450 
       
   451     QVERIFY(x.isEmpty());
       
   452 
       
   453     // Multi-Trim
       
   454     x = QMediaTimeRange();
       
   455     x.addInterval(10, 20);
       
   456     x.addInterval(30, 40);
       
   457     x.removeInterval(15, 35);
       
   458 
       
   459     QVERIFY(!x.isEmpty());
       
   460     QVERIFY(!x.isContinuous());
       
   461     QVERIFY(x.intervals().count() == 2);
       
   462     QVERIFY(x.intervals()[0].start() == 10);
       
   463     QVERIFY(x.intervals()[0].end() == 14);
       
   464     QVERIFY(x.intervals()[1].start() == 36);
       
   465     QVERIFY(x.intervals()[1].end() == 40);
       
   466 
       
   467     // Multi-Delete
       
   468     x = QMediaTimeRange();
       
   469     x.addInterval(10, 20);
       
   470     x.addInterval(30, 40);
       
   471     x.addInterval(50, 60);
       
   472     x.removeInterval(10, 60);
       
   473 
       
   474     QVERIFY(x.isEmpty());
       
   475 
       
   476     // Interval Parameter - Removing an interval, causing a split
       
   477     x = QMediaTimeRange();
       
   478     x.addInterval(10, 50);
       
   479     x.removeInterval(QMediaTimeInterval(20, 40));
       
   480 
       
   481     QVERIFY(!x.isEmpty());
       
   482     QVERIFY(!x.isContinuous());
       
   483     QVERIFY(x.intervals().count() == 2);
       
   484     QVERIFY(x.intervals()[0].start() == 10);
       
   485     QVERIFY(x.intervals()[0].end() == 19);
       
   486     QVERIFY(x.intervals()[1].start() == 41);
       
   487     QVERIFY(x.intervals()[1].end() == 50);
       
   488 
       
   489     // Interval Parameter - Abnormal Interval
       
   490     x = QMediaTimeRange();
       
   491     x.addInterval(10, 40);
       
   492     x.removeInterval(QMediaTimeInterval(30, 20));
       
   493 
       
   494     QVERIFY(!x.isEmpty());
       
   495     QVERIFY(x.isContinuous());
       
   496     QVERIFY(x.earliestTime() == 10);
       
   497     QVERIFY(x.latestTime() == 40);
       
   498 }
       
   499 
       
   500 void tst_QMediaTimeRange::testRemoveTimeRange()
       
   501 {
       
   502     // Remove Time Range uses Remove Interval internally,
       
   503     // so in this test the focus is on combinations of number
       
   504     // of intervals removed, rather than the different types of
       
   505     // deletions which can occur.
       
   506     QMediaTimeRange a, b;
       
   507 
       
   508     // Remove Single from Single
       
   509     a = QMediaTimeRange(10, 30);
       
   510     b = QMediaTimeRange(20, 40);
       
   511 
       
   512     b.removeTimeRange(a);
       
   513 
       
   514     QVERIFY(!b.isEmpty());
       
   515     QVERIFY(b.isContinuous());
       
   516     QVERIFY(b.earliestTime() == 31);
       
   517     QVERIFY(b.latestTime() == 40);
       
   518 
       
   519     // Remove Multiple from Single
       
   520     a = QMediaTimeRange();
       
   521     a.addInterval(10, 30);
       
   522     a.addInterval(40, 60);
       
   523 
       
   524     b = QMediaTimeRange(20, 50);
       
   525 
       
   526     b.removeTimeRange(a);
       
   527 
       
   528     QVERIFY(!b.isEmpty());
       
   529     QVERIFY(b.isContinuous());
       
   530     QVERIFY(b.earliestTime() == 31);
       
   531     QVERIFY(b.latestTime() == 39);
       
   532 
       
   533     // Remove Single from Multiple
       
   534     a = QMediaTimeRange(20, 50);
       
   535 
       
   536     b = QMediaTimeRange();
       
   537     b.addInterval(10, 30);
       
   538     b.addInterval(40, 60);
       
   539 
       
   540     b.removeTimeRange(a);
       
   541 
       
   542     QVERIFY(!b.isEmpty());
       
   543     QVERIFY(!b.isContinuous());
       
   544     QVERIFY(b.intervals().count() == 2);
       
   545     QVERIFY(b.intervals()[0].start() == 10);
       
   546     QVERIFY(b.intervals()[0].end() == 19);
       
   547     QVERIFY(b.intervals()[1].start() == 51);
       
   548     QVERIFY(b.intervals()[1].end() == 60);
       
   549 
       
   550     // Remove Multiple from Multiple
       
   551     a = QMediaTimeRange();
       
   552     a.addInterval(20, 50);
       
   553     a.addInterval(50, 90);
       
   554 
       
   555 
       
   556     b = QMediaTimeRange();
       
   557     b.addInterval(10, 30);
       
   558     b.addInterval(40, 70);
       
   559     b.addInterval(80, 100);
       
   560 
       
   561     b.removeTimeRange(a);
       
   562 
       
   563     QVERIFY(!b.isEmpty());
       
   564     QVERIFY(!b.isContinuous());
       
   565     QVERIFY(b.intervals().count() == 2);
       
   566     QVERIFY(b.intervals()[0].start() == 10);
       
   567     QVERIFY(b.intervals()[0].end() == 19);
       
   568     QVERIFY(b.intervals()[1].start() == 91);
       
   569     QVERIFY(b.intervals()[1].end() == 100);
       
   570 
       
   571     // Remove Nothing from Single
       
   572     a = QMediaTimeRange();
       
   573     b = QMediaTimeRange(10, 20);
       
   574 
       
   575     b.removeTimeRange(a);
       
   576 
       
   577     QVERIFY(!b.isEmpty());
       
   578     QVERIFY(b.isContinuous());
       
   579     QVERIFY(b.earliestTime() == 10);
       
   580     QVERIFY(b.latestTime() == 20);
       
   581 
       
   582     // Remove Single from Nothing
       
   583     a = QMediaTimeRange(10, 20);
       
   584     b = QMediaTimeRange();
       
   585 
       
   586     b.removeTimeRange(a);
       
   587 
       
   588     QVERIFY(b.isEmpty());
       
   589 
       
   590     // Remove Nothing from Nothing
       
   591     a = QMediaTimeRange();
       
   592     b = QMediaTimeRange();
       
   593 
       
   594     b.removeTimeRange(a);
       
   595 
       
   596     QVERIFY(b.isEmpty());
       
   597 }
       
   598 
       
   599 void tst_QMediaTimeRange::testClear()
       
   600 {
       
   601     QMediaTimeRange x;
       
   602 
       
   603     // Clear Nothing
       
   604     x.clear();
       
   605 
       
   606     QVERIFY(x.isEmpty());
       
   607 
       
   608     // Clear Single
       
   609     x = QMediaTimeRange(10, 20);
       
   610     x.clear();
       
   611 
       
   612     QVERIFY(x.isEmpty());
       
   613 
       
   614     // Clear Multiple
       
   615     x = QMediaTimeRange();
       
   616     x.addInterval(10, 20);
       
   617     x.addInterval(30, 40);
       
   618     x.clear();
       
   619 
       
   620     QVERIFY(x.isEmpty());
       
   621 }
       
   622 
       
   623 void tst_QMediaTimeRange::testComparisons()
       
   624 {
       
   625     // Interval equality
       
   626     QVERIFY(QMediaTimeInterval(10, 20) == QMediaTimeInterval(10, 20));
       
   627     QVERIFY(QMediaTimeInterval(10, 20) != QMediaTimeInterval(10, 30));
       
   628     QVERIFY(!(QMediaTimeInterval(10, 20) != QMediaTimeInterval(10, 20)));
       
   629     QVERIFY(!(QMediaTimeInterval(10, 20) == QMediaTimeInterval(10, 30)));
       
   630 
       
   631     // Time range equality - Single Interval
       
   632     QMediaTimeRange a(10, 20), b(20, 30), c(10, 20);
       
   633 
       
   634     QVERIFY(a == c);
       
   635     QVERIFY(!(a == b));
       
   636     QVERIFY(a != b);
       
   637     QVERIFY(!(a != c));
       
   638 
       
   639     // Time Range Equality - Multiple Intervals
       
   640     QMediaTimeRange x, y, z;
       
   641 
       
   642     x.addInterval(10, 20);
       
   643     x.addInterval(30, 40);
       
   644     x.addInterval(50, 60);
       
   645 
       
   646     y.addInterval(10, 20);
       
   647     y.addInterval(35, 45);
       
   648     y.addInterval(50, 60);
       
   649 
       
   650     z.addInterval(10, 20);
       
   651     z.addInterval(30, 40);
       
   652     z.addInterval(50, 60);
       
   653 
       
   654     QVERIFY(x == z);
       
   655     QVERIFY(!(x == y));
       
   656     QVERIFY(x != y);
       
   657     QVERIFY(!(x != z));
       
   658 }
       
   659 
       
   660 void tst_QMediaTimeRange::testArithmetic()
       
   661 {
       
   662     QMediaTimeRange a(10, 20), b(20, 30);
       
   663 
       
   664     // Test +=
       
   665     a += b;
       
   666 
       
   667     QVERIFY(a.isContinuous());
       
   668     QVERIFY(a.earliestTime() == 10);
       
   669     QVERIFY(a.latestTime() == 30);
       
   670 
       
   671     // Test -=
       
   672     a -= b;
       
   673 
       
   674     QVERIFY(a.isContinuous());
       
   675     QVERIFY(a.earliestTime() == 10);
       
   676     QVERIFY(a.latestTime() == 19);
       
   677 
       
   678     // Test += and -= on intervals
       
   679     a -= QMediaTimeInterval(10, 20);
       
   680     a += QMediaTimeInterval(40, 50);
       
   681 
       
   682     QVERIFY(a.isContinuous());
       
   683     QVERIFY(a.earliestTime() == 40);
       
   684     QVERIFY(a.latestTime() == 50);
       
   685 
       
   686     // Test Interval + Interval
       
   687     a = QMediaTimeInterval(10, 20) + QMediaTimeInterval(20, 30);
       
   688     QVERIFY(a.isContinuous());
       
   689     QVERIFY(a.earliestTime() == 10);
       
   690     QVERIFY(a.latestTime() == 30);
       
   691 
       
   692     // Test Range + Interval
       
   693     a = a + QMediaTimeInterval(30, 40);
       
   694     QVERIFY(a.isContinuous());
       
   695     QVERIFY(a.earliestTime() == 10);
       
   696     QVERIFY(a.latestTime() == 40);
       
   697 
       
   698     // Test Interval + Range
       
   699     a = QMediaTimeInterval(40, 50) + a;
       
   700     QVERIFY(a.isContinuous());
       
   701     QVERIFY(a.earliestTime() == 10);
       
   702     QVERIFY(a.latestTime() == 50);
       
   703 
       
   704     // Test Range + Range
       
   705     a = a + QMediaTimeRange(50, 60);
       
   706     QVERIFY(a.isContinuous());
       
   707     QVERIFY(a.earliestTime() == 10);
       
   708     QVERIFY(a.latestTime() == 60);
       
   709 
       
   710     // Test Range - Interval
       
   711     a = a - QMediaTimeInterval(50, 60);
       
   712     QVERIFY(a.isContinuous());
       
   713     QVERIFY(a.earliestTime() == 10);
       
   714     QVERIFY(a.latestTime() == 49);
       
   715 
       
   716     // Test Range - Range
       
   717     a = a - QMediaTimeRange(40, 50);
       
   718     QVERIFY(a.isContinuous());
       
   719     QVERIFY(a.earliestTime() == 10);
       
   720     QVERIFY(a.latestTime() == 39);
       
   721 
       
   722     // Test Interval - Range
       
   723     b = QMediaTimeInterval(0, 20) - a;
       
   724     QVERIFY(b.isContinuous());
       
   725     QVERIFY(b.earliestTime() == 0);
       
   726     QVERIFY(b.latestTime() == 9);
       
   727 
       
   728     // Test Interval - Interval
       
   729     a = QMediaTimeInterval(10, 20) - QMediaTimeInterval(15, 30);
       
   730     QVERIFY(a.isContinuous());
       
   731     QVERIFY(a.earliestTime() == 10);
       
   732     QVERIFY(a.latestTime() == 14);
       
   733 }
       
   734 
       
   735 QTEST_MAIN(tst_QMediaTimeRange)
       
   736 
       
   737 #include "tst_qmediatimerange.moc"