feat: Geometry clipTriangle unit test

This commit is contained in:
knowmore 2021-06-09 22:42:11 +08:00
parent dcf1bc26e7
commit f09866589b
1 changed files with 229 additions and 0 deletions

View File

@ -0,0 +1,229 @@
#include "CesiumGeometry/clipTriangleAtAxisAlignedThreshold.h"
#include "catch2/catch.hpp"
using namespace CesiumGeometry;
TEST_CASE("clipTriangleAtAxisAlignedThreshold") {
struct TestCase {
double threshold;
bool keepAbove;
int i0;
int i1;
int i2;
double u0;
double u1;
double u2;
std::vector<TriangleClipVertex> calculatedResult;
std::vector<TriangleClipVertex> expectedResult;
};
auto testCase = GENERATE(
// eliminates a triangle that is entirely on the wrong side of the
// threshold
TestCase{0.1, false, 0, 1, 2, 0.2, 0.3, 0.4, {}, {}},
// keeps a triangle that is entirely on the correct side of the threshold
TestCase{0.1, true, 0, 1, 2, 0.2, 0.3, 0.4, {}, {0, 1, 2}},
// adds two vertices on threshold when point 0 is on the wrong side and
// above
TestCase{
0.5,
false,
0,
1,
2,
0.6,
0.4,
0.2,
{},
{1,
2,
InterpolatedVertex{0, 2, 0.25},
InterpolatedVertex{0, 1, 0.5}}},
// adds two vertices on threshold when point 0 is on the wrong side and
// below
TestCase{
0.5,
true,
0,
1,
2,
0.4,
0.6,
0.8,
{},
{1,
2,
InterpolatedVertex{0, 2, 0.25},
InterpolatedVertex{0, 1, 0.5}}},
// adds two vertices on threshold when point 1 is on the wrong side and
// above
TestCase{
0.5,
false,
0,
1,
2,
0.2,
0.6,
0.4,
{},
{2,
0,
InterpolatedVertex{1, 0, 0.25},
InterpolatedVertex{1, 2, 0.5}}},
// adds two vertices on threshold when point 1 is on the wrong side and
// below
TestCase{
0.5,
true,
0,
1,
2,
0.8,
0.4,
0.6,
{},
{2,
0,
InterpolatedVertex{1, 0, 0.25},
InterpolatedVertex{1, 2, 0.5}}},
// adds two vertices on threshold when point 2 is on the wrong side and
// above
TestCase{
0.5,
false,
0,
1,
2,
0.4,
0.2,
0.6,
{},
{0,
1,
InterpolatedVertex{2, 1, 0.25},
InterpolatedVertex{2, 0, 0.5}}},
// adds two vertices on threshold when point 2 is on the wrong side and
// below
TestCase{
0.5,
true,
0,
1,
2,
0.6,
0.8,
0.4,
{},
{0,
1,
InterpolatedVertex{2, 1, 0.25},
InterpolatedVertex{2, 0, 0.5}}},
// adds two vertices on threshold when point 1 is on the wrong side and
// below
TestCase{
0.5,
true,
0,
1,
2,
0.8,
0.4,
0.6,
{},
{2,
0,
InterpolatedVertex{1, 0, 0.25},
InterpolatedVertex{1, 2, 0.5}}},
// adds two vertices on threshold when only point 0 is on the right side
// and below
TestCase{
0.5,
false,
0,
1,
2,
0.4,
0.6,
0.8,
{},
{0, InterpolatedVertex{1, 0, 0.5}, InterpolatedVertex{2, 0, 0.75}}},
// adds two vertices on threshold when only point 0 is on the right side
// and above
TestCase{
0.5,
true,
0,
1,
2,
0.6,
0.4,
0.2,
{},
{0, InterpolatedVertex{1, 0, 0.5}, InterpolatedVertex{2, 0, 0.75}}},
// adds two vertices on threshold when only point 1 is on the right side
// and below
TestCase{
0.5,
false,
0,
1,
2,
0.8,
0.4,
0.6,
{},
{1, InterpolatedVertex{2, 1, 0.5}, InterpolatedVertex{0, 1, 0.75}}},
// adds two vertices on threshold when only point 1 is on the right side
// and above
TestCase{
0.5,
true,
0,
1,
2,
0.2,
0.6,
0.4,
{},
{1, InterpolatedVertex{2, 1, 0.5}, InterpolatedVertex{0, 1, 0.75}}},
// adds two vertices on threshold when only point 2 is on the right side
// and below
TestCase{
0.5,
false,
0,
1,
2,
0.6,
0.8,
0.4,
{},
{2, InterpolatedVertex{0, 2, 0.5}, InterpolatedVertex{1, 2, 0.75}}},
// adds two vertices on threshold when only point 2 is on the right side
// and above
TestCase{
0.5,
true,
0,
1,
2,
0.4,
0.2,
0.6,
{},
{2, InterpolatedVertex{0, 2, 0.5}, InterpolatedVertex{1, 2, 0.75}}});
clipTriangleAtAxisAlignedThreshold(
testCase.threshold,
testCase.keepAbove,
testCase.i0,
testCase.i1,
testCase.i2,
testCase.u0,
testCase.u1,
testCase.u2,
testCase.calculatedResult);
CHECK(testCase.calculatedResult == testCase.expectedResult);
}