File indexing completed on 2024-04-28 16:49:47
0001 #include "signalplottertest.h" 0002 #include "signalplotter/ksignalplotter.h" 0003 0004 #include <QtGui> 0005 #include <QtTestGui> 0006 #include <limits> 0007 0008 void TestSignalPlotter::init() 0009 { 0010 s = new KSignalPlotter; 0011 } 0012 void TestSignalPlotter::cleanup() 0013 { 0014 delete s; 0015 } 0016 0017 void TestSignalPlotter::testAddRemoveBeams() 0018 { 0019 // Just try various variations of adding and removing beams 0020 QCOMPARE(s->numBeams(), 0); 0021 0022 s->addBeam(Qt::blue); 0023 s->addBeam(Qt::red); 0024 QCOMPARE(s->numBeams(), 2); 0025 QVERIFY(s->beamColor(0) == Qt::blue); 0026 QVERIFY(s->beamColor(1) == Qt::red); 0027 0028 s->removeBeam(0); 0029 QCOMPARE(s->numBeams(), 1); 0030 QVERIFY(s->beamColor(0) == Qt::red); 0031 0032 s->removeBeam(0); 0033 QCOMPARE(s->numBeams(), 0); 0034 0035 s->addBeam(Qt::blue); 0036 s->addBeam(Qt::red); 0037 QCOMPARE(s->numBeams(), 2); 0038 QVERIFY(s->beamColor(0) == Qt::blue); 0039 QVERIFY(s->beamColor(1) == Qt::red); 0040 0041 s->removeBeam(1); 0042 QCOMPARE(s->numBeams(), 1); 0043 QVERIFY(s->beamColor(0) == Qt::blue); 0044 0045 s->addBeam(Qt::red); 0046 QCOMPARE(s->numBeams(), 2); 0047 QVERIFY(s->beamColor(0) == Qt::blue); 0048 QVERIFY(s->beamColor(1) == Qt::red); 0049 } 0050 void TestSignalPlotter::testAddRemoveBeamsWithData() 0051 { 0052 // Just try various variations of adding and removing beams, 0053 // this time with data as well 0054 QCOMPARE(s->numBeams(), 0); 0055 0056 s->addBeam(Qt::blue); 0057 s->addBeam(Qt::red); 0058 0059 QVERIFY(std::isnan(s->lastValue(0))); // unset, so should default to NaN 0060 QVERIFY(std::isnan(s->lastValue(1))); // unset, so should default to NaN 0061 QCOMPARE(s->numBeams(), 2); 0062 QVERIFY(s->beamColor(0) == Qt::blue); 0063 QVERIFY(s->beamColor(1) == Qt::red); 0064 s->addSample(QList<qreal>() << 1.0 << 2.0); 0065 QCOMPARE(s->lastValue(0), 1.0); 0066 QCOMPARE(s->lastValue(1), 2.0); 0067 0068 s->removeBeam(0); 0069 QCOMPARE(s->numBeams(), 1); 0070 QVERIFY(s->beamColor(0) == Qt::red); 0071 QCOMPARE(s->lastValue(0), 2.0); 0072 0073 s->removeBeam(0); 0074 QCOMPARE(s->numBeams(), 0); 0075 0076 s->addBeam(Qt::blue); 0077 s->addBeam(Qt::red); 0078 s->addSample(QList<qreal>() << 1.0 << 2.0); 0079 QCOMPARE(s->numBeams(), 2); 0080 QVERIFY(s->beamColor(0) == Qt::blue); 0081 QVERIFY(s->beamColor(1) == Qt::red); 0082 QCOMPARE(s->lastValue(0), 1.0); 0083 QCOMPARE(s->lastValue(1), 2.0); 0084 0085 s->removeBeam(1); 0086 QCOMPARE(s->numBeams(), 1); 0087 QVERIFY(s->beamColor(0) == Qt::blue); 0088 QCOMPARE(s->lastValue(0), 1.0); 0089 0090 s->addBeam(Qt::red); 0091 QCOMPARE(s->numBeams(), 2); 0092 QVERIFY(s->beamColor(0) == Qt::blue); 0093 QVERIFY(s->beamColor(1) == Qt::red); 0094 QCOMPARE(s->lastValue(0), 1.0); 0095 QVERIFY(std::isnan(s->lastValue(1))); // unset, so should default to NaN 0096 } 0097 0098 void TestSignalPlotter::testReorderBeams() 0099 { 0100 QCOMPARE(s->numBeams(), 0); 0101 QList<int> newOrder; 0102 s->reorderBeams(newOrder); // do nothing 0103 QCOMPARE(s->numBeams(), 0); 0104 0105 s->addBeam(Qt::blue); 0106 s->addBeam(Qt::red); 0107 QCOMPARE(s->numBeams(), 2); 0108 QVERIFY(s->beamColor(0) == Qt::blue); 0109 QVERIFY(s->beamColor(1) == Qt::red); 0110 0111 newOrder << 0 << 1; // nothing changed 0112 s->reorderBeams(newOrder); 0113 QCOMPARE(s->numBeams(), 2); 0114 QVERIFY(s->beamColor(0) == Qt::blue); 0115 QVERIFY(s->beamColor(1) == Qt::red); 0116 0117 newOrder.clear(); 0118 newOrder << 1 << 0; // reverse them 0119 s->reorderBeams(newOrder); 0120 QCOMPARE(s->numBeams(), 2); 0121 QVERIFY(s->beamColor(0) == Qt::red); 0122 QVERIFY(s->beamColor(1) == Qt::blue); 0123 0124 // reverse them back again 0125 s->reorderBeams(newOrder); 0126 QCOMPARE(s->numBeams(), 2); 0127 QVERIFY(s->beamColor(0) == Qt::blue); 0128 QVERIFY(s->beamColor(1) == Qt::red); 0129 0130 // switch them yet again 0131 s->reorderBeams(newOrder); 0132 0133 // Add a third beam 0134 s->addBeam(Qt::green); 0135 QCOMPARE(s->numBeams(), 3); 0136 QVERIFY(s->beamColor(0) == Qt::red); 0137 QVERIFY(s->beamColor(1) == Qt::blue); 0138 QVERIFY(s->beamColor(2) == Qt::green); 0139 0140 newOrder.clear(); 0141 newOrder << 2 << 0 << 1; 0142 s->reorderBeams(newOrder); 0143 QCOMPARE(s->numBeams(), 3); 0144 QVERIFY(s->beamColor(0) == Qt::green); 0145 QVERIFY(s->beamColor(1) == Qt::red); 0146 QVERIFY(s->beamColor(2) == Qt::blue); 0147 } 0148 void TestSignalPlotter::testReorderBeamsWithData() 0149 { 0150 QCOMPARE(s->numBeams(), 0); 0151 QList<int> newOrder; 0152 0153 s->addBeam(Qt::blue); 0154 s->addBeam(Qt::red); 0155 QCOMPARE(s->numBeams(), 2); 0156 QVERIFY(std::isnan(s->lastValue(0))); // unset, so should default to NaN 0157 QVERIFY(std::isnan(s->lastValue(1))); // unset, so should default to NaN 0158 // Add some data 0159 QList<qreal> data; 0160 data << 1.0 << 2.0; 0161 s->addSample(data); 0162 QCOMPARE(s->lastValue(0), 1.0); 0163 QCOMPARE(s->lastValue(1), 2.0); 0164 0165 newOrder << 0 << 1; // nothing changed 0166 s->reorderBeams(newOrder); 0167 QCOMPARE(s->numBeams(), 2); 0168 QCOMPARE(s->lastValue(0), 1.0); 0169 QCOMPARE(s->lastValue(1), 2.0); 0170 0171 newOrder.clear(); 0172 newOrder << 1 << 0; // reverse them 0173 s->reorderBeams(newOrder); 0174 QCOMPARE(s->numBeams(), 2); 0175 QCOMPARE(s->lastValue(0), 2.0); 0176 QCOMPARE(s->lastValue(1), 1.0); 0177 0178 // reverse them back again 0179 s->reorderBeams(newOrder); 0180 QCOMPARE(s->numBeams(), 2); 0181 QCOMPARE(s->lastValue(0), 1.0); 0182 QCOMPARE(s->lastValue(1), 2.0); 0183 0184 // switch them yet again 0185 s->reorderBeams(newOrder); 0186 0187 // Add a third beam 0188 s->addBeam(Qt::green); 0189 QCOMPARE(s->numBeams(), 3); 0190 QCOMPARE(s->lastValue(0), 2.0); 0191 QCOMPARE(s->lastValue(1), 1.0); 0192 QVERIFY(std::isnan(s->lastValue(2))); // unset, so should default to NaN 0193 0194 newOrder.clear(); 0195 newOrder << 2 << 0 << 1; 0196 s->reorderBeams(newOrder); 0197 QCOMPARE(s->numBeams(), 3); 0198 QVERIFY(std::isnan(s->lastValue(0))); // unset, so should default to NaN 0199 QCOMPARE(s->lastValue(1), 2.0); 0200 QCOMPARE(s->lastValue(2), 1.0); 0201 } 0202 void TestSignalPlotter::testMaximumRange() 0203 { 0204 QCOMPARE(s->maximumValue(), 0.0); 0205 QCOMPARE(s->minimumValue(), 0.0); 0206 QCOMPARE(s->currentMaximumRangeValue(), 0.0); 0207 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0208 QCOMPARE(s->useAutoRange(), true); 0209 0210 s->addBeam(Qt::blue); 0211 // Nothing should have changed yet 0212 QCOMPARE(s->maximumValue(), 0.0); 0213 QCOMPARE(s->minimumValue(), 0.0); 0214 QCOMPARE(s->currentMaximumRangeValue(), 0.0); 0215 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0216 0217 QList<qreal> data; 0218 data << 1.1; 0219 s->addSample(data); 0220 0221 QCOMPARE(s->maximumValue(), 0.0); 0222 QCOMPARE(s->minimumValue(), 0.0); 0223 0224 QCOMPARE(s->currentMaximumRangeValue(), 1.1); // It gets rounded up. 0225 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0226 QCOMPARE(s->currentAxisPrecision(), 2); // step is 0.22 0227 0228 s->setMaximumValue(1.0); 0229 QCOMPARE(s->maximumValue(), 1.0); 0230 QCOMPARE(s->minimumValue(), 0.0); 0231 QCOMPARE(s->currentMaximumRangeValue(), 1.1); // Current value is still larger 0232 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0233 QCOMPARE(s->currentAxisPrecision(), 2); 0234 0235 s->setMaximumValue(1.4); 0236 QCOMPARE(s->maximumValue(), 1.4); 0237 QCOMPARE(s->minimumValue(), 0.0); 0238 QCOMPARE(s->currentMaximumRangeValue(), 1.4); // given maximum range is now the larger value 0239 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0240 QCOMPARE(s->currentAxisPrecision(), 2); 0241 0242 s->addBeam(Qt::red); 0243 // nothing changed by adding a beam 0244 QCOMPARE(s->maximumValue(), 1.4); 0245 QCOMPARE(s->minimumValue(), 0.0); 0246 QCOMPARE(s->currentMaximumRangeValue(), 1.4); // given maximum range hasn't changed 0247 QCOMPARE(s->currentMinimumRangeValue(), 0.0); 0248 QCOMPARE(s->currentAxisPrecision(), 2); 0249 } 0250 0251 void TestSignalPlotter::testNonZeroRange() 0252 { 0253 s->addBeam(Qt::blue); 0254 s->setMinimumValue(10); 0255 s->setMaximumValue(20); 0256 0257 QCOMPARE(s->currentMinimumRangeValue(), 10.0); // Current range should be 10, 12, 14, 16, 18, 20 0258 QCOMPARE(s->currentMaximumRangeValue(), 20.0); 0259 QCOMPARE(s->currentAxisPrecision(), 0); 0260 0261 s->addSample(QList<qreal>() << 15); 0262 s->addSample(QList<qreal>() << 25); 0263 s->addSample(QList<qreal>() << 5); 0264 0265 QCOMPARE(s->currentMinimumRangeValue(), 5.0); 0266 QCOMPARE(s->currentMaximumRangeValue(), 25.0); // Current range should be 5, 9, 13, 17, 21, 25 0267 QCOMPARE(s->currentAxisPrecision(), 0); 0268 0269 s->addBeam(Qt::red); 0270 s->addSample(QList<qreal>() << 7 << 9); 0271 s->addSample(QList<qreal>() << 29.8 << 2); 0272 0273 QCOMPARE(s->currentMinimumRangeValue(), 2.0); 0274 QCOMPARE(s->currentMaximumRangeValue(), 30.0); // Current range should be 2, 7.6, 13.2, 18.8, 24.4, 30 0275 QCOMPARE(s->currentAxisPrecision(), 1); 0276 0277 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN()); // These should appear as gaps in the data 0278 0279 QCOMPARE(s->currentMinimumRangeValue(), 2.0); 0280 QCOMPARE(s->currentMaximumRangeValue(), 30.0); 0281 QCOMPARE(s->currentAxisPrecision(), 1); 0282 0283 s->addSample(QList<qreal>() << 1.0 / 0.0 << -1.0 / 0.0); 0284 0285 QCOMPARE(s->currentMinimumRangeValue(), 2.0); 0286 QCOMPARE(s->currentMaximumRangeValue(), 30.0); 0287 QCOMPARE(s->currentAxisPrecision(), 1); 0288 } 0289 0290 void TestSignalPlotter::testNonZeroRange2() 0291 { 0292 s->addBeam(Qt::blue); 0293 s->setMinimumValue(22); 0294 s->setMaximumValue(23); 0295 0296 QCOMPARE(s->currentMinimumRangeValue(), 22.0); 0297 QCOMPARE(s->currentMaximumRangeValue(), 23.0); 0298 0299 s->addSample(QList<qreal>() << 25); 0300 QCOMPARE(s->currentMinimumRangeValue(), 22.0); 0301 QCOMPARE(s->currentMaximumRangeValue(), 25.0); 0302 } 0303 0304 void TestSignalPlotter::testNiceRangeCalculation_data() 0305 { 0306 QTest::addColumn<qreal>("min"); 0307 QTest::addColumn<qreal>("max"); 0308 QTest::addColumn<qreal>("niceMin"); 0309 QTest::addColumn<qreal>("niceMax"); 0310 QTest::addColumn<int>("precision"); 0311 0312 #define STRINGIZE(number) #number 0313 #define testRange(min, max, niceMin, niceMax, precision) \ 0314 QTest::newRow(STRINGIZE(min) " to " STRINGIZE(max)) << qreal(min) << qreal(max) << qreal(niceMin) << qreal(niceMax) << int(precision) 0315 /* testRange(-49, 199, -50, 200, 0); // Scale should read -50, 0, 50, 100, 150, 200 0316 testRange(-50, 199, -50, 200, 0); // Scale should read -50, 0, 50, 100, 150, 200 0317 testRange(-49, 200, -50, 200, 0); // Scale should read -50, 0, 50, 100, 150, 200 0318 testRange(-50, 200, -50, 200, 0); // Scale should read -50, 0, 50, 100, 150, 200 0319 testRange(-1, 199, -50, 200, 0); // Scale should read -50, 0, 50, 100, 150, 200 0320 testRange(-99, 149, -100, 150, 0); // Scale should read -100, 50, 0, 50, 100, 150 0321 testRange(-100, 150, -100, 150, 0); // Scale should read -100, 50, 0, 50, 100, 150 0322 testRange(-1000, 1000, -1000, 1500, 0); // Scale should read -1000, 500, 0, 500, 1000, 1500 */ 0323 testRange(0, 7, 0, 7, 1); // Scale should read 0, 1.4, 2.8, 4.2, 5.6, 7 0324 } 0325 void TestSignalPlotter::testNiceRangeCalculation() 0326 { 0327 QFETCH(qreal, min); 0328 QFETCH(qreal, max); 0329 QFETCH(qreal, niceMin); 0330 QFETCH(qreal, niceMax); 0331 QFETCH(int, precision); 0332 0333 s->addBeam(Qt::blue); 0334 s->changeRange(min, max); 0335 0336 QCOMPARE(s->currentMinimumRangeValue(), niceMin); 0337 QCOMPARE(s->currentMaximumRangeValue(), niceMax); 0338 QCOMPARE(s->currentAxisPrecision(), precision); 0339 } 0340 0341 void TestSignalPlotter::testNegativeMinimumRange() 0342 { 0343 QLocale().setDefault(QLocale(QLocale::English, QLocale::UnitedStates)); 0344 0345 s->setMinimumValue(-1000); 0346 s->setMaximumValue(4000); 0347 QCOMPARE(s->minimumValue(), -1000.0); 0348 QCOMPARE(s->maximumValue(), 4000.0); 0349 QCOMPARE(s->currentMinimumRangeValue(), -1000.0); 0350 QCOMPARE(s->currentMaximumRangeValue(), 4000.0); 0351 0352 s->setScaleDownBy(1024); 0353 QCOMPARE(s->minimumValue(), -1000.0); 0354 QCOMPARE(s->maximumValue(), 4000.0); 0355 QCOMPARE(s->currentMaximumRangeValue(), 4014.08); // The given range was -0.976KB to 3.906KB. This was rounded as: -0.98KB to 3.92KB 0356 QCOMPARE(s->currentMinimumRangeValue(), -1003.52); 0357 0358 QCOMPARE(s->valueAsString(4096, 1), QStringLiteral("4.0")); 0359 QCOMPARE(s->valueAsString(-4096, 1), QStringLiteral("-4.0")); 0360 0361 s->addBeam(Qt::red); 0362 s->addSample(QList<qreal>() << -1024.0); 0363 QCOMPARE(s->currentMaximumRangeValue(), 4096.0); 0364 QCOMPARE(s->currentMinimumRangeValue(), -1024.0); 0365 s->addSample(QList<qreal>() << -1025.0); // Scale now becomes -3, -1.5, 0, 1.5, 3, 4.5 in KB 0366 QCOMPARE(s->currentMinimumRangeValue(), -1126.4); //-1.1KB 0367 QCOMPARE(s->currentMaximumRangeValue(), 4505.6); // 4.4KB 0368 } 0369 void TestSignalPlotter::testSetBeamColor() 0370 { 0371 s->addBeam(Qt::red); 0372 s->setBeamColor(0, Qt::blue); 0373 QVERIFY(s->beamColor(0) == Qt::blue); 0374 QCOMPARE(s->numBeams(), 1); 0375 0376 s->addBeam(Qt::red); 0377 QVERIFY(s->beamColor(0) == Qt::blue); 0378 QVERIFY(s->beamColor(1) == Qt::red); 0379 QCOMPARE(s->numBeams(), 2); 0380 0381 s->setBeamColor(0, Qt::green); 0382 QVERIFY(s->beamColor(0) == Qt::green); 0383 QVERIFY(s->beamColor(1) == Qt::red); 0384 QCOMPARE(s->numBeams(), 2); 0385 0386 s->setBeamColor(1, Qt::blue); 0387 QVERIFY(s->beamColor(0) == Qt::green); 0388 QVERIFY(s->beamColor(1) == Qt::blue); 0389 0390 s->removeBeam(0); 0391 QVERIFY(s->beamColor(0) == Qt::blue); 0392 s->setBeamColor(0, Qt::red); 0393 QVERIFY(s->beamColor(0) == Qt::red); 0394 } 0395 0396 void TestSignalPlotter::testSetUnit() 0397 { 0398 // Test default 0399 QCOMPARE(s->valueAsString(3e20, 1), QStringLiteral("3e+20")); 0400 QCOMPARE(s->valueAsString(-3e20, 1), QStringLiteral("-3e+20")); 0401 0402 s->setUnit(ki18ncp("Units", "%1 second", "%1 seconds")); 0403 0404 QSKIP("I18n problems"); 0405 QCOMPARE(s->valueAsString(3e20, 1), QStringLiteral("3e+20 seconds")); 0406 QCOMPARE(s->valueAsString(-3e20, 1), QStringLiteral("-3e+20 seconds")); 0407 QCOMPARE(s->valueAsString(3.4, 1), QStringLiteral("3.4 seconds")); 0408 QCOMPARE(s->valueAsString(-3.4, 1), QStringLiteral("-3.4 seconds")); 0409 QCOMPARE(s->valueAsString(1), QStringLiteral("1.0 seconds")); 0410 QCOMPARE(s->valueAsString(-1), QStringLiteral("-1.0 seconds")); 0411 QCOMPARE(s->valueAsString(1, 0), QStringLiteral("1 second")); 0412 QCOMPARE(s->valueAsString(-1, 0), QStringLiteral("-1 second")); 0413 0414 // now switch to minutes 0415 s->setScaleDownBy(60); 0416 s->setUnit(ki18ncp("Units", "%1 minute", "%1 minutes")); 0417 QCOMPARE(s->valueAsString(3.4), QStringLiteral("0.06 minutes")); 0418 QCOMPARE(s->valueAsString(-3.4), QStringLiteral("-0.06 minutes")); 0419 QCOMPARE(s->valueAsString(60), QStringLiteral("1.0 minutes")); 0420 QCOMPARE(s->valueAsString(-60), QStringLiteral("-1.0 minutes")); 0421 QCOMPARE(s->valueAsString(60, 0), QStringLiteral("1 minute")); 0422 QCOMPARE(s->valueAsString(-60, 0), QStringLiteral("-1 minute")); 0423 } 0424 0425 void TestSignalPlotter::testGettersSetters() 0426 { 0427 // basic test of all the getters and setters and default values 0428 KLocalizedString string = ki18ncp("Units", "%1 second", "%1 seconds"); 0429 s->setUnit(string); 0430 QVERIFY(s->unit().toString() == string.toString()); 0431 s->setMaximumValue(3); 0432 s->setMinimumValue(-3); 0433 QCOMPARE(s->maximumValue(), 3.0); 0434 QCOMPARE(s->minimumValue(), -3.0); 0435 0436 s->changeRange(-2, 2); 0437 QCOMPARE(s->maximumValue(), 2.0); 0438 QCOMPARE(s->minimumValue(), -2.0); 0439 0440 s->setMinimumValue(-3); 0441 QCOMPARE(s->useAutoRange(), true); // default 0442 s->setUseAutoRange(false); 0443 QCOMPARE(s->useAutoRange(), false); 0444 0445 QCOMPARE(s->scaleDownBy(), 1.0); // default 0446 s->setScaleDownBy(1.2); 0447 QCOMPARE(s->scaleDownBy(), 1.2); 0448 s->setScaleDownBy(0.5); 0449 QCOMPARE(s->scaleDownBy(), 0.5); 0450 0451 QCOMPARE(s->horizontalScale(), 6); // default 0452 s->setHorizontalScale(2); 0453 QCOMPARE(s->horizontalScale(), 2); 0454 s->setHorizontalScale(1); 0455 QCOMPARE(s->horizontalScale(), 1); 0456 s->setHorizontalScale(0); // Ignored - invalid value 0457 QCOMPARE(s->horizontalScale(), 1); 0458 0459 QCOMPARE(s->showHorizontalLines(), true); // default 0460 s->setShowHorizontalLines(false); 0461 QCOMPARE(s->showHorizontalLines(), false); 0462 0463 QCOMPARE(s->showVerticalLines(), false); // default 0464 s->setShowVerticalLines(true); 0465 QCOMPARE(s->showVerticalLines(), true); 0466 0467 QCOMPARE(s->verticalLinesScroll(), true); // default 0468 s->setVerticalLinesScroll(false); 0469 QCOMPARE(s->verticalLinesScroll(), false); 0470 0471 QCOMPARE(s->verticalLinesDistance(), (uint)30); // default 0472 s->setVerticalLinesDistance(1); 0473 QCOMPARE(s->verticalLinesDistance(), (uint)1); 0474 0475 QCOMPARE(s->showAxis(), true); // default 0476 s->setShowAxis(false); 0477 QCOMPARE(s->showAxis(), false); 0478 0479 QCOMPARE(s->maxAxisTextWidth(), 0); // default 0480 s->setMaxAxisTextWidth(30); 0481 QCOMPARE(s->maxAxisTextWidth(), 30); 0482 s->setMaxAxisTextWidth(0); 0483 QCOMPARE(s->maxAxisTextWidth(), 0); 0484 0485 QCOMPARE(s->smoothGraph(), true); // default 0486 s->setSmoothGraph(false); 0487 QCOMPARE(s->smoothGraph(), false); 0488 0489 QCOMPARE(s->stackGraph(), false); // default 0490 s->setStackGraph(true); 0491 QCOMPARE(s->stackGraph(), true); 0492 0493 QCOMPARE(s->fillOpacity(), 20); // default 0494 s->setFillOpacity(255); 0495 QCOMPARE(s->fillOpacity(), 255); 0496 s->setFillOpacity(0); 0497 QCOMPARE(s->fillOpacity(), 0); 0498 } 0499 void TestSignalPlotter::testAddingData() 0500 { 0501 QCOMPARE(s->useAutoRange(), true); 0502 s->setGeometry(0, 0, 500, 500); 0503 // Test adding sample without any beams. It should just ignore this 0504 s->addSample(QList<qreal>() << 1.0 << 2.0); 0505 // Test setting the beam color of a non-existent beam. It should just ignore this too. 0506 // s->setBeamColor(0, Qt::blue); 0507 0508 // Add an empty sample. This should just be ignored? 0509 s->addSample(QList<qreal>()); 0510 0511 // Okay let's be serious now 0512 s->addBeam(Qt::red); 0513 s->addSample(QList<qreal>() << 0.0); 0514 s->addSample(QList<qreal>() << -0.0); 0515 s->addSample(QList<qreal>() << -1.0); 0516 s->addSample(QList<qreal>() << -1000.0); 0517 s->addSample(QList<qreal>() << 1000.0); 0518 s->addSample(QList<qreal>() << 300.0); 0519 s->addSample(QList<qreal>() << 300.0); 0520 s->addSample(QList<qreal>() << 300.0); 0521 s->addSample(QList<qreal>() << 300.0); 0522 s->addSample(QList<qreal>() << 300.0); 0523 s->addSample(QList<qreal>() << 300.0); 0524 s->addSample(QList<qreal>() << 1.0 / 0.0); // Positive infinity. Should be ignore for range values, not crash, and draw something reasonable 0525 s->addSample(QList<qreal>() << 1.0 / 0.0); // Positive infinity. Should be ignore for range values, not crash, and draw something reasonable 0526 s->addSample(QList<qreal>() << 1.0 / 0.0); // Positive infinity. Should be ignore for range values, not crash, and draw something reasonable 0527 s->addSample(QList<qreal>() << 1.0 / 0.0); // Positive infinity. Should be ignore for range values, not crash, and draw something reasonable 0528 s->addSample(QList<qreal>() << 1.0 / 0.0); // Positive infinity. Should be ignore for range values, not crash, and draw something reasonable 0529 s->addSample(QList<qreal>() << -1.0 / 0.0); // Positive infinity. Likewise. 0530 s->addSample(QList<qreal>() << -1.0 / 0.0); // Negative infinity. Likewise. 0531 s->addSample(QList<qreal>() << -1.0 / 0.0); // Negative infinity. Likewise. 0532 s->addSample(QList<qreal>() << -1.0 / 0.0); // Negative infinity. Likewise. 0533 s->addSample(QList<qreal>() << -1.0 / 0.0); // Negative infinity. Likewise. 0534 s->addSample(QList<qreal>() << -1.0 / 0.0); // Negative infinity. Likewise. 0535 s->addSample(QList<qreal>() << 300.0); 0536 s->addSample(QList<qreal>() << 300.0); 0537 s->addSample(QList<qreal>() << 300.0); 0538 s->addSample(QList<qreal>() << 300.0); 0539 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN()); // These should appear as gaps in the data 0540 s->addSample(QList<qreal>() << 300.0); 0541 s->addSample(QList<qreal>() << 300.0); 0542 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN()); 0543 s->addSample(QList<qreal>() << 400.0); 0544 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN()); 0545 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN()); 0546 s->addBeam(Qt::green); 0547 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN() << 100.0); 0548 s->addSample(QList<qreal>() << std::numeric_limits<qreal>::quiet_NaN() << 100.0); 0549 s->addSample(QList<qreal>() << 200.0 << 100.0); 0550 s->addSample(QList<qreal>() << 300.0 << 100.0); 0551 s->addBeam(Qt::blue); 0552 s->addSample(QList<qreal>() << 400.0 << 100.0 << 200.0); 0553 s->addSample(QList<qreal>() << 500.0 << 100.0 << 200.0); 0554 s->addSample(QList<qreal>() << 600.0 << 100.0 << 200.0); 0555 0556 QCOMPARE(s->currentMinimumRangeValue(), -1000.0); 0557 QCOMPARE(s->currentMaximumRangeValue(), 1500.0); 0558 0559 // Paint to a device, to check that the painter does not crash etc 0560 QPixmap pixmap(s->size()); 0561 s->render(&pixmap); 0562 0563 // For debugging, show the widget so that we can check it visually 0564 // s->show(); 0565 // QTest::qWait(10000); 0566 0567 // Test that it does not crash at small sizes 0568 for (int x = 0; x < 4; x++) 0569 for (int y = 0; y < 4; y++) { 0570 s->setGeometry(0, 0, x, y); 0571 s->render(&pixmap); 0572 } 0573 } 0574 QTEST_MAIN(TestSignalPlotter)