annotate data/model/test/TestZoomConstraints.h @ 1546:9c14dee72329

Use locale-aware comparators for user-visible string sorting
author Chris Cannam
date Mon, 01 Oct 2018 14:37:30 +0100
parents a7485c1bdba5
children bf32b26d1dad
rev   line source
Chris@1528 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1528 2
Chris@1528 3 /*
Chris@1528 4 Sonic Visualiser
Chris@1528 5 An audio file viewer and annotation editor.
Chris@1528 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1528 7
Chris@1528 8 This program is free software; you can redistribute it and/or
Chris@1528 9 modify it under the terms of the GNU General Public License as
Chris@1528 10 published by the Free Software Foundation; either version 2 of the
Chris@1528 11 License, or (at your option) any later version. See the file
Chris@1528 12 COPYING included with this distribution for more information.
Chris@1528 13 */
Chris@1528 14
Chris@1528 15 #ifndef TEST_ZOOM_CONSTRAINTS_H
Chris@1528 16 #define TEST_ZOOM_CONSTRAINTS_H
Chris@1528 17
Chris@1528 18 #include "../PowerOfTwoZoomConstraint.h"
Chris@1528 19 #include "../PowerOfSqrtTwoZoomConstraint.h"
Chris@1528 20
Chris@1528 21 #include <QObject>
Chris@1528 22 #include <QtTest>
Chris@1528 23 #include <QDir>
Chris@1528 24
Chris@1528 25 #include <iostream>
Chris@1528 26
Chris@1528 27 using namespace std;
Chris@1528 28
Chris@1528 29 class TestZoomConstraints : public QObject
Chris@1528 30 {
Chris@1528 31 Q_OBJECT
Chris@1528 32
Chris@1528 33 private slots:
Chris@1528 34 void unconstrainedNearest() {
Chris@1528 35 ZoomConstraint c;
Chris@1528 36 QCOMPARE(c.getNearestBlockSize(1), 1);
Chris@1528 37 QCOMPARE(c.getNearestBlockSize(2), 2);
Chris@1528 38 QCOMPARE(c.getNearestBlockSize(3), 3);
Chris@1528 39 QCOMPARE(c.getNearestBlockSize(4), 4);
Chris@1528 40 QCOMPARE(c.getNearestBlockSize(20), 20);
Chris@1528 41 QCOMPARE(c.getNearestBlockSize(23), 23);
Chris@1528 42 int max = c.getMaxZoomLevel();
Chris@1528 43 QCOMPARE(c.getNearestBlockSize(max), max);
Chris@1528 44 QCOMPARE(c.getNearestBlockSize(max+1), max);
Chris@1528 45 }
Chris@1528 46
Chris@1528 47 void unconstrainedUp() {
Chris@1528 48 ZoomConstraint c;
Chris@1528 49 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundUp), 1);
Chris@1528 50 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundUp), 2);
Chris@1528 51 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundUp), 3);
Chris@1528 52 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundUp), 4);
Chris@1528 53 QCOMPARE(c.getNearestBlockSize(20, ZoomConstraint::RoundUp), 20);
Chris@1528 54 QCOMPARE(c.getNearestBlockSize(32, ZoomConstraint::RoundUp), 32);
Chris@1528 55 int max = c.getMaxZoomLevel();
Chris@1528 56 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundUp), max);
Chris@1528 57 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundUp), max);
Chris@1528 58 }
Chris@1528 59
Chris@1528 60 void unconstrainedDown() {
Chris@1528 61 ZoomConstraint c;
Chris@1528 62 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundDown), 1);
Chris@1528 63 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundDown), 2);
Chris@1528 64 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundDown), 3);
Chris@1528 65 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundDown), 4);
Chris@1528 66 QCOMPARE(c.getNearestBlockSize(20, ZoomConstraint::RoundDown), 20);
Chris@1528 67 QCOMPARE(c.getNearestBlockSize(32, ZoomConstraint::RoundDown), 32);
Chris@1528 68 int max = c.getMaxZoomLevel();
Chris@1528 69 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundDown), max);
Chris@1528 70 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundDown), max);
Chris@1528 71 }
Chris@1528 72
Chris@1528 73 void powerOfTwoNearest() {
Chris@1528 74 PowerOfTwoZoomConstraint c;
Chris@1528 75 QCOMPARE(c.getNearestBlockSize(1), 1);
Chris@1528 76 QCOMPARE(c.getNearestBlockSize(2), 2);
Chris@1528 77 QCOMPARE(c.getNearestBlockSize(3), 2);
Chris@1528 78 QCOMPARE(c.getNearestBlockSize(4), 4);
Chris@1528 79 QCOMPARE(c.getNearestBlockSize(20), 16);
Chris@1528 80 QCOMPARE(c.getNearestBlockSize(23), 16);
Chris@1528 81 QCOMPARE(c.getNearestBlockSize(24), 16);
Chris@1528 82 QCOMPARE(c.getNearestBlockSize(25), 32);
Chris@1528 83 int max = c.getMaxZoomLevel();
Chris@1528 84 QCOMPARE(c.getNearestBlockSize(max), max);
Chris@1528 85 QCOMPARE(c.getNearestBlockSize(max+1), max);
Chris@1528 86 }
Chris@1528 87
Chris@1528 88 void powerOfTwoUp() {
Chris@1528 89 PowerOfTwoZoomConstraint c;
Chris@1528 90 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundUp), 1);
Chris@1528 91 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundUp), 2);
Chris@1528 92 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundUp), 4);
Chris@1528 93 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundUp), 4);
Chris@1528 94 QCOMPARE(c.getNearestBlockSize(20, ZoomConstraint::RoundUp), 32);
Chris@1528 95 QCOMPARE(c.getNearestBlockSize(32, ZoomConstraint::RoundUp), 32);
Chris@1528 96 QCOMPARE(c.getNearestBlockSize(33, ZoomConstraint::RoundUp), 64);
Chris@1528 97 int max = c.getMaxZoomLevel();
Chris@1528 98 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundUp), max);
Chris@1528 99 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundUp), max);
Chris@1528 100 }
Chris@1528 101
Chris@1528 102 void powerOfTwoDown() {
Chris@1528 103 PowerOfTwoZoomConstraint c;
Chris@1528 104 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundDown), 1);
Chris@1528 105 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundDown), 2);
Chris@1528 106 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundDown), 2);
Chris@1528 107 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundDown), 4);
Chris@1528 108 QCOMPARE(c.getNearestBlockSize(20, ZoomConstraint::RoundDown), 16);
Chris@1528 109 QCOMPARE(c.getNearestBlockSize(32, ZoomConstraint::RoundDown), 32);
Chris@1528 110 QCOMPARE(c.getNearestBlockSize(33, ZoomConstraint::RoundDown), 32);
Chris@1528 111 int max = c.getMaxZoomLevel();
Chris@1528 112 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundDown), max);
Chris@1528 113 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundDown), max);
Chris@1528 114 }
Chris@1528 115
Chris@1528 116 void powerOfSqrtTwoNearest() {
Chris@1528 117 PowerOfSqrtTwoZoomConstraint c;
Chris@1528 118 QCOMPARE(c.getNearestBlockSize(1), 1);
Chris@1528 119 QCOMPARE(c.getNearestBlockSize(2), 2);
Chris@1528 120 QCOMPARE(c.getNearestBlockSize(3), 2);
Chris@1528 121 QCOMPARE(c.getNearestBlockSize(4), 4);
Chris@1528 122 QCOMPARE(c.getNearestBlockSize(18), 16);
Chris@1528 123 QCOMPARE(c.getNearestBlockSize(19), 16);
Chris@1528 124 QCOMPARE(c.getNearestBlockSize(20), 22);
Chris@1528 125 QCOMPARE(c.getNearestBlockSize(23), 22);
Chris@1528 126 QCOMPARE(c.getNearestBlockSize(28), 32);
Chris@1528 127 // PowerOfSqrtTwoZoomConstraint makes an effort to ensure
Chris@1528 128 // bigger numbers get rounded to a multiple of something
Chris@1528 129 // simple (64 or 90 depending on whether they are power-of-two
Chris@1528 130 // or power-of-sqrt-two types)
Chris@1528 131 QCOMPARE(c.getNearestBlockSize(800), 720);
Chris@1528 132 QCOMPARE(c.getNearestBlockSize(1023), 1024);
Chris@1528 133 QCOMPARE(c.getNearestBlockSize(1024), 1024);
Chris@1528 134 QCOMPARE(c.getNearestBlockSize(1025), 1024);
Chris@1528 135 int max = c.getMaxZoomLevel();
Chris@1528 136 QCOMPARE(c.getNearestBlockSize(max), max);
Chris@1528 137 QCOMPARE(c.getNearestBlockSize(max+1), max);
Chris@1528 138 }
Chris@1528 139
Chris@1528 140 void powerOfSqrtTwoUp() {
Chris@1528 141 PowerOfSqrtTwoZoomConstraint c;
Chris@1528 142 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundUp), 1);
Chris@1528 143 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundUp), 2);
Chris@1528 144 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundUp), 4);
Chris@1528 145 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundUp), 4);
Chris@1528 146 QCOMPARE(c.getNearestBlockSize(18, ZoomConstraint::RoundUp), 22);
Chris@1528 147 QCOMPARE(c.getNearestBlockSize(22, ZoomConstraint::RoundUp), 22);
Chris@1528 148 QCOMPARE(c.getNearestBlockSize(23, ZoomConstraint::RoundUp), 32);
Chris@1528 149 QCOMPARE(c.getNearestBlockSize(800, ZoomConstraint::RoundUp), 1024);
Chris@1528 150 QCOMPARE(c.getNearestBlockSize(1023, ZoomConstraint::RoundUp), 1024);
Chris@1528 151 QCOMPARE(c.getNearestBlockSize(1024, ZoomConstraint::RoundUp), 1024);
Chris@1528 152 // see comment above
Chris@1528 153 QCOMPARE(c.getNearestBlockSize(1025, ZoomConstraint::RoundUp), 1440);
Chris@1528 154 int max = c.getMaxZoomLevel();
Chris@1528 155 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundUp), max);
Chris@1528 156 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundUp), max);
Chris@1528 157 }
Chris@1528 158
Chris@1528 159 void powerOfSqrtTwoDown() {
Chris@1528 160 PowerOfSqrtTwoZoomConstraint c;
Chris@1528 161 QCOMPARE(c.getNearestBlockSize(1, ZoomConstraint::RoundDown), 1);
Chris@1528 162 QCOMPARE(c.getNearestBlockSize(2, ZoomConstraint::RoundDown), 2);
Chris@1528 163 QCOMPARE(c.getNearestBlockSize(3, ZoomConstraint::RoundDown), 2);
Chris@1528 164 QCOMPARE(c.getNearestBlockSize(4, ZoomConstraint::RoundDown), 4);
Chris@1528 165 QCOMPARE(c.getNearestBlockSize(18, ZoomConstraint::RoundDown), 16);
Chris@1528 166 QCOMPARE(c.getNearestBlockSize(22, ZoomConstraint::RoundDown), 22);
Chris@1528 167 QCOMPARE(c.getNearestBlockSize(23, ZoomConstraint::RoundDown), 22);
Chris@1528 168 // see comment above
Chris@1528 169 QCOMPARE(c.getNearestBlockSize(800, ZoomConstraint::RoundDown), 720);
Chris@1528 170 QCOMPARE(c.getNearestBlockSize(1023, ZoomConstraint::RoundDown), 720);
Chris@1528 171 QCOMPARE(c.getNearestBlockSize(1024, ZoomConstraint::RoundDown), 1024);
Chris@1528 172 QCOMPARE(c.getNearestBlockSize(1025, ZoomConstraint::RoundDown), 1024);
Chris@1528 173 int max = c.getMaxZoomLevel();
Chris@1528 174 QCOMPARE(c.getNearestBlockSize(max, ZoomConstraint::RoundDown), max);
Chris@1528 175 QCOMPARE(c.getNearestBlockSize(max+1, ZoomConstraint::RoundDown), max);
Chris@1528 176 }
Chris@1528 177 };
Chris@1528 178
Chris@1528 179 #endif
Chris@1528 180