File indexing completed on 2024-05-19 04:34:08

0001 /***************************************************************************
0002  *                                                                         *
0003  *   copyright : (C) 2007 The University of Toronto                        *
0004  *                                                                         *
0005  *   This program is free software; you can redistribute it and/or modify  *
0006  *   it under the terms of the GNU General Public License as published by  *
0007  *   the Free Software Foundation; either version 2 of the License, or     *
0008  *   (at your option) any later version.                                   *
0009  *                                                                         *
0010  ***************************************************************************/
0011 
0012 #include "testmatrix.h"
0013 
0014 #include <QtTest>
0015 
0016 #include <matrix.h>
0017 #include <math_kst.h>
0018 #include <datacollection.h>
0019 #include <objectstore.h>
0020 
0021 static Kst::ObjectStore _store;
0022 
0023 void TestMatrix::cleanupTestCase() {
0024   _store.clear();
0025 }
0026 
0027 
0028 void TestMatrix::testMatrix() {
0029   bool ok = true;
0030 
0031   //basic default constructor values
0032   Kst::MatrixPtr m1 = Kst::kst_cast<Kst::Matrix>(_store.createObject<Kst::Matrix>());
0033   QCOMPARE(m1->sampleCount(), 0);
0034   QCOMPARE(m1->minValue(), 0.0);
0035   QCOMPARE(m1->maxValue(), 0.0);
0036   QCOMPARE(m1->value(0, 0, &ok), 0.0);
0037   QVERIFY(!ok);
0038   QCOMPARE(m1->value(10, 10, &ok), 0.0); //should be outside the boundaries.
0039   QVERIFY(!ok);
0040   QCOMPARE(m1->sampleCount(), 0);
0041   QCOMPARE(m1->meanValue(), 0.0);
0042 
0043   //basic symetrical matrix
0044   Kst::MatrixPtr m2 = Kst::kst_cast<Kst::Matrix>(_store.createObject<Kst::Matrix>());
0045 
0046   QVERIFY(m2->resize(3, 3, true));
0047 
0048   QVERIFY(!m2->editable());
0049   m2->setEditable(true);
0050 
0051   QVERIFY(m2->editable());
0052 
0053   QCOMPARE(m2->xNumSteps(), 3);
0054   QCOMPARE(m2->yNumSteps(), 3);
0055   QCOMPARE(m2->minX(), 0.0);
0056   QCOMPARE(m2->minY(), 0.0);
0057   QCOMPARE(m2->xStepSize(), 1.0);
0058   QCOMPARE(m2->yStepSize(), 1.0);
0059   QCOMPARE(m2->sampleCount(), 9);
0060 
0061   QVERIFY(m2->setValueRaw(1, 1, 5));
0062   ok = true;
0063   QCOMPARE(m2->value(1, 1, &ok), 5.0);
0064   QVERIFY(ok);
0065 
0066   m2->blank();
0067 
0068   m2->change(3, 3, 0, 0, 0, 0); //should not be legal
0069   QCOMPARE(m2->xNumSteps(), 3);
0070   QCOMPARE(m2->yNumSteps(), 3);
0071   QCOMPARE(m2->minX(), 0.0);
0072   QCOMPARE(m2->minY(), 0.0);
0073   QCOMPARE(m2->xStepSize(), 0.0);
0074   QCOMPARE(m2->yStepSize(), 0.0);
0075   QCOMPARE(m2->sampleCount(), 9);
0076 
0077   QVERIFY(!m2->setValue(0, 0, 1.0));
0078   ok = true;
0079   QCOMPARE(m2->value(0, 0, &ok), 0.0);
0080   QVERIFY(!ok);
0081 
0082   QVERIFY(!m2->setValue(1, 1, 5.0));
0083   QVERIFY(m2->value(1, 1) != 5.0);
0084   QVERIFY(m2->setValueRaw(2, 2, 6.0)); //fails
0085 
0086   Kst::MatrixPtr um1 = Kst::kst_cast<Kst::Matrix>(_store.createObject<Kst::Matrix>());
0087   um1->change(3, 3, 0, 0, 1, 1);
0088   um1->setEditable(true);
0089   um1->zero();
0090   QVERIFY(!um1->setValue(0, 0, 1.0));
0091   QVERIFY(!um1->setValue(1, 1, 1.0));
0092   QVERIFY(!um1->setValue(2, 2, 1.0));
0093 
0094   QVERIFY(um1->resize(3, 3, false));
0095   um1->zero();
0096   QVERIFY(um1->setValue(0, 0, 1.0));
0097   QVERIFY(um1->setValue(1, 1, 1.0));
0098   QVERIFY(um1->setValue(2, 2, 1.0));
0099 
0100   QVERIFY(um1->resize(2, 2, true));
0101   QCOMPARE(um1->sampleCount(), 4);
0102 
0103   QCOMPARE(um1->value(0, 0, &ok), 1.0);
0104   QVERIFY(ok);
0105   QCOMPARE(um1->value(0, 1, &ok), 0.0);
0106   QVERIFY(ok);
0107   QCOMPARE(um1->value(0, 2, &ok), 0.0);
0108   QVERIFY(!ok);
0109   QCOMPARE(um1->value(1, 0, &ok), 0.0);
0110   QVERIFY(ok);
0111   QCOMPARE(um1->value(1, 1, &ok), 1.0);
0112   QVERIFY(ok);
0113   QCOMPARE(um1->value(1, 2, &ok), 0.0);
0114   QVERIFY(!ok);
0115 
0116   QVERIFY(um1->resize(4, 4, true));
0117   QCOMPARE(um1->value(0, 0, &ok), 1.0);
0118   QVERIFY(ok);
0119   QCOMPARE(um1->value(0, 1, &ok), 0.0);
0120   QVERIFY(ok);
0121   QCOMPARE(um1->value(0, 2, &ok), 0.0);
0122   QVERIFY(ok);
0123   QCOMPARE(um1->value(1, 0, &ok), 0.0);
0124   QVERIFY(ok);
0125   QCOMPARE(um1->value(1, 1, &ok), 1.0);
0126   QVERIFY(ok);
0127   QCOMPARE(um1->value(1, 2, &ok), 0.0);
0128   QVERIFY(ok);
0129 
0130   QVERIFY(um1->resize(3, 3, true));
0131   QVERIFY(um1->setValue(0, 0, 1.716299));
0132   QVERIFY(um1->setValue(0, 1, -0.485527));
0133   QVERIFY(um1->setValue(0, 2, -0.288690));
0134   QVERIFY(um1->setValue(1, 0, 1.716299));
0135   QVERIFY(um1->setValue(1, 1, NAN));
0136   QVERIFY(um1->setValue(1, 2, -0.274957));
0137   QVERIFY(um1->setValue(2, 0, 1.711721));
0138   QVERIFY(um1->setValue(2, 1, -0.485527));
0139   QVERIFY(um1->setValue(2, 2, -0.293267));
0140 
0141   QCOMPARE(um1->value(0, 0), 1.716299);
0142   QCOMPARE(um1->value(0, 1),  -0.485527);
0143   QCOMPARE(um1->value(0, 2), -0.288690);
0144   QCOMPARE(um1->value(1, 0), 1.716299);
0145   QCOMPARE(um1->value(1, 1), 0.0);
0146   QCOMPARE(um1->value(1, 2), -0.274957);
0147   QCOMPARE(um1->value(2, 0), 1.711721);
0148   QCOMPARE(um1->value(2, 1), -0.485527);
0149   QCOMPARE(um1->value(2, 2), -0.293267);
0150 
0151   QCOMPARE(um1->minValue(), 0.0);
0152   QCOMPARE(um1->maxValue(), 0.0);
0153 
0154   Kst::MatrixPtr sm = Kst::kst_cast<Kst::Matrix>(_store.createObject<Kst::Matrix>());
0155   sm->change(2, 2, 0, 0, 1, 1);
0156 
0157   sm->setEditable(true);
0158   QVERIFY(sm->resize(2, 2, false));
0159   QCOMPARE(sm->xNumSteps(), 2);
0160   QCOMPARE(sm->yNumSteps(), 2);
0161 
0162   QVERIFY(sm->setValueRaw(0, 0, 0.0));
0163   QVERIFY(sm->setValueRaw(0, 1, 0.1));
0164   QVERIFY(sm->setValueRaw(1, 0, 1.0));
0165   QVERIFY(sm->setValueRaw(1, 1, 1.1));
0166 
0167   sm->calcNoSpikeRange(0);
0168   QCOMPARE(sm->minValueNoSpike(), 0.0);
0169   QCOMPARE(sm->maxValueNoSpike(), 0.0);
0170 
0171   sm->calcNoSpikeRange(-100);
0172   QCOMPARE(sm->minValueNoSpike(), 0.0);
0173   QCOMPARE(sm->maxValueNoSpike(), 0.0);
0174 
0175   sm->calcNoSpikeRange(0.9);
0176   QVERIFY(sm->minValueNoSpike() >= 1E+300 );
0177   QVERIFY(sm->maxValueNoSpike() <= -1E+300);
0178 }
0179 
0180 #ifdef KST_USE_QTEST_MAIN
0181 QTEST_MAIN(TestMatrix)
0182 #endif
0183 
0184 // vim: ts=2 sw=2 et