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

0001 /*
0002     File                 : IntegrationTest.cpp
0003     Project              : LabPlot
0004     Description          : Tests for numerical integration
0005     --------------------------------------------------------------------
0006     SPDX-FileCopyrightText: 2018 Stefan Gerlach <stefan.gerlach@uni.kn>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #include "IntegrationTest.h"
0012 #include "backend/core/column/Column.h"
0013 #include "backend/worksheet/plots/cartesian/XYIntegrationCurve.h"
0014 
0015 // ##############################################################################
0016 
0017 void IntegrationTest::testLinear() {
0018     // data
0019     QVector<int> xData = {1, 2, 3, 4};
0020     QVector<double> yData = {1., 2., 3., 4.};
0021 
0022     // data source columns
0023     Column xDataColumn(QStringLiteral("x"), AbstractColumn::ColumnMode::Integer);
0024     xDataColumn.replaceInteger(0, xData);
0025 
0026     Column yDataColumn(QStringLiteral("y"), AbstractColumn::ColumnMode::Double);
0027     yDataColumn.replaceValues(0, yData);
0028 
0029     XYIntegrationCurve integrationCurve(QStringLiteral("integration"));
0030     integrationCurve.setXDataColumn(&xDataColumn);
0031     integrationCurve.setYDataColumn(&yDataColumn);
0032 
0033     // prepare the integration
0034     XYIntegrationCurve::IntegrationData integrationData = integrationCurve.integrationData();
0035     integrationCurve.setIntegrationData(integrationData);
0036 
0037     // perform the integration
0038     integrationCurve.recalculate();
0039     const XYIntegrationCurve::IntegrationResult& integrationResult = integrationCurve.integrationResult();
0040 
0041     // check the results
0042     QCOMPARE(integrationResult.available, true);
0043     QCOMPARE(integrationResult.valid, true);
0044 
0045     const AbstractColumn* resultXDataColumn = integrationCurve.xColumn();
0046     const AbstractColumn* resultYDataColumn = integrationCurve.yColumn();
0047 
0048     const int np = resultXDataColumn->rowCount();
0049     QCOMPARE(np, 4);
0050 
0051     for (int i = 0; i < np; i++)
0052         QCOMPARE(resultXDataColumn->valueAt(i), (double)i + 1);
0053 
0054     QCOMPARE(resultYDataColumn->valueAt(0), 0.);
0055     QCOMPARE(resultYDataColumn->valueAt(1), 1.5);
0056     QCOMPARE(resultYDataColumn->valueAt(2), 4.);
0057     QCOMPARE(resultYDataColumn->valueAt(3), 7.5);
0058 }
0059 
0060 QTEST_MAIN(IntegrationTest)