Use inheritance and namespaces to keep tests DRY
This commit is contained in:
@@ -6,4 +6,6 @@ target_sources(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartCommon.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartCut.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/FeaturePartFuse.cpp
|
||||
)
|
||||
# ${CMAKE_CURRENT_SOURCE_DIR}/FeatureFillet.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/PartTestHelpers.cpp
|
||||
)
|
||||
|
||||
@@ -2,19 +2,12 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/Placement.h>
|
||||
#include <Base/Precision.h>
|
||||
#include <Base/Rotation.h>
|
||||
#include <Base/Vector3D.h>
|
||||
#include "Mod/Part/App/FeaturePartBox.h"
|
||||
#include "Mod/Part/App/FeaturePartCommon.h"
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
// Should some of this go into a FeaturePartBoolean.cpp test suite?
|
||||
#include "PartTestHelpers.h"
|
||||
|
||||
class FeaturePartCommonTest: public ::testing::Test
|
||||
class FeaturePartCommonTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass
|
||||
{
|
||||
protected:
|
||||
static void SetUpTestSuite()
|
||||
@@ -25,61 +18,14 @@ protected:
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
_docName = App::GetApplication().getUniqueDocumentName("test");
|
||||
_doc = App::GetApplication().newDocument(_docName.c_str(), "testUser");
|
||||
_box1obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box2obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box3obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box4obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box5obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box6obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box1obj->Length.setValue(1);
|
||||
_box1obj->Width.setValue(2);
|
||||
_box1obj->Height.setValue(3);
|
||||
_box1obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(), Base::Rotation(), Base::Vector3d()));
|
||||
_box2obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box2obj->Length.setValue(1);
|
||||
_box2obj->Width.setValue(2);
|
||||
_box2obj->Height.setValue(3);
|
||||
_box3obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box3obj->Length.setValue(1);
|
||||
_box3obj->Width.setValue(2);
|
||||
_box3obj->Height.setValue(3);
|
||||
_box4obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box4obj->Length.setValue(1);
|
||||
_box4obj->Width.setValue(2);
|
||||
_box4obj->Height.setValue(3);
|
||||
_box5obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box5obj->Length.setValue(1);
|
||||
_box5obj->Width.setValue(2);
|
||||
_box5obj->Height.setValue(3);
|
||||
_box6obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box6obj->Length.setValue(1);
|
||||
_box6obj->Width.setValue(2);
|
||||
_box6obj->Height.setValue(3);
|
||||
createTestFile();
|
||||
_common = static_cast<Part::Common*>(_doc->addObject("Part::Common"));
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{}
|
||||
|
||||
|
||||
Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj;
|
||||
Part::Common* _common;
|
||||
App::Document* _doc;
|
||||
|
||||
private:
|
||||
std::string _docName;
|
||||
};
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testIntersecting)
|
||||
@@ -91,15 +37,18 @@ TEST_F(FeaturePartCommonTest, testIntersecting)
|
||||
// Act
|
||||
_common->execute();
|
||||
Part::TopoShape ts = _common->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
// Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_EQ(bb.MinX, 0);
|
||||
EXPECT_EQ(bb.MinY, 1);
|
||||
EXPECT_EQ(bb.MinZ, 0);
|
||||
EXPECT_EQ(bb.MaxX, 1);
|
||||
EXPECT_EQ(bb.MaxY, 2);
|
||||
EXPECT_EQ(bb.MaxZ, 3);
|
||||
// If we wanted to be excessive, we could check the bounds:
|
||||
// EXPECT_EQ(bb.MinX, 0);
|
||||
// EXPECT_EQ(bb.MinY, 1);
|
||||
// EXPECT_EQ(bb.MinZ, 0);
|
||||
// EXPECT_EQ(bb.MaxX, 1);
|
||||
// EXPECT_EQ(bb.MaxY, 2);
|
||||
// EXPECT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,3.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testNonIntersecting)
|
||||
@@ -115,8 +64,8 @@ TEST_F(FeaturePartCommonTest, testNonIntersecting)
|
||||
|
||||
// Assert
|
||||
EXPECT_FALSE(bb.IsValid());
|
||||
// EXPECT_EQ(bb.Volume(),-1);
|
||||
// EXPECT_EQ(bb.Volume(),0);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,0.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testTouching)
|
||||
@@ -132,7 +81,8 @@ TEST_F(FeaturePartCommonTest, testTouching)
|
||||
|
||||
// Assert
|
||||
EXPECT_FALSE(bb.IsValid());
|
||||
// EXPECT_EQ(bb.Volume(),0);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,0.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testAlmostTouching)
|
||||
@@ -148,8 +98,8 @@ TEST_F(FeaturePartCommonTest, testAlmostTouching)
|
||||
|
||||
// Assert
|
||||
EXPECT_FALSE(bb.IsValid());
|
||||
// EXPECT_EQ(bb.Volume(),-1);
|
||||
// EXPECT_EQ(bb.Volume(),0);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,0.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testBarelyIntersecting)
|
||||
@@ -170,6 +120,10 @@ TEST_F(FeaturePartCommonTest, testBarelyIntersecting)
|
||||
EXPECT_EQ(bb.MaxX, 1);
|
||||
EXPECT_EQ(bb.MaxY, 2);
|
||||
EXPECT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
double target = Base::Precision::Confusion() * 3 * 1000;
|
||||
// FLOAT, not DOUBLE here, because ULP accuracy would be too precise.
|
||||
EXPECT_FLOAT_EQ(volume,target); // 0.00029999999999996696);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCommonTest, testMustExecute)
|
||||
|
||||
@@ -2,21 +2,12 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/Placement.h>
|
||||
#include <Base/Precision.h>
|
||||
#include <Base/Rotation.h>
|
||||
#include <Base/Vector3D.h>
|
||||
#include "Mod/Part/App/FeaturePartBox.h"
|
||||
#include "Mod/Part/App/FeaturePartCut.h"
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
#include <BRep_TVertex.hxx>
|
||||
#include "PartTestHelpers.h"
|
||||
|
||||
// MOST OF THIS SHOULD GO INTO A FeaturePartBoolean.cpp test suite!
|
||||
|
||||
class FeaturePartCutTest: public ::testing::Test
|
||||
class FeaturePartCutTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass
|
||||
{
|
||||
protected:
|
||||
static void SetUpTestSuite()
|
||||
@@ -27,48 +18,7 @@ protected:
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
_docName = App::GetApplication().getUniqueDocumentName("test");
|
||||
_doc = App::GetApplication().newDocument(_docName.c_str(), "testUser");
|
||||
_box1obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box1obj->Length.setValue(1);
|
||||
_box1obj->Width.setValue(2);
|
||||
_box1obj->Height.setValue(3);
|
||||
_box1obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 0, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box2obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box2obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box2obj->Length.setValue(1);
|
||||
_box2obj->Width.setValue(2);
|
||||
_box2obj->Height.setValue(3);
|
||||
_box3obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box3obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box3obj->Length.setValue(1);
|
||||
_box3obj->Width.setValue(2);
|
||||
_box3obj->Height.setValue(3);
|
||||
_box4obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box4obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box4obj->Length.setValue(1);
|
||||
_box4obj->Width.setValue(2);
|
||||
_box4obj->Height.setValue(3);
|
||||
_box5obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box5obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box5obj->Length.setValue(1);
|
||||
_box5obj->Width.setValue(2);
|
||||
_box5obj->Height.setValue(3);
|
||||
_box6obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box6obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box6obj->Length.setValue(1);
|
||||
_box6obj->Width.setValue(2);
|
||||
_box6obj->Height.setValue(3);
|
||||
createTestFile();
|
||||
_cut = static_cast<Part::Cut*>(_doc->addObject("Part::Cut"));
|
||||
}
|
||||
|
||||
@@ -76,12 +26,7 @@ protected:
|
||||
{}
|
||||
|
||||
|
||||
Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj;
|
||||
Part::Cut* _cut;
|
||||
App::Document* _doc;
|
||||
|
||||
private:
|
||||
std::string _docName;
|
||||
};
|
||||
|
||||
TEST_F(FeaturePartCutTest, testIntersecting)
|
||||
@@ -93,15 +38,8 @@ TEST_F(FeaturePartCutTest, testIntersecting)
|
||||
// Act
|
||||
_cut->execute();
|
||||
Part::TopoShape ts = _cut->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,3.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCutTest, testNonIntersecting)
|
||||
@@ -113,15 +51,8 @@ TEST_F(FeaturePartCutTest, testNonIntersecting)
|
||||
// Act
|
||||
_cut->execute();
|
||||
Part::TopoShape ts = _cut->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 2);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,6.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCutTest, testTouching)
|
||||
@@ -133,15 +64,10 @@ TEST_F(FeaturePartCutTest, testTouching)
|
||||
// Act
|
||||
_cut->execute();
|
||||
Part::TopoShape ts = _cut->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 2);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
EXPECT_DOUBLE_EQ(volume,6.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCutTest, testAlmostTouching)
|
||||
@@ -153,15 +79,8 @@ TEST_F(FeaturePartCutTest, testAlmostTouching)
|
||||
// Act
|
||||
_cut->execute();
|
||||
Part::TopoShape ts = _cut->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 2);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,6.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCutTest, testBarelyIntersecting)
|
||||
@@ -173,15 +92,9 @@ TEST_F(FeaturePartCutTest, testBarelyIntersecting)
|
||||
// Act
|
||||
_cut->execute();
|
||||
Part::TopoShape ts = _cut->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 1.9999);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
double target = 6 - Base::Precision::Confusion() * 3 * 1000;
|
||||
EXPECT_FLOAT_EQ(volume,target);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartCutTest, testMustExecute)
|
||||
|
||||
@@ -2,21 +2,13 @@
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/Placement.h>
|
||||
#include <Base/Precision.h>
|
||||
#include <Base/Rotation.h>
|
||||
#include <Base/Vector3D.h>
|
||||
#include "Mod/Part/App/FeaturePartBox.h"
|
||||
#include "Mod/Part/App/FeaturePartFuse.h"
|
||||
#include <src/App/InitApplication.h>
|
||||
|
||||
#include <BRep_TVertex.hxx>
|
||||
#include "PartTestHelpers.h"
|
||||
|
||||
// MOST OF THIS SHOULD GO INTO A FeaturePartBoolean.cpp test suite!
|
||||
|
||||
class FeaturePartFuseTest: public ::testing::Test
|
||||
class FeaturePartFuseTest: public ::testing::Test, public PartTestHelpers::PartTestHelperClass
|
||||
{
|
||||
protected:
|
||||
static void SetUpTestSuite()
|
||||
@@ -27,61 +19,14 @@ protected:
|
||||
|
||||
void SetUp() override
|
||||
{
|
||||
_docName = App::GetApplication().getUniqueDocumentName("test");
|
||||
_doc = App::GetApplication().newDocument(_docName.c_str(), "testUser");
|
||||
_box1obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box1obj->Length.setValue(1);
|
||||
_box1obj->Width.setValue(2);
|
||||
_box1obj->Height.setValue(3);
|
||||
_box1obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 0, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box2obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box2obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box2obj->Length.setValue(1);
|
||||
_box2obj->Width.setValue(2);
|
||||
_box2obj->Height.setValue(3);
|
||||
_box3obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box3obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box3obj->Length.setValue(1);
|
||||
_box3obj->Width.setValue(2);
|
||||
_box3obj->Height.setValue(3);
|
||||
_box4obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box4obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d(0, 0, 0)));
|
||||
_box4obj->Length.setValue(1);
|
||||
_box4obj->Width.setValue(2);
|
||||
_box4obj->Height.setValue(3);
|
||||
_box5obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box5obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box5obj->Length.setValue(1);
|
||||
_box5obj->Width.setValue(2);
|
||||
_box5obj->Height.setValue(3);
|
||||
_box6obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box6obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box6obj->Length.setValue(1);
|
||||
_box6obj->Width.setValue(2);
|
||||
_box6obj->Height.setValue(3);
|
||||
createTestFile();
|
||||
_fuse = static_cast<Part::Fuse*>(_doc->addObject("Part::Fuse"));
|
||||
}
|
||||
|
||||
void TearDown() override
|
||||
{}
|
||||
|
||||
|
||||
Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj;
|
||||
Part::Fuse* _fuse;
|
||||
App::Document* _doc;
|
||||
|
||||
private:
|
||||
std::string _docName;
|
||||
};
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testIntersecting)
|
||||
@@ -93,15 +38,8 @@ TEST_F(FeaturePartFuseTest, testIntersecting)
|
||||
// Act
|
||||
_fuse->execute();
|
||||
Part::TopoShape ts = _fuse->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 3);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,9.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testNonIntersecting)
|
||||
@@ -113,15 +51,8 @@ TEST_F(FeaturePartFuseTest, testNonIntersecting)
|
||||
// Act
|
||||
_fuse->execute();
|
||||
Part::TopoShape ts = _fuse->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 5);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,12.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testTouching)
|
||||
@@ -133,15 +64,8 @@ TEST_F(FeaturePartFuseTest, testTouching)
|
||||
// Act
|
||||
_fuse->execute();
|
||||
Part::TopoShape ts = _fuse->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 4);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_DOUBLE_EQ(volume,12.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testAlmostTouching)
|
||||
@@ -153,15 +77,8 @@ TEST_F(FeaturePartFuseTest, testAlmostTouching)
|
||||
// Act
|
||||
_fuse->execute();
|
||||
Part::TopoShape ts = _fuse->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 4);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
EXPECT_FLOAT_EQ(volume,12.0);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testBarelyIntersecting)
|
||||
@@ -173,15 +90,9 @@ TEST_F(FeaturePartFuseTest, testBarelyIntersecting)
|
||||
// Act
|
||||
_fuse->execute();
|
||||
Part::TopoShape ts = _fuse->Shape.getValue();
|
||||
Base::BoundBox3d bb = ts.getBoundBox();
|
||||
|
||||
// Assert
|
||||
EXPECT_FLOAT_EQ(bb.MinX, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinY, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MinZ, 0);
|
||||
EXPECT_FLOAT_EQ(bb.MaxX, 1);
|
||||
EXPECT_FLOAT_EQ(bb.MaxY, 3.9999);
|
||||
EXPECT_FLOAT_EQ(bb.MaxZ, 3);
|
||||
double volume = PartTestHelpers::getVolume(ts.getShape());
|
||||
double target = 12 - Base::Precision::Confusion() * 3 * 1000;
|
||||
EXPECT_FLOAT_EQ(volume,target);
|
||||
}
|
||||
|
||||
TEST_F(FeaturePartFuseTest, testMustExecute)
|
||||
|
||||
46
tests/src/Mod/Part/App/PartTestHelpers.cpp
Normal file
46
tests/src/Mod/Part/App/PartTestHelpers.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
|
||||
#include "PartTestHelpers.h"
|
||||
|
||||
namespace PartTestHelpers {
|
||||
|
||||
double getVolume(TopoDS_Shape shape)
|
||||
{
|
||||
GProp_GProps prop;
|
||||
BRepGProp::VolumeProperties(shape, prop);
|
||||
return prop.Mass();
|
||||
}
|
||||
|
||||
void PartTestHelperClass::createTestFile()
|
||||
{
|
||||
_docName = App::GetApplication().getUniqueDocumentName("test");
|
||||
_doc = App::GetApplication().newDocument(_docName.c_str(), "testUser");
|
||||
_box1obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box2obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box3obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box4obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box5obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
_box6obj = static_cast<Part::Box*>(_doc->addObject("Part::Box"));
|
||||
for ( auto _box : {_box1obj, _box2obj, _box3obj, _box4obj, _box5obj, _box6obj} ) {
|
||||
_box->Length.setValue(1);
|
||||
_box->Width.setValue(2);
|
||||
_box->Height.setValue(3);
|
||||
}
|
||||
_box1obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(), Base::Rotation(), Base::Vector3d()));
|
||||
_box2obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 1, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box3obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 3, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box4obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2, 0), Base::Rotation(), Base::Vector3d()));
|
||||
_box5obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 + Base::Precision::Confusion(), 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
_box6obj->Placement.setValue(
|
||||
Base::Placement(Base::Vector3d(0, 2 - Base::Precision::Confusion() * 1000, 0),
|
||||
Base::Rotation(),
|
||||
Base::Vector3d()));
|
||||
}
|
||||
|
||||
}
|
||||
22
tests/src/Mod/Part/App/PartTestHelpers.h
Normal file
22
tests/src/Mod/Part/App/PartTestHelpers.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#include <App/Application.h>
|
||||
#include <App/Document.h>
|
||||
#include <Base/Precision.h>
|
||||
#include "Mod/Part/App/FeaturePartBox.h"
|
||||
#include "Mod/Part/App/FeaturePartFuse.h"
|
||||
#include "Mod/Part/App/FeatureFillet.h"
|
||||
#include <BRepGProp.hxx>
|
||||
|
||||
namespace PartTestHelpers {
|
||||
|
||||
double getVolume(TopoDS_Shape shape);
|
||||
|
||||
class PartTestHelperClass {
|
||||
public:
|
||||
App::Document* _doc;
|
||||
std::string _docName;
|
||||
Part::Box *_box1obj, *_box2obj, *_box3obj, *_box4obj, *_box5obj, *_box6obj;
|
||||
|
||||
void createTestFile();
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user