File: t_ScreeningAnalysisWizard_std.cxx

package info (click to toggle)
persalys 17.0.1%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 73,312 kB
  • sloc: xml: 496,863; cpp: 56,490; python: 3,605; sh: 389; makefile: 127; ansic: 14
file content (142 lines) | stat: -rw-r--r-- 5,119 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include "persalys/MorrisAnalysis.hxx"
#include "persalys/ScreeningAnalysisWizard.hxx"
#include "persalys/SymbolicPhysicalModel.hxx"

#include <openturns/OTtypes.hxx>
#include <openturns/Normal.hxx>

#include <QtTest/QtTest>

using namespace OT;

namespace PERSALYS
{
class TestScreeningAnalysisWizard : public QObject
{
  Q_OBJECT

public:
  TestScreeningAnalysisWizard()
  {
    // create the model
    Input Q("Q", 10200, Normal(10200, 100), "Primary energy");
    Input E("E", 3000, Normal(3000, 15), "Produced electric energy");
    Input C("C", 4000, Normal(4000, 60), "Valued thermal energy");
    Output Ep("Ep", "Primary energy savings");
    InputCollection inputCollection(3);
    inputCollection[0] = Q;
    inputCollection[1] = E;
    inputCollection[2] = C;
    OutputCollection outputCollection(1, Ep);

    Description formula(1, "1-(Q/((E/((1-0.05)*0.54))+(C/0.8)))");
    model = SymbolicPhysicalModel("model", inputCollection, outputCollection, formula);
  }

private:
  SymbolicPhysicalModel model;

private slots:
  void TestOutputsSelection()
  {
    // create the analysis
    MorrisAnalysis analysis("analysis", model);

    // create the wizard
    ScreeningAnalysisWizard wizard(analysis);
    wizard.show();

    // checks

    // - first page
    OutputsSelectionGroupBox * outputsSelectionGroupBox = wizard.introPage_->findChild<OutputsSelectionGroupBox*>();
    TemporaryLabel * errorMessageLabel = wizard.introPage_->findChild<TemporaryLabel*>();
    TitledComboBox * comboBox = outputsSelectionGroupBox->findChild<TitledComboBox*>();
    ListWidgetWithCheckBox * listWidget = outputsSelectionGroupBox->findChild<ListWidgetWithCheckBox*>();

    QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
    QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");

    QTest::mouseClick(comboBox, Qt::LeftButton); // open listwidget
    QTest::mouseClick(listWidget->viewport(), Qt::LeftButton); // deselect all
    QVERIFY2(!wizard.validateCurrentPage(), "Page must be not valid");
    QVERIFY2(!errorMessageLabel->text().isEmpty(), "Label must be not empty");

    wizard.next();
    QVERIFY2(wizard.currentId() == 0, "Current page ID must be 0"); // can not go to next page

    QTest::mouseClick(listWidget->viewport(), Qt::LeftButton); // select all
    QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
    QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");
  }


  void TestMorrisPage()
  {
    // create the analysis
    MorrisAnalysis analysis("analysis", model);
    Interval initBounds(analysis.getBounds());

    // create the wizard
    ScreeningAnalysisWizard wizard(analysis);
    wizard.show();

    // checks

    // - second page
    wizard.next();
    TemporaryLabel * errorMessageLabel = wizard.morrisPage_->findChild<TemporaryLabel*>();
    MorrisTableModel * tableModel = wizard.morrisPage_->findChild<MorrisTableModel*>();

    QVERIFY2(wizard.currentId() == 1, "Current page ID must be 1");
    QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
    QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");

    QVERIFY2(tableModel->data(tableModel->index(0, 0)).toString() == "Q", "wrong name");
    QVERIFY2(tableModel->data(tableModel->index(0, 1)).toString() == "Primary energy", "wrong description");
    QVERIFY2(tableModel->data(tableModel->index(0, 2)).toString() == QString::number(initBounds.getLowerBound()[0], 'g', 12), "wrong lower bound value");
    QVERIFY2(tableModel->data(tableModel->index(0, 3)).toString() == QString::number(initBounds.getUpperBound()[0], 'g', 12), "wrong upper bound value");

    tableModel->setData(tableModel->index(0, 2), 10500, Qt::EditRole);
    QVERIFY2(!wizard.validateCurrentPage(), "Page must be not valid");
    QVERIFY2(!errorMessageLabel->text().isEmpty(), "Label must be not empty");

    tableModel->setData(tableModel->index(0, 2), initBounds.getLowerBound()[0], Qt::EditRole);
    QVERIFY2(wizard.validateCurrentPage(), "Page must be valid");
    QVERIFY2(errorMessageLabel->text().isEmpty(), "Label must be empty");

    bool analysisEquality = wizard.getAnalysis().getParameters() == analysis.getParameters();
    QVERIFY2(analysisEquality, "The two MorrisAnalysis must be equal");
  }


  void TestMorris()
  {
    // create the analysis
    MorrisAnalysis analysis("analysis", model);

    // create the wizard
    ScreeningAnalysisWizard wizard(analysis);
    wizard.show();

    // checks

    // - first page
    QVERIFY2(wizard.currentId() == 0, "Current page ID must be 0");
    // - second page
    wizard.next();
    QVERIFY2(wizard.currentId() == 1, "Current page ID must be 1");
    // - third page
    wizard.next();
    QVERIFY2(wizard.currentId() == 2, "Current page ID must be 2");

    QVERIFY2(wizard.nextId() == -1, "Next page ID must be -1");

    bool analysisEquality = wizard.getAnalysis().getParameters() == analysis.getParameters();
    QVERIFY2(analysisEquality, "The two MorrisAnalysis must be equal");
  }
};
}

QTEST_MAIN(PERSALYS::TestScreeningAnalysisWizard)
#include "t_ScreeningAnalysisWizard_std.moc"