FreeCAD

Форк
0
/
TestMaterialProperties.cpp 
226 строк · 9.4 Кб
1
// SPDX-License-Identifier: LGPL-2.1-or-later
2
/***************************************************************************
3
 *   Copyright (c) 2023 David Carter <dcarter@david.carter.ca>             *
4
 *                                                                         *
5
 *   This file is part of FreeCAD.                                         *
6
 *                                                                         *
7
 *   FreeCAD is free software: you can redistribute it and/or modify it    *
8
 *   under the terms of the GNU Lesser General Public License as           *
9
 *   published by the Free Software Foundation, either version 2.1 of the  *
10
 *   License, or (at your option) any later version.                       *
11
 *                                                                         *
12
 *   FreeCAD is distributed in the hope that it will be useful, but        *
13
 *   WITHOUT ANY WARRANTY; without even the implied warranty of            *
14
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      *
15
 *   Lesser General Public License for more details.                       *
16
 *                                                                         *
17
 *   You should have received a copy of the GNU Lesser General Public      *
18
 *   License along with FreeCAD. If not, see                               *
19
 *   <https://www.gnu.org/licenses/>.                                      *
20
 *                                                                         *
21
 **************************************************************************/
22

23
#include <gtest/gtest.h>
24

25
#include <Mod/Material/App/PreCompiled.h>
26
#ifndef _PreComp_
27
#endif
28

29
#include <memory>
30

31
#include <QMetaType>
32
#include <QString>
33

34
#include <App/Application.h>
35
#include <Gui/MetaTypes.h>
36

37
#include <Mod/Material/App/MaterialManager.h>
38
#include <Mod/Material/App/Model.h>
39
#include <Mod/Material/App/ModelManager.h>
40
#include <Mod/Material/App/ModelUuids.h>
41

42
class TestMaterialProperties: public ::testing::Test
43
{
44
protected:
45
    static void SetUpTestSuite()
46
    {}
47

48
    void SetUp() override
49
    {
50
        // 2D Properties
51
        modelProp = Materials::ModelProperty(QString::fromStdString("Density"),  // Name
52
                                             QString::fromStdString("D"),        // Header
53
                                             QString::fromStdString("2DArray"),  // Type
54
                                             QString::fromStdString(""),         // Units
55
                                             QString::fromStdString(""),         // URL
56
                                             QString::fromStdString("desc"));    // Description
57
        modelProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
58
                                              QString::fromStdString("T"),
59
                                              QString::fromStdString("Quantity"),
60
                                              QString::fromStdString("C"),
61
                                              QString::fromStdString(""),
62
                                              QString::fromStdString("desc1"));
63
        modelProp2 = Materials::ModelProperty(
64
            QString::fromStdString("Density"),
65
            QString::fromStdString("D"),
66
            QString::fromStdString("Quantity"),
67
            QString::fromStdString("kg/m^3"),
68
            QString::fromStdString("https://en.wikipedia.org/wiki/Density"),
69
            QString::fromStdString("desc2"));
70

71
        modelProp.addColumn(modelProp1);
72
        modelProp.addColumn(modelProp2);
73

74
        // 3D properties
75
        model3DProp = Materials::ModelProperty(
76
            QString::fromStdString("StressStrain"),     // Name
77
            QString::fromStdString("Stress / Strain"),  // Header
78
            QString::fromStdString("3DArray"),          // Type
79
            QString::fromStdString(""),                 // Units
80
            QString::fromStdString(""),                 // URL
81
            QString::fromStdString("3 Dimensional array showing stress and strain as a function of "
82
                                   "temperature"));  // Description
83
        model3DProp1 = Materials::ModelProperty(QString::fromStdString("Temperature"),
84
                                                QString::fromStdString("T"),
85
                                                QString::fromStdString("Quantity"),
86
                                                QString::fromStdString("C"),
87
                                                QString::fromStdString(""),
88
                                                QString::fromStdString("desc1"));
89
        model3DProp2 = Materials::ModelProperty(QString::fromStdString("Stress"),
90
                                                QString::fromStdString("Stress"),
91
                                                QString::fromStdString("Quantity"),
92
                                                QString::fromStdString("MPa"),
93
                                                QString::fromStdString(""),
94
                                                QString::fromStdString("desc2"));
95
        model3DProp3 = Materials::ModelProperty(QString::fromStdString("Strain"),
96
                                                QString::fromStdString("Strain"),
97
                                                QString::fromStdString("Quantity"),
98
                                                QString::fromStdString("MPa"),
99
                                                QString::fromStdString(""),
100
                                                QString::fromStdString("desc3"));
101

102
        model3DProp.addColumn(model3DProp1);
103
        model3DProp.addColumn(model3DProp2);
104
        model3DProp.addColumn(model3DProp3);
105
    }
106

107
    // void TearDown() override {}
108

109
    Materials::ModelProperty modelProp;
110
    Materials::ModelProperty modelProp1;
111
    Materials::ModelProperty modelProp2;
112
    Materials::ModelProperty model3DProp;
113
    Materials::ModelProperty model3DProp1;
114
    Materials::ModelProperty model3DProp2;
115
    Materials::ModelProperty model3DProp3;
116
};
117

118
TEST_F(TestMaterialProperties, TestEmpty)
119
{
120
    Materials::MaterialProperty prop;
121
    EXPECT_EQ(prop.getType(), Materials::MaterialValue::None);
122
    EXPECT_TRUE(prop.isNull());
123
    auto variant = prop.getValue();
124
    EXPECT_TRUE(variant.isNull());
125
    EXPECT_FALSE(variant.canConvert<QString>());
126
    EXPECT_TRUE(variant.toString().isNull());
127
    EXPECT_TRUE(variant.toString().isEmpty());
128
    EXPECT_EQ(variant.toString().size(), 0);
129
}
130

131
TEST_F(TestMaterialProperties, TestSingle)
132
{
133
    Materials::MaterialProperty prop(modelProp1, QLatin1String("sampleUUID"));
134
    EXPECT_EQ(prop.getType(), Materials::MaterialValue::Quantity);
135
    EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
136
    EXPECT_TRUE(prop.isNull());
137
    auto variant = prop.getValue();
138
    EXPECT_TRUE(variant.canConvert<Base::Quantity>());
139
    EXPECT_FALSE(variant.value<Base::Quantity>().isValid());
140
    EXPECT_FALSE(variant.canConvert<QString>());
141
    EXPECT_TRUE(variant.toString().isNull());
142
    EXPECT_TRUE(variant.toString().isEmpty());
143
    EXPECT_EQ(variant.toString().size(), 0);
144
}
145

146
void check2DArray(Materials::MaterialProperty& prop)
147
{
148
    EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array2D);
149
    EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
150
    EXPECT_TRUE(prop.isNull());
151
    auto array = std::static_pointer_cast<Materials::Material2DArray>(prop.getMaterialValue());
152
    EXPECT_EQ(array->rows(), 0);
153
    auto variant = prop.getValue();  // Throw an error?
154
    EXPECT_FALSE(variant.canConvert<QString>());
155
    EXPECT_TRUE(variant.toString().isNull());
156
    EXPECT_TRUE(variant.toString().isEmpty());
157
    EXPECT_EQ(variant.toString().size(), 0);
158

159
    // Check the columns
160
    EXPECT_EQ(prop.columns(), 2);
161
}
162

163
TEST_F(TestMaterialProperties, Test2DArray)
164
{
165
    Materials::MaterialProperty prop(modelProp, QLatin1String("sampleUUID"));
166
    check2DArray(prop);
167
}
168

169
TEST_F(TestMaterialProperties, Test2DArrayCopy)
170
{
171
    Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
172
    Materials::MaterialProperty prop(propBase);
173
    check2DArray(prop);
174
}
175

176
TEST_F(TestMaterialProperties, Test2DArrayAssignment)
177
{
178
    Materials::MaterialProperty propBase(modelProp, QLatin1String("sampleUUID"));
179
    Materials::MaterialProperty prop;
180

181
    prop = propBase;
182
    check2DArray(prop);
183
}
184

185
void check3DArray(Materials::MaterialProperty& prop)
186
{
187
    EXPECT_EQ(prop.getType(), Materials::MaterialValue::Array3D);
188
    EXPECT_EQ(prop.getModelUUID(), QLatin1String("sampleUUID"));
189
    EXPECT_TRUE(prop.isNull());
190
    auto array = std::static_pointer_cast<Materials::Material3DArray>(prop.getMaterialValue());
191
    EXPECT_EQ(array->depth(), 0);
192
    auto variant = prop.getValue();  // Throw an error?
193
    EXPECT_FALSE(variant.canConvert<QString>());
194
    EXPECT_TRUE(variant.toString().isNull());
195
    EXPECT_TRUE(variant.toString().isEmpty());
196
    EXPECT_EQ(variant.toString().size(), 0);
197

198
    // Check the columns
199
    EXPECT_EQ(prop.columns(), 3);
200
}
201

202
TEST_F(TestMaterialProperties, Test3DArray)
203
{
204
    Materials::MaterialProperty prop(model3DProp, QLatin1String("sampleUUID"));
205
    check3DArray(prop);
206
}
207

208
TEST_F(TestMaterialProperties, Test3DArrayCopy)
209
{
210
    Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
211
    Materials::MaterialProperty prop(propBase);
212
    check3DArray(prop);
213
}
214

215
TEST_F(TestMaterialProperties, Test3DArrayAssignment)
216
{
217
    Materials::MaterialProperty propBase(model3DProp, QLatin1String("sampleUUID"));
218
    Materials::MaterialProperty prop;
219

220
    prop = propBase;
221
    check3DArray(prop);
222
}
223

224
// clang-format off
225

226
// clang-format on
227

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.