From bdb9a7eb8c966943ae83073c0a883d0f7a5dcf16 Mon Sep 17 00:00:00 2001 From: KaratasD Date: Mon, 11 Oct 2021 15:55:07 +0200 Subject: [PATCH 1/2] unit_tests_added --- UnitTests/test_basicObjects.py | 82 -- UnitTests/test_basic_objects.py | 415 ++++++++ UnitTests/test_loads.py | 1106 +++++++++++++++++++++ UnitTests/test_newFunctionalityTesting.py | 39 - 4 files changed, 1521 insertions(+), 121 deletions(-) delete mode 100644 UnitTests/test_basicObjects.py create mode 100644 UnitTests/test_basic_objects.py create mode 100644 UnitTests/test_loads.py delete mode 100644 UnitTests/test_newFunctionalityTesting.py diff --git a/UnitTests/test_basicObjects.py b/UnitTests/test_basicObjects.py deleted file mode 100644 index c528c5e6..00000000 --- a/UnitTests/test_basicObjects.py +++ /dev/null @@ -1,82 +0,0 @@ -import os -import sys -baseName = os.path.basename(__file__) -dirName = os.path.dirname(__file__) -print('basename: ', baseName) -print('dirname: ', dirName) -sys.path.append(dirName + r'/..') - -from RFEM.enums import * -from RFEM.dataTypes import * -from RFEM.initModel import * -from RFEM.BasicObjects.material import * -from RFEM.BasicObjects.section import * -from RFEM.BasicObjects.thickness import * -from RFEM.BasicObjects.node import * -from RFEM.BasicObjects.line import * -from RFEM.BasicObjects.member import * -from RFEM.BasicObjects.surface import * -from RFEM.BasicObjects.solid import * -from RFEM.BasicObjects.opening import * -from RFEM.BasicObjects.lineSet import * -from RFEM.BasicObjects.memberSet import * -from RFEM.BasicObjects.surfaceSet import * -from RFEM.BasicObjects.solidSet import * -from RFEM.TypesForNodes.nodalSupport import * -from RFEM.TypesForMembers.memberHinge import * -from RFEM.LoadCasesAndCombinations.staticAnalysisSettings import * -from RFEM.LoadCasesAndCombinations.loadCase import * -from RFEM.Loads.nodalLoad import * -from RFEM.Loads.memberLoad import * -from RFEM.Loads.surfaceLoad import * - - -def test_material(): - - clientModel.service.begin_modification('new') - Material(1, 'S235') - clientModel.service.finish_modification() - - material = clientModel.service.get_material(1) - print(material) - assert material.name == 'S235' - - -def test_section(): - - clientModel.service.begin_modification('new') - Material(1, 'S235') - Section(1, 'IPE 200') - clientModel.service.finish_modification() - - section = clientModel.service.get_section(1) - print(section) - assert section.material == 1 - assert section.name == 'IPE 200' - assert section.rotation_angle == 0.0 - - -def test_nodes(): - - clientModel.service.begin_modification('new') - Node(1, 1.0, 2.0, 3.0) - Node(2, 4.0, 5.0, 6.0) - clientModel.service.finish_modification() - - nodeOne = clientModel.service.get_node(1) - nodeTwo = clientModel.service.get_node(2) - - assert nodeOne.coordinate_1 == 1.0 - assert nodeOne.coordinate_2 == 2.0 - assert nodeOne.coordinate_3 == 3.0 - assert nodeOne.coordinate_system == 1 - assert nodeOne.comment == None - assert nodeOne.is_generated == False - - assert nodeTwo.coordinate_1 == 4.0 - assert nodeTwo.coordinate_2 == 5.0 - assert nodeTwo.coordinate_3 == 6.0 - assert nodeTwo.coordinate_system == 1 - assert nodeTwo.comment == None - assert nodeTwo.is_generated == False - diff --git a/UnitTests/test_basic_objects.py b/UnitTests/test_basic_objects.py new file mode 100644 index 00000000..2804f00f --- /dev/null +++ b/UnitTests/test_basic_objects.py @@ -0,0 +1,415 @@ +import sys +sys.path.append(".") +from RFEM.enums import * +from RFEM.dataTypes import * +from RFEM.initModel import * +from RFEM.BasicObjects.material import * +from RFEM.BasicObjects.section import * +from RFEM.BasicObjects.thickness import * +from RFEM.BasicObjects.node import * +from RFEM.BasicObjects.line import * +from RFEM.BasicObjects.member import * +from RFEM.BasicObjects.surface import * +from RFEM.BasicObjects.solid import * +from RFEM.BasicObjects.opening import * +from RFEM.BasicObjects.lineSet import * +from RFEM.BasicObjects.memberSet import * +from RFEM.BasicObjects.surfaceSet import * +from RFEM.BasicObjects.solidSet import * +from RFEM.BasicObjects.member_by_line import * + +def test_line_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + Node(2, 4, 0, 0) + + Line(1, '1 2') + + clientModel.service.finish_modification() + + line = clientModel.service.get_line(1) + + assert line.no == 1 + assert line.length == 2 + +def test_line_polyline(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Line.Polyline(0, 1, '1 2') + + clientModel.service.finish_modification() + + line = clientModel.service.get_line(1) + + assert line.no == 1 + assert line.length == 5 + +def test_line_arc(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + Node(2, 4, 0, 0) + + Line.Arc(0, 1, [1, 2], [3, 3, 0], LineArcAlphaAdjustmentTarget.ALPHA_ADJUSTMENT_TARGET_BEGINNING_OF_ARC) + + clientModel.service.finish_modification() + + line = clientModel.service.get_line(1) + + assert line.no == 1 + assert line.type == "TYPE_ARC" + +def test_line_circle(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Line.Circle(0, 1, '1', [0, 0, 0], 3, [0, 0, 1]) + + clientModel.service.finish_modification() + + line = clientModel.service.get_line(1) + + assert line.no == 1 + assert line.circle_radius == 3 + +def test_lineSet(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + Node(2, 4, 0, 0) + Node(3, 6, 0, 0) + + Line(1, '1 2') + Line(2, '2 3') + + LineSet(1, '1 2', SetType.SET_TYPE_CONTINUOUS) + + clientModel.service.finish_modification() + + line_set = clientModel.service.get_line_set(1) + + assert line_set.no == 1 + assert line_set.length == 4 + +def test_material(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + clientModel.service.finish_modification() + + material = clientModel.service.get_material(1) + assert material.no == 1 + assert material.name == 'S235' + +def test_node_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + node = clientModel.service.get_node(1) + + assert node.no == 1 + assert node.coordinate_1 == 2 + +def test_memberbyline_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + Node(1, 0, 0, 0) + Node(2, 4, 0, 0) + Node(3, ) + + Line(1, '1 2') + + Section(1, 'IPE 240', 1) + + Member_by_line(1, MemberType.TYPE_BEAM, 1, 0, 1, 1) + + clientModel.service.finish_modification() + + member = clientModel.service.get_member(1) + + assert member.analytical_length == 4 + assert member.section_start == 1 + + +def test_member_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + + Section(1, 'IPE 300', 1) + + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + clientModel.service.finish_modification() + + member = clientModel.service.get_member(1) + + assert member.analytical_length == 5 + assert member.section_start == 1 + +def test_member_beam(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 6, 0, 0) + + Material(1, 'S235') + + Section(1, 'IPE 300', 1) + + Member.Beam(0, 1, 1, 2, 0, 1, 1) + + clientModel.service.finish_modification() + + member = clientModel.service.get_member(1) + + assert member.analytical_length == 6 + assert member.type == "TYPE_BEAM" + +## Other Member Types must be added to the main code. + +def test_member_set(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + Node(3, 10, 0, 0) + + Material(1, 'S235') + + Section(1, 'IPE 300', 1) + + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + Member(2, MemberType.TYPE_BEAM, 2, 3, 0, 1, 1) + + MemberSet(1, '1 2', SetType.SET_TYPE_GROUP) + + clientModel.service.finish_modification() + + member_set = clientModel.service.get_member_set(1) + + assert member_set.members == '1 2' + assert member_set.length == 10 + +## Bugs must be solved in Node.py + +def test_opening(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 4, 0, 0) + Node(3, 0, 4, 0) + Node(4, 4, 4, 0) + + Node(5, 2, 2, 0) + Node(6, 3, 2, 0) + Node(7, 3, 3, 0) + Node(8, 2, 3, 0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Line(5, '5 6') + Line(6, '5 8') + Line(7, '8 7') + Line(8, '7 6') + + Material(1, 'S235') + Thickness(1, '20 mm', 1, 0.02) + + Surface(1, '1 2 3 4', 1) + + Opening(1, '5 6 7 8') + + clientModel.service.finish_modification() + + opening = clientModel.service.get_opening(1) + + assert opening.area == 1 + assert opening.center_of_opening_x == 2.5 + +def test_section(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + Section(1, 'IPE 300') + + clientModel.service.finish_modification() + + section = clientModel.service.get_section(1) + + assert section.no == 1 + assert section.name == 'IPE 300' + + +## Solid Class should be updated. + +## SolidSet Class should be updated. + +## Surface Class should be update. Thickness no can't be assigned. + +def test_thickness_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '20 mm', 1, 0.02) + + clientModel.service.finish_modification() + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_UNIFORM" + assert thickness.uniform_thickness == 0.02 + +def test_thickness_uniform(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness.Uniform(0, 1, '1', 1, [0.03]) + + + clientModel.service.finish_modification() + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_UNIFORM" + assert thickness.uniform_thickness == 0.03 + +def test_thickness_3nodes(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 4, 0, 0) + Node(2, 2, 2, 0) + Node(3, 3, 4, 0) + + Thickness.Variable_3Nodes(0, 1, '2', 1, [0.2, 1, 0.1, 2, 0.05, 3]) + + clientModel.service.finish_modification() + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_VARIABLE_THREE_NODES" + assert thickness.thickness_1 == 0.2 + +def test_thickness_2nodes(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 4, 0, 0) + Node(2, 2, 2, 0) + + Thickness.Variable_2NodesAndDirection(0, 1, '3', 1, [0.2, 1, 0.1, 2, ThicknessDirection.THICKNESS_DIRECTION_IN_X]) + clientModel.service.finish_modification() + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_VARIABLE_TWO_NODES_AND_DIRECTION" + assert thickness.thickness_2 == 0.1 + +def test_thickness_4corners(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0, 0, 0) + Node(2, 3, 0, 0) + Node(3, 3, 3, 0) + Node(4, 0, 3, 0) + + Thickness.Variable_4SurfaceCorners + clientModel.service.finish_modification() + + Thickness.Variable_4SurfaceCorners(0, 1, '4', 1, [0.2, 1, 0.15, 2, 0.1, 3, 0.05, 4]) + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_VARIABLE_FOUR_SURFACE_CORNERS" + assert thickness.thickness_2 == 0.15 + +def test_thickness_circle(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness.Variable_Circle(0, 1, '5', 1, [0.2, 0.1]) + + clientModel.service.finish_modification() + + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_VARIABLE_CIRCLE" + assert thickness.thickness_circle_line == 0.1 + +def test_thickness_layers(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness.Layers(0, 1, '6', [[0, 1, 0.1, 0, ''], [0, 1, 0.2, 0, '']]) + clientModel.service.finish_modification() + + + thickness = clientModel.service.get_thickness(1) + + assert thickness.type == "TYPE_LAYERS" + assert round(thickness.layers_total_thickness, 2) == 0.3 + +## Thickness type Shape Orthotropy has bugs. Need to be updated + diff --git a/UnitTests/test_loads.py b/UnitTests/test_loads.py new file mode 100644 index 00000000..f32dec2a --- /dev/null +++ b/UnitTests/test_loads.py @@ -0,0 +1,1106 @@ +import sys +from RFEM.Loads import nodalLoad +sys.path.append(".") +from RFEM.enums import * +from RFEM.dataTypes import * +from RFEM.initModel import * +from RFEM.BasicObjects.material import * +from RFEM.BasicObjects.section import * +from RFEM.BasicObjects.thickness import * +from RFEM.BasicObjects.node import * +from RFEM.BasicObjects.line import * +from RFEM.BasicObjects.member import * +from RFEM.BasicObjects.surface import * +from RFEM.TypesForNodes.nodalSupport import * +from RFEM.LoadCasesAndCombinations.loadCase import * +from RFEM.LoadCasesAndCombinations.staticAnalysisSettings import * +from RFEM.Loads.memberLoad import * +from RFEM.Loads.freeLoad import * +from RFEM.Loads.lineLoad import * +from RFEM.Loads.nodalLoad import * +from RFEM.Loads.surfaceLoad import * +from RFEM.Loads.lineLoad import * + + +### Nodal Load Unit Tests ### + +def test_nodal_load_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + NodalLoad(1, 1, '1', LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, 5000) + + clientModel.service.finish_modification() + + nodal_load = clientModel.service.get_nodal_load(1, 1) + + assert nodal_load.no == 1 + assert nodal_load.force_magnitude == 5000 + +def test_nodal_load_force(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + NodalLoad.Force(0, 1, 1, '1', LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, 5000) + clientModel.service.finish_modification() + + nodal_load = clientModel.service.get_nodal_load(1, 1) + + assert nodal_load.no == 1 + assert nodal_load.force_magnitude == 5000 + +def test_nodal_load_moment(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + NodalLoad.Moment(0, 1, 1, '1', LoadDirectionType.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W, 5000) + + clientModel.service.finish_modification() + + nodal_load = clientModel.service.get_nodal_load(1, 1) + + assert nodal_load.no == 1 + assert nodal_load.moment_magnitude == 5000 + +def test_nodal_load_components(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + NodalLoad.Components(0, 1, 1, '1', [5000, 0, 0, 0, 6000, 0]) + + clientModel.service.finish_modification() + + nodal_load = clientModel.service.get_nodal_load(1, 1) + + assert nodal_load.components_moment_y == 6000 + assert nodal_load.components_force_x == 5000 + +def test_nodal_load_mass(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 2, 0, 0) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + NodalLoad.Mass(0, 1, 1, '1', False,[5000]) + + clientModel.service.finish_modification() + + nodal_load = clientModel.service.get_nodal_load(1, 1) + + assert nodal_load.no == 1 + assert nodal_load.mass_global == 5000 + + +### Member Load Unit Tests ### + + +def test_member_load_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad(1, 1, '1', LoadDirectionType.LOAD_DIRECTION_LOCAL_Z, 4000) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 4000 + +def test_member_load_force(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Force(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [6000]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 6000 + +def test_member_load_moment(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Moment(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [3000]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 3000 + +def test_member_load_mass(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Mass(0, 1, 1, '1', False, mass_components=[5000]) + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.mass_global == 5000 + +def test_member_load_temperature(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Temperature(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [0.497, 0.596]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.magnitude_t_b == 0.497 + assert member_load.magnitude_t_t == 0.596 + +def test_member_load_temperature_change(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.TemperatureChange(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [0.5, 0.6]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.magnitude_delta_t == 0.5 + assert member_load.magnitude_t_c == 0.6 + +def test_member_load_axial_strain(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.AxialStrain(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, [0.5]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.magnitude == 0.5 + assert member_load.load_type == "LOAD_TYPE_AXIAL_STRAIN" + +def test_member_load_axial_displacement(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.AxialDisplacement(0, 1, 1, '1', MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, 50) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 50 + +def test_member_load_precamber(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Precamber(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [5]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 5 + +def test_member_load_initial_prestress(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.InitialPrestress(0, 1, 1, '1', MemberLoadDirection.LOAD_DIRECTION_LOCAL_X, 50) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 50 + +def test_member_load_displacement(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Displacement(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [60]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 60 + +def test_member_load_rotation(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'IPE 300', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.Rotation(0, 1, 1, '1', MemberLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, MemberLoadDirection.LOAD_DIRECTION_LOCAL_Z, [0.6]) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 0.6 + +def test_member_load_pipecontentfull(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'CHS 100x4', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.PipeContentFull(0, 1, 1, '1', MemberLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, 50) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 50 + +def test_member_load_pipecontentpartial(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'CHS 100x4', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.PipeContentPartial(0, 1, 1, '1', MemberLoadDirectionOrientation.LOAD_DIRECTION_FORWARD, 50, 50) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 50 + +def test_member_load_pipeinternalpressure(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Node(1, 0, 0, 0) + Node(2, 5, 0, 0) + + Material(1, 'S235') + Section(1, 'CHS 100x4', 1) + Member(1, MemberType.TYPE_BEAM, 1, 2, 0, 1, 1) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + LoadCase(1, 'DEAD') + + MemberLoad.PipeInternalPressure(0, 1, 1, '1', 50) + + clientModel.service.finish_modification() + + member_load = clientModel.service.get_member_load(1, 1) + + assert member_load.no == 1 + assert member_load.magnitude == 50 + + +### Surface Load Unit Tests ### + +def test_surface_load_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad(1, 1, '1', 5000) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + assert surface_load.uniform_magnitude == 5000 + +def test_surface_load_force(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad.Force(0, 1, 1, '1', SurfaceLoadDirection.LOAD_DIRECTION_GLOBAL_Z_OR_USER_DEFINED_W_TRUE, SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, load_parameter=[5000]) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + assert surface_load.uniform_magnitude == 5000 + +def test_surface_load_temperature(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad.Temperature(0, 1, 1, '1', SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, load_parameter=[18, 2]) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + assert surface_load.uniform_magnitude_delta_t == 2 + +def test_surface_load_axial_strain(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad.AxialStrain(0, 1, 1, '1', SurfaceLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, load_parameter=[0.5, 1]) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + assert surface_load.magnitude_axial_strain_x == 0.5 + +def test_surface_load_precamber(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad.Precamber(0, 1, 1, '1', 50) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + assert surface_load.uniform_magnitude == 50 + +def test_surface_load_mass(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + SurfaceLoad.Mass(0, 1, 1, '1', individual_mass_components=True, mass_parameter=[500, 600, 700]) + + clientModel.service.finish_modification() + + surface_load = clientModel.service.get_surface_load(1, 1) + + assert surface_load.no == 1 + +### Line Load Unit Tests ## + +def test_line_load_init(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + LineLoad(1, 1, '1', magnitude=500) + + clientModel.service.finish_modification() + + line_load = clientModel.service.get_line_load(1, 1) + + assert line_load.no == 1 + assert line_load.magnitude == 500 + +def test_line_load_force(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + LineLoad.Force(LineLoad, 1, 1, '1', + load_distribution= LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter=[1000]) + + clientModel.service.finish_modification() + + line_load = clientModel.service.get_line_load(1, 1) + + assert line_load.no == 1 + assert line_load.magnitude == 1000 + +def test_line_load_moment(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + LineLoad.Moment(LineLoad, 1, 1, '1', + load_distribution= LineLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + load_parameter=[2000]) + + clientModel.service.finish_modification() + + line_load = clientModel.service.get_line_load(1, 1) + + assert line_load.no == 1 + assert line_load.magnitude == 2000 + +def test_line_load_mass(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Thickness(1, '1', 1, 0.1) + + Node(1, 0.0, 0.0, 0.0) + Node(2, 4, 0.0, 0.0) + Node(3, 0, 4.0, 0.0) + Node(4, 4, 4.0, 0.0) + + Line(1, '1 2') + Line(2, '2 4') + Line(3, '4 3') + Line(4, '3 1') + + Surface(1, '1 2 3 4', 1) + + NodalSupport(1, '1', NodalSupportType.FIXED) + NodalSupport(2, '2', NodalSupportType.FIXED) + NodalSupport(3, '3', NodalSupportType.FIXED) + NodalSupport(4, '4', NodalSupportType.FIXED) + + StaticAnalysisSettings(1, 'Linear', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + LineLoad.Mass(LineLoad, 1, 1, '1', + individual_mass_components= False, + mass_components= [10]) + + clientModel.service.finish_modification() + + line_load = clientModel.service.get_line_load(1, 1) + + assert line_load.no == 1 + assert line_load.mass_global == 10 + +### Free Load Unit Tests ### + +def test_free_concentrated_load(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0.0, 0.0, 0.0) + Node(2, 10.0, 0.0, 0.0) + Node(3, 10.0, 10.0, 0.0) + Node(4, 0.0, 10.0, 0.0) + Node(5, 0.0, 0.0, 10.0) + Node(6, 0.0, 10.0, 10.0) + + Line(1, '1 2') + Line(2, '2 3') + Line(3, '3 4') + Line(4, '4 1') + + Thickness(1, '1', 1, 0.05) + Surface(1, '1-4', 1) + + NodalSupport(1, '1', NodalSupportType.HINGED) + NodalSupport(2, '2', NodalSupportType.HINGED) + NodalSupport(3, '3', NodalSupportType.HINGED) + NodalSupport(4, '4', NodalSupportType.HINGED) + + StaticAnalysisSettings(1, 'LINEAR', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + FreeLoad.ConcentratedLoad(FreeLoad, 1, 1, load_parameter= [5000, 4, 2]) + + clientModel.service.finish_modification() + + free_load = clientModel.service.get_free_concentrated_load(1, 1) + + assert free_load.load_location_x == 4 + assert free_load.magnitude == 5000 + +def test_free_line_load(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0.0, 0.0, 0.0) + Node(2, 10.0, 0.0, 0.0) + Node(3, 10.0, 10.0, 0.0) + Node(4, 0.0, 10.0, 0.0) + Node(5, 0.0, 0.0, 10.0) + Node(6, 0.0, 10.0, 10.0) + + Line(1, '1 2') + Line(2, '2 3') + Line(3, '3 4') + Line(4, '4 1') + + Thickness(1, '1', 1, 0.05) + Surface(1, '1-4', 1) + + NodalSupport(1, '1', NodalSupportType.HINGED) + NodalSupport(2, '2', NodalSupportType.HINGED) + NodalSupport(3, '3', NodalSupportType.HINGED) + NodalSupport(4, '4', NodalSupportType.HINGED) + + StaticAnalysisSettings(1, 'LINEAR', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + FreeLoad.LineLoad(FreeLoad, 1, 1, '1', + FreeLineLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + FreeLineLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + [5000, 2, 2, 4, 4]) + + clientModel.service.finish_modification() + + free_load = clientModel.service.get_free_line_load(1, 1) + + assert free_load.load_location_first_x == 2 + assert free_load.magnitude_uniform == 5000 + +def test_free_rectangular_load(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0.0, 0.0, 0.0) + Node(2, 10.0, 0.0, 0.0) + Node(3, 10.0, 10.0, 0.0) + Node(4, 0.0, 10.0, 0.0) + Node(5, 0.0, 0.0, 10.0) + Node(6, 0.0, 10.0, 10.0) + + Line(1, '1 2') + Line(2, '2 3') + Line(3, '3 4') + Line(4, '4 1') + + Thickness(1, '1', 1, 0.05) + Surface(1, '1-4', 1) + + NodalSupport(1, '1', NodalSupportType.HINGED) + NodalSupport(2, '2', NodalSupportType.HINGED) + NodalSupport(3, '3', NodalSupportType.HINGED) + NodalSupport(4, '4', NodalSupportType.HINGED) + + StaticAnalysisSettings(1, 'LINEAR', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + FreeLoad.RectangularLoad(FreeLoad, 1, 1, '1', + FreeRectangularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + FreeRectangularLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + [5000], + FreeRectangularLoadLoadLocationRectangle.LOAD_LOCATION_RECTANGLE_CORNER_POINTS, + [1, 8, 3, 10, 0]) + + clientModel.service.finish_modification() + + free_load = clientModel.service.get_free_rectangular_load(1, 1) + + assert free_load.load_location_center_x == 2 + assert free_load.magnitude_uniform == 5000 + + +def test_free_circular_load(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0.0, 0.0, 0.0) + Node(2, 10.0, 0.0, 0.0) + Node(3, 10.0, 10.0, 0.0) + Node(4, 0.0, 10.0, 0.0) + Node(5, 0.0, 0.0, 10.0) + Node(6, 0.0, 10.0, 10.0) + + Line(1, '1 2') + Line(2, '2 3') + Line(3, '3 4') + Line(4, '4 1') + + Thickness(1, '1', 1, 0.05) + Surface(1, '1-4', 1) + + NodalSupport(1, '1', NodalSupportType.HINGED) + NodalSupport(2, '2', NodalSupportType.HINGED) + NodalSupport(3, '3', NodalSupportType.HINGED) + NodalSupport(4, '4', NodalSupportType.HINGED) + + StaticAnalysisSettings(1, 'LINEAR', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + FreeLoad.CircularLoad(FreeLoad, 1, 1, '1', + FreeCircularLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + FreeCircularLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + [10000, 7.5, 5, 2]) + + clientModel.service.finish_modification() + + free_load = clientModel.service.get_free_circular_load(1, 1) + + assert free_load.load_location_x == 7.5 + assert free_load.magnitude_uniform == 10000 + +def test_free_polygon_load(): + + clientModel.service.reset() + clientModel.service.begin_modification() + + Material(1, 'S235') + + Node(1, 0.0, 0.0, 0.0) + Node(2, 10.0, 0.0, 0.0) + Node(3, 10.0, 10.0, 0.0) + Node(4, 0.0, 10.0, 0.0) + Node(5, 0.0, 0.0, 10.0) + Node(6, 0.0, 10.0, 10.0) + + Line(1, '1 2') + Line(2, '2 3') + Line(3, '3 4') + Line(4, '4 1') + + Thickness(1, '1', 1, 0.05) + Surface(1, '1-4', 1) + + NodalSupport(1, '1', NodalSupportType.HINGED) + NodalSupport(2, '2', NodalSupportType.HINGED) + NodalSupport(3, '3', NodalSupportType.HINGED) + NodalSupport(4, '4', NodalSupportType.HINGED) + + StaticAnalysisSettings(1, 'LINEAR', StaticAnalysisType.GEOMETRICALLY_LINEAR) + + LoadCase(1, 'DEAD') + + FreeLoad.PolygonLoad(FreeLoad, 1, 1, '1', + FreePolygonLoadLoadDistribution.LOAD_DISTRIBUTION_UNIFORM, + FreeLoadLoadProjection.LOAD_PROJECTION_XY_OR_UV, + FreePolygonLoadLoadDirection.LOAD_DIRECTION_GLOBAL_Z_TRUE, + [[1, 0], [0, 2], [2, 2]], + [5000]) + + clientModel.service.finish_modification() + + free_load = clientModel.service.get_free_polygon_load(1, 1) + + assert free_load.no == 1 + assert free_load.magnitude_uniform == 5000 + + diff --git a/UnitTests/test_newFunctionalityTesting.py b/UnitTests/test_newFunctionalityTesting.py deleted file mode 100644 index b1cd82b9..00000000 --- a/UnitTests/test_newFunctionalityTesting.py +++ /dev/null @@ -1,39 +0,0 @@ -import os -import sys -baseName = os.path.basename(__file__) -dirName = os.path.dirname(__file__) -print('basename: ', baseName) -print('dirname: ', dirName) -sys.path.append(dirName + r'/..') - -from RFEM.enums import * -from RFEM.dataTypes import * -from RFEM.initModel import * -from RFEM.BasicObjects.material import * -from RFEM.BasicObjects.section import * -from RFEM.BasicObjects.thickness import * -from RFEM.BasicObjects.node import * -from RFEM.BasicObjects.line import * -from RFEM.BasicObjects.member import * -from RFEM.BasicObjects.surface import * -from RFEM.BasicObjects.solid import * -from RFEM.BasicObjects.opening import * -from RFEM.BasicObjects.lineSet import * -from RFEM.BasicObjects.memberSet import * -from RFEM.BasicObjects.surfaceSet import * -from RFEM.BasicObjects.solidSet import * -from RFEM.TypesForNodes.nodalSupport import * -from RFEM.TypesForMembers.memberHinge import * -from RFEM.LoadCasesAndCombinations.staticAnalysisSettings import * -from RFEM.LoadCasesAndCombinations.loadCase import * -from RFEM.Loads.nodalLoad import * -from RFEM.Loads.memberLoad import * -from RFEM.Loads.surfaceLoad import * - - -def test_ImportFrom(): - - - # url = client.service.import_from(r'D:/OneDrive - Dlubal Software/MODELS/RFEM_XML/Cantilever.xml') - # print(url) - # assert url == 'http://127.0.0.1:8083/' \ No newline at end of file From 3d33eee58bb71e6ea53c2e55c8068daad4e23131 Mon Sep 17 00:00:00 2001 From: Jaroslav Broz Date: Wed, 20 Oct 2021 12:33:57 +0200 Subject: [PATCH 2/2] Added report from UT and settings --- .vscode/settings.json | 3 +- UnitTests/report.html | 462 ++++++++++++++++++++++++++++++++++++++++++ assets/style.css | 186 +++++++++++++++++ 3 files changed, 650 insertions(+), 1 deletion(-) create mode 100644 UnitTests/report.html create mode 100644 assets/style.css diff --git a/.vscode/settings.json b/.vscode/settings.json index 689f352d..2a6e48ed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,5 +7,6 @@ ], "python.testing.unittestEnabled": false, "python.testing.nosetestsEnabled": false, - "python.testing.pytestEnabled": true + "python.testing.pytestEnabled": true, + "python.testing.pytestArgs": ["--html=UnitTests\\report.html","--self-contained-html","--cov=RFEM",] } \ No newline at end of file diff --git a/UnitTests/report.html b/UnitTests/report.html new file mode 100644 index 00000000..52432020 --- /dev/null +++ b/UnitTests/report.html @@ -0,0 +1,462 @@ + + + + + Test Report + + + +

report.html

+

Report generated on 20-Oct-2021 at 12:31:49 by pytest-html v3.1.1

+

Environment

+ + + + + + + + + + + + + + + +
JAVA_HOMEC:\Program Files\Java\jdk-16.0.1
Packages{"pluggy": "0.13.1", "py": "1.10.0", "pytest": "6.2.4"}
PlatformWindows-10-10.0.19042-SP0
Plugins{"codecov": "0.3.0", "cov": "2.12.1", "html": "3.1.1", "metadata": "1.11.0", "reportlog": "0.1.2"}
Python3.9.7
+

Summary

+

0 tests ran in 2.21 seconds.

+ 0 passed, 0 skipped, 0 failed, 0 errors, 0 expected failures, 0 unexpected passes +

Results

+ + + + + + + + +
ResultTestDurationLinks
\ No newline at end of file diff --git a/assets/style.css b/assets/style.css new file mode 100644 index 00000000..3edac88e --- /dev/null +++ b/assets/style.css @@ -0,0 +1,186 @@ +body { + font-family: Helvetica, Arial, sans-serif; + font-size: 12px; + /* do not increase min-width as some may use split screens */ + min-width: 800px; + color: #999; +} + +h1 { + font-size: 24px; + color: black; +} + +h2 { + font-size: 16px; + color: black; +} + +p { + color: black; +} + +a { + color: #999; +} + +table { + border-collapse: collapse; +} + +/****************************** + * SUMMARY INFORMATION + ******************************/ +#environment td { + padding: 5px; + border: 1px solid #E6E6E6; +} +#environment tr:nth-child(odd) { + background-color: #f6f6f6; +} + +/****************************** + * TEST RESULT COLORS + ******************************/ +span.passed, +.passed .col-result { + color: green; +} + +span.skipped, +span.xfailed, +span.rerun, +.skipped .col-result, +.xfailed .col-result, +.rerun .col-result { + color: orange; +} + +span.error, +span.failed, +span.xpassed, +.error .col-result, +.failed .col-result, +.xpassed .col-result { + color: red; +} + +/****************************** + * RESULTS TABLE + * + * 1. Table Layout + * 2. Extra + * 3. Sorting items + * + ******************************/ +/*------------------ + * 1. Table Layout + *------------------*/ +#results-table { + border: 1px solid #e6e6e6; + color: #999; + font-size: 12px; + width: 100%; +} +#results-table th, +#results-table td { + padding: 5px; + border: 1px solid #E6E6E6; + text-align: left; +} +#results-table th { + font-weight: bold; +} + +/*------------------ + * 2. Extra + *------------------*/ +.log { + background-color: #e6e6e6; + border: 1px solid #e6e6e6; + color: black; + display: block; + font-family: "Courier New", Courier, monospace; + height: 230px; + overflow-y: scroll; + padding: 5px; + white-space: pre-wrap; +} +.log:only-child { + height: inherit; +} + +div.image { + border: 1px solid #e6e6e6; + float: right; + height: 240px; + margin-left: 5px; + overflow: hidden; + width: 320px; +} +div.image img { + width: 320px; +} + +div.video { + border: 1px solid #e6e6e6; + float: right; + height: 240px; + margin-left: 5px; + overflow: hidden; + width: 320px; +} +div.video video { + overflow: hidden; + width: 320px; + height: 240px; +} + +.collapsed { + display: none; +} + +.expander::after { + content: " (show details)"; + color: #BBB; + font-style: italic; + cursor: pointer; +} + +.collapser::after { + content: " (hide details)"; + color: #BBB; + font-style: italic; + cursor: pointer; +} + +/*------------------ + * 3. Sorting items + *------------------*/ +.sortable { + cursor: pointer; +} + +.sort-icon { + font-size: 0px; + float: left; + margin-right: 5px; + margin-top: 5px; + /*triangle*/ + width: 0; + height: 0; + border-left: 8px solid transparent; + border-right: 8px solid transparent; +} +.inactive .sort-icon { + /*finish triangle*/ + border-top: 8px solid #E6E6E6; +} +.asc.active .sort-icon { + /*finish triangle*/ + border-bottom: 8px solid #999; +} +.desc.active .sort-icon { + /*finish triangle*/ + border-top: 8px solid #999; +}