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