File indexing completed on 2024-05-05 03:48:42

0001 /*
0002     File                 : ReadStatFilterTest.cpp
0003     Project              : LabPlot
0004     Description          : Tests for the ReadStat I/O-filter.
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2021-2023 Stefan Gerlach <stefan.gerlach@uni.kn>
0007     SPDX-License-Identifier: GPL-2.0-or-later
0008 */
0009 
0010 #include "ReadStatFilterTest.h"
0011 #include "backend/datasources/filters/ReadStatFilter.h"
0012 #include "backend/lib/macros.h"
0013 #include "backend/spreadsheet/Spreadsheet.h"
0014 
0015 #include <KLocalizedString>
0016 
0017 void ReadStatFilterTest::initTestCase() {
0018     // needed in order to have the signals triggered by SignallingUndoCommand, see LabPlot.cpp
0019     qRegisterMetaType<const AbstractAspect*>("const AbstractAspect*");
0020     qRegisterMetaType<const AbstractColumn*>("const AbstractColumn*");
0021 }
0022 
0023 void ReadStatFilterTest::testDTAImport() {
0024     Spreadsheet spreadsheet(QStringLiteral("test"), false);
0025     ReadStatFilter filter;
0026 
0027     const QString& fileName = QFINDTESTDATA(QLatin1String("data/iris.dta"));
0028     const auto mode = AbstractFileFilter::ImportMode::Replace;
0029     filter.readDataFromFile(fileName, &spreadsheet, mode);
0030 
0031     QCOMPARE(spreadsheet.columnCount(), 5);
0032     QCOMPARE(spreadsheet.rowCount(), 150);
0033     QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Double);
0034     QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Double);
0035     QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Double);
0036     QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Double);
0037     QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::ColumnMode::Text);
0038 
0039     QCOMPARE(spreadsheet.column(0)->plotDesignation(), AbstractColumn::PlotDesignation::X);
0040     QCOMPARE(spreadsheet.column(1)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0041     QCOMPARE(spreadsheet.column(2)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0042     QCOMPARE(spreadsheet.column(3)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0043     QCOMPARE(spreadsheet.column(4)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0044 
0045     QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("sepallength"));
0046     QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("sepalwidth"));
0047     QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("petallength"));
0048     QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("petalwidth"));
0049     QCOMPARE(spreadsheet.column(4)->name(), QLatin1String("species"));
0050 
0051     FuzzyCompare(spreadsheet.column(0)->valueAt(0), 5.1, 1.e-6); // 5.09999990463
0052     FuzzyCompare(spreadsheet.column(0)->valueAt(1), 4.9, 1.e-7); // 4.90000009537
0053     FuzzyCompare(spreadsheet.column(0)->valueAt(2), 4.7, 1.e-7); // 4.69999980927
0054 
0055     QCOMPARE(spreadsheet.column(1)->valueAt(0), 3.5);
0056     FuzzyCompare(spreadsheet.column(2)->valueAt(0), 1.4, 1.e-7); // 1.39999997616
0057     FuzzyCompare(spreadsheet.column(3)->valueAt(0), 0.2, 1.e-7); // 0.20000000298
0058     QCOMPARE(spreadsheet.column(4)->textAt(0), QLatin1String("setosa"));
0059 
0060     DEBUG(Q_FUNC_INFO << ", value = " << spreadsheet.column(0)->valueAt(149))
0061     DEBUG(Q_FUNC_INFO << ", value = " << spreadsheet.column(2)->valueAt(149))
0062     DEBUG(Q_FUNC_INFO << ", value = " << spreadsheet.column(3)->valueAt(149))
0063 
0064     FuzzyCompare(spreadsheet.column(0)->valueAt(149), 5.9, 1.e-7); // 5.90000009536743
0065     QCOMPARE(spreadsheet.column(1)->valueAt(149), 3.);
0066     FuzzyCompare(spreadsheet.column(2)->valueAt(149), 5.1, 1.e-7); // 5.09999990463257
0067     FuzzyCompare(spreadsheet.column(3)->valueAt(149), 1.8, 1.e-7); // 1.79999995231628
0068     QCOMPARE(spreadsheet.column(4)->textAt(149), QLatin1String("virginica"));
0069 }
0070 
0071 void ReadStatFilterTest::testSASImport() {
0072     Spreadsheet spreadsheet(QStringLiteral("test"), false);
0073     ReadStatFilter filter;
0074 
0075     const QString& fileName = QFINDTESTDATA(QLatin1String("data/iris.sas7bdat"));
0076     const auto mode = AbstractFileFilter::ImportMode::Replace;
0077     filter.readDataFromFile(fileName, &spreadsheet, mode);
0078 
0079     QCOMPARE(spreadsheet.columnCount(), 5);
0080     QCOMPARE(spreadsheet.rowCount(), 150);
0081     QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Double);
0082     QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Double);
0083     QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Double);
0084     QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Double);
0085     QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::ColumnMode::Text);
0086 
0087     QCOMPARE(spreadsheet.column(0)->plotDesignation(), AbstractColumn::PlotDesignation::X);
0088     QCOMPARE(spreadsheet.column(1)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0089     QCOMPARE(spreadsheet.column(2)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0090     QCOMPARE(spreadsheet.column(3)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0091     QCOMPARE(spreadsheet.column(4)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0092 
0093     QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("Sepal_Length : BEST"));
0094     QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Sepal_Width : BEST"));
0095     QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("Petal_Length : BEST"));
0096     QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("Petal_Width : BEST"));
0097     QCOMPARE(spreadsheet.column(4)->name(), QLatin1String("Species : $"));
0098 
0099     QCOMPARE(spreadsheet.column(0)->valueAt(0), 5.1);
0100     QCOMPARE(spreadsheet.column(0)->valueAt(1), 4.9);
0101     QCOMPARE(spreadsheet.column(0)->valueAt(2), 4.7);
0102 
0103     QCOMPARE(spreadsheet.column(1)->valueAt(0), 3.5);
0104     QCOMPARE(spreadsheet.column(2)->valueAt(0), 1.4);
0105     QCOMPARE(spreadsheet.column(3)->valueAt(0), 0.2);
0106     QCOMPARE(spreadsheet.column(4)->textAt(0), QLatin1String("setosa"));
0107 
0108     QCOMPARE(spreadsheet.column(0)->valueAt(149), 5.9);
0109     QCOMPARE(spreadsheet.column(1)->valueAt(149), 3.);
0110     QCOMPARE(spreadsheet.column(2)->valueAt(149), 5.1);
0111     QCOMPARE(spreadsheet.column(3)->valueAt(149), 1.8);
0112     QCOMPARE(spreadsheet.column(4)->textAt(149), QLatin1String("virgin"));
0113 }
0114 
0115 void ReadStatFilterTest::testSAVImport() {
0116     Spreadsheet spreadsheet(QStringLiteral("test"), false);
0117     ReadStatFilter filter;
0118 
0119     const QString& fileName = QFINDTESTDATA(QLatin1String("data/iris.sav"));
0120     const auto mode = AbstractFileFilter::ImportMode::Replace;
0121     filter.readDataFromFile(fileName, &spreadsheet, mode);
0122 
0123     QCOMPARE(spreadsheet.columnCount(), 5);
0124     QCOMPARE(spreadsheet.rowCount(), 150);
0125     QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Double);
0126     QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Double);
0127     QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Double);
0128     QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Double);
0129     QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::ColumnMode::Double);
0130 
0131     QCOMPARE(spreadsheet.column(0)->plotDesignation(), AbstractColumn::PlotDesignation::X);
0132     QCOMPARE(spreadsheet.column(1)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0133     QCOMPARE(spreadsheet.column(2)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0134     QCOMPARE(spreadsheet.column(3)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0135     QCOMPARE(spreadsheet.column(4)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0136 
0137     QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("Sepal.Length"));
0138     QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("Sepal.Width"));
0139     QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("Petal.Length"));
0140     QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("Petal.Width"));
0141     QCOMPARE(spreadsheet.column(4)->name(), QLatin1String("Species : labels0"));
0142 
0143     QCOMPARE(spreadsheet.column(0)->valueAt(0), 5.1);
0144     QCOMPARE(spreadsheet.column(0)->valueAt(1), 4.9);
0145     QCOMPARE(spreadsheet.column(0)->valueAt(2), 4.7);
0146 
0147     QCOMPARE(spreadsheet.column(1)->valueAt(0), 3.5);
0148     QCOMPARE(spreadsheet.column(2)->valueAt(0), 1.4);
0149     QCOMPARE(spreadsheet.column(3)->valueAt(0), 0.2);
0150     QCOMPARE(spreadsheet.column(4)->valueAt(0), 1);
0151 
0152     QCOMPARE(spreadsheet.column(0)->valueAt(149), 5.9);
0153     QCOMPARE(spreadsheet.column(1)->valueAt(149), 3.);
0154     QCOMPARE(spreadsheet.column(2)->valueAt(149), 5.1);
0155     QCOMPARE(spreadsheet.column(3)->valueAt(149), 1.8);
0156     QCOMPARE(spreadsheet.column(4)->valueAt(149), 3);
0157 
0158     // check value label
0159     QVERIFY(spreadsheet.column(4)->valueLabels() != nullptr);
0160     QCOMPARE(spreadsheet.column(4)->valueLabels()->count(), 3);
0161     for (const auto& vl : *spreadsheet.column(4)->valueLabels()) {
0162         if (vl.value == 1)
0163             QCOMPARE(vl.label, QLatin1String("setosa"));
0164         if (vl.value == 2)
0165             QCOMPARE(vl.label, QLatin1String("versicolor"));
0166         if (vl.value == 3)
0167             QCOMPARE(vl.label, QLatin1String("virginica"));
0168     }
0169 }
0170 
0171 void ReadStatFilterTest::testPORImport() {
0172     Spreadsheet spreadsheet(QStringLiteral("test"), false);
0173     ReadStatFilter filter;
0174 
0175     const QString& fileName = QFINDTESTDATA(QLatin1String("data/sample.por"));
0176     const auto mode = AbstractFileFilter::ImportMode::Replace;
0177     filter.readDataFromFile(fileName, &spreadsheet, mode);
0178 
0179     QCOMPARE(spreadsheet.columnCount(), 7);
0180     QCOMPARE(spreadsheet.rowCount(), 5);
0181     QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text);
0182     QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Double);
0183     QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Double);
0184     QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Double);
0185     QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::ColumnMode::Double);
0186     QCOMPARE(spreadsheet.column(5)->columnMode(), AbstractColumn::ColumnMode::Double);
0187     QCOMPARE(spreadsheet.column(6)->columnMode(), AbstractColumn::ColumnMode::Double);
0188 
0189     QCOMPARE(spreadsheet.column(0)->plotDesignation(), AbstractColumn::PlotDesignation::X);
0190     QCOMPARE(spreadsheet.column(1)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0191     QCOMPARE(spreadsheet.column(2)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0192     QCOMPARE(spreadsheet.column(3)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0193     QCOMPARE(spreadsheet.column(4)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0194     QCOMPARE(spreadsheet.column(5)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0195     QCOMPARE(spreadsheet.column(6)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0196 
0197     QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("MYCHAR"));
0198     QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("MYNUM"));
0199     QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("MYDATE"));
0200     QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("DTIME"));
0201     QCOMPARE(spreadsheet.column(4)->name(), QLatin1String("MYLABL : labels0"));
0202     QCOMPARE(spreadsheet.column(5)->name(), QLatin1String("MYORD : labels1"));
0203     QCOMPARE(spreadsheet.column(6)->name(), QLatin1String("MYTIME"));
0204 
0205     QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a"));
0206     QCOMPARE(spreadsheet.column(0)->textAt(1), QLatin1String("b"));
0207     QCOMPARE(spreadsheet.column(0)->textAt(2), QLatin1String("c"));
0208     QCOMPARE(spreadsheet.column(0)->textAt(3), QLatin1String("d"));
0209     QCOMPARE(spreadsheet.column(0)->textAt(4), QLatin1String("e"));
0210 
0211     QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.1);
0212     QCOMPARE(spreadsheet.column(1)->valueAt(1), 1.2);
0213     QCOMPARE(spreadsheet.column(1)->valueAt(2), -1000.3);
0214     QCOMPARE(spreadsheet.column(1)->valueAt(3), -1.4);
0215     QCOMPARE(spreadsheet.column(1)->valueAt(4), 1000.3);
0216 
0217     QCOMPARE(spreadsheet.column(2)->valueAt(0), 1.3744944e10);
0218     QCOMPARE(spreadsheet.column(2)->valueAt(1), 9.3901248e9);
0219     QCOMPARE(spreadsheet.column(2)->valueAt(2), 1.190376e10);
0220     QCOMPARE(spreadsheet.column(2)->valueAt(3), 6.8256e6);
0221     QCOMPARE(spreadsheet.column(2)->valueAt(4), NAN);
0222 
0223     QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.374498061e10);
0224     QCOMPARE(spreadsheet.column(3)->valueAt(1), 9.39016141e9);
0225     QCOMPARE(spreadsheet.column(3)->valueAt(2), 1.190376e10);
0226     QCOMPARE(spreadsheet.column(3)->valueAt(3), 6.8256e6);
0227     QCOMPARE(spreadsheet.column(3)->valueAt(4), NAN);
0228 
0229     QCOMPARE(spreadsheet.column(4)->valueAt(0), 1);
0230     QCOMPARE(spreadsheet.column(4)->valueAt(1), 2);
0231     QCOMPARE(spreadsheet.column(4)->valueAt(2), 1);
0232     QCOMPARE(spreadsheet.column(4)->valueAt(3), 2);
0233     QCOMPARE(spreadsheet.column(4)->valueAt(4), 1);
0234 
0235     QCOMPARE(spreadsheet.column(5)->valueAt(0), 1);
0236     QCOMPARE(spreadsheet.column(5)->valueAt(1), 2);
0237     QCOMPARE(spreadsheet.column(5)->valueAt(2), 3);
0238     QCOMPARE(spreadsheet.column(5)->valueAt(3), 1);
0239     QCOMPARE(spreadsheet.column(5)->valueAt(4), 1);
0240 
0241     QCOMPARE(spreadsheet.column(6)->valueAt(0), 36610);
0242     QCOMPARE(spreadsheet.column(6)->valueAt(1), 83410);
0243     QCOMPARE(spreadsheet.column(6)->valueAt(2), 0);
0244     QCOMPARE(spreadsheet.column(6)->valueAt(3), 58210);
0245     QCOMPARE(spreadsheet.column(6)->valueAt(4), NAN);
0246 
0247     // check value label
0248     QVERIFY(spreadsheet.column(4)->valueLabels() != nullptr);
0249     QCOMPARE(spreadsheet.column(4)->valueLabels()->count(), 2);
0250     for (const auto& vl : *spreadsheet.column(4)->valueLabels()) {
0251         if (vl.value == 1)
0252             QCOMPARE(vl.label, QLatin1String("Male"));
0253         if (vl.value == 2)
0254             QCOMPARE(vl.label, QLatin1String("Female"));
0255     }
0256 
0257     QVERIFY(spreadsheet.column(5)->valueLabels() != nullptr);
0258     QCOMPARE(spreadsheet.column(5)->valueLabels()->count(), 3);
0259     for (const auto& vl : *spreadsheet.column(5)->valueLabels()) {
0260         if (vl.value == 1)
0261             QCOMPARE(vl.label, QLatin1String("low"));
0262         if (vl.value == 2)
0263             QCOMPARE(vl.label, QLatin1String("medium"));
0264         if (vl.value == 3)
0265             QCOMPARE(vl.label, QLatin1String("high"));
0266     }
0267 }
0268 
0269 void ReadStatFilterTest::testXPTImport() {
0270     Spreadsheet spreadsheet(QStringLiteral("test"), false);
0271     ReadStatFilter filter;
0272 
0273     const QString& fileName = QFINDTESTDATA(QLatin1String("data/sample.xpt"));
0274     const auto mode = AbstractFileFilter::ImportMode::Replace;
0275     filter.readDataFromFile(fileName, &spreadsheet, mode);
0276 
0277     QCOMPARE(spreadsheet.columnCount(), 7);
0278     QCOMPARE(spreadsheet.rowCount(), 5);
0279     QCOMPARE(spreadsheet.column(0)->columnMode(), AbstractColumn::ColumnMode::Text);
0280     QCOMPARE(spreadsheet.column(1)->columnMode(), AbstractColumn::ColumnMode::Double);
0281     QCOMPARE(spreadsheet.column(2)->columnMode(), AbstractColumn::ColumnMode::Double);
0282     QCOMPARE(spreadsheet.column(3)->columnMode(), AbstractColumn::ColumnMode::Double);
0283     QCOMPARE(spreadsheet.column(4)->columnMode(), AbstractColumn::ColumnMode::Double);
0284     QCOMPARE(spreadsheet.column(5)->columnMode(), AbstractColumn::ColumnMode::Double);
0285     QCOMPARE(spreadsheet.column(6)->columnMode(), AbstractColumn::ColumnMode::Double);
0286 
0287     QCOMPARE(spreadsheet.column(0)->plotDesignation(), AbstractColumn::PlotDesignation::X);
0288     QCOMPARE(spreadsheet.column(1)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0289     QCOMPARE(spreadsheet.column(2)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0290     QCOMPARE(spreadsheet.column(3)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0291     QCOMPARE(spreadsheet.column(4)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0292     QCOMPARE(spreadsheet.column(5)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0293     QCOMPARE(spreadsheet.column(6)->plotDesignation(), AbstractColumn::PlotDesignation::Y);
0294 
0295     QCOMPARE(spreadsheet.column(0)->name(), QLatin1String("MYCHAR : $1"));
0296     QCOMPARE(spreadsheet.column(1)->name(), QLatin1String("MYNUM : BEST12"));
0297     QCOMPARE(spreadsheet.column(2)->name(), QLatin1String("MYDATE : YYMMDD10"));
0298     QCOMPARE(spreadsheet.column(3)->name(), QLatin1String("DTIME : DATETIME"));
0299     QCOMPARE(spreadsheet.column(4)->name(), QLatin1String("MYLABL : BEST12"));
0300     QCOMPARE(spreadsheet.column(5)->name(), QLatin1String("MYORD : BEST12"));
0301     QCOMPARE(spreadsheet.column(6)->name(), QLatin1String("MYTIME : TIME20.3"));
0302 
0303     QCOMPARE(spreadsheet.column(0)->textAt(0), QLatin1String("a"));
0304     QCOMPARE(spreadsheet.column(0)->textAt(1), QLatin1String("b"));
0305     QCOMPARE(spreadsheet.column(0)->textAt(2), QLatin1String("c"));
0306     QCOMPARE(spreadsheet.column(0)->textAt(3), QLatin1String("d"));
0307     QCOMPARE(spreadsheet.column(0)->textAt(4), QLatin1String("e"));
0308 
0309     QCOMPARE(spreadsheet.column(1)->valueAt(0), 1.1);
0310     QCOMPARE(spreadsheet.column(1)->valueAt(1), 1.2);
0311     QCOMPARE(spreadsheet.column(1)->valueAt(2), -1000.3);
0312     QCOMPARE(spreadsheet.column(1)->valueAt(3), -1.4);
0313     QCOMPARE(spreadsheet.column(1)->valueAt(4), 1000.3);
0314 
0315     QCOMPARE(spreadsheet.column(2)->valueAt(0), 21310);
0316     QCOMPARE(spreadsheet.column(2)->valueAt(1), -29093);
0317     QCOMPARE(spreadsheet.column(2)->valueAt(2), 0);
0318     QCOMPARE(spreadsheet.column(2)->valueAt(3), -137696);
0319     QCOMPARE(spreadsheet.column(2)->valueAt(4), NAN);
0320 
0321     QCOMPARE(spreadsheet.column(3)->valueAt(0), 1.84122061e9);
0322     QCOMPARE(spreadsheet.column(3)->valueAt(1), -2.51359859e9);
0323     QCOMPARE(spreadsheet.column(3)->valueAt(2), 0);
0324     QCOMPARE(spreadsheet.column(3)->valueAt(3), -1.18969344e10);
0325     QCOMPARE(spreadsheet.column(3)->valueAt(4), NAN);
0326 
0327     QCOMPARE(spreadsheet.column(4)->valueAt(0), 1);
0328     QCOMPARE(spreadsheet.column(4)->valueAt(1), 2);
0329     QCOMPARE(spreadsheet.column(4)->valueAt(2), 1);
0330     QCOMPARE(spreadsheet.column(4)->valueAt(3), 2);
0331     QCOMPARE(spreadsheet.column(4)->valueAt(4), 1);
0332 
0333     QCOMPARE(spreadsheet.column(5)->valueAt(0), 1);
0334     QCOMPARE(spreadsheet.column(5)->valueAt(1), 2);
0335     QCOMPARE(spreadsheet.column(5)->valueAt(2), 3);
0336     QCOMPARE(spreadsheet.column(5)->valueAt(3), 1);
0337     QCOMPARE(spreadsheet.column(5)->valueAt(4), 1);
0338 
0339     QCOMPARE(spreadsheet.column(6)->valueAt(0), 36610);
0340     QCOMPARE(spreadsheet.column(6)->valueAt(1), 83410);
0341     QCOMPARE(spreadsheet.column(6)->valueAt(2), 0);
0342     QCOMPARE(spreadsheet.column(6)->valueAt(3), 58210);
0343     QCOMPARE(spreadsheet.column(6)->valueAt(4), NAN);
0344 
0345     // no value label
0346 }
0347 
0348 QTEST_MAIN(ReadStatFilterTest)