u02/tests: Fix edge case for invalid points
This commit is contained in:
parent
8f784ccf3e
commit
085b8fcdb9
|
@ -438,16 +438,22 @@ TEST_CASE("Barycentric coordinates (prop: Σ = 1)") {
|
|||
int x2 = GENERATE(take(2, random(-100, 100)));
|
||||
int y2 = GENERATE(take(2, random(-100, 100)));
|
||||
|
||||
// If all points are on a straight line, the property does not hold.
|
||||
// Checking this is equivalent to checking if the area of the triangle is 0.
|
||||
if ((x0 - x1) * (y0 - y2) - (y0 - y1) * (x0 - x2) == 0) {
|
||||
// see above
|
||||
std::cerr << "Points do not form reasonable triangle, skipping"
|
||||
<< std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
int x = GENERATE(take(5, random(-100, 100)));
|
||||
int y = GENERATE(take(5, random(-100, 100)));
|
||||
float b1, b2, b3;
|
||||
|
||||
std::tie(b1, b2, b3) = barycentric_coordinates(x0, y0, x1, y1, x2, y2, x, y);
|
||||
|
||||
// If all points are on a straight line, the property does not hold
|
||||
if (!(x0 == x1 && x1 == x2) && !(y0 == y1 && y1 == y2)) {
|
||||
REQUIRE_THAT(b1 + b2 + b3, WithinAbs(1.0, 0.01));
|
||||
}
|
||||
REQUIRE_THAT(b1 + b2 + b3, WithinAbs(1.0, 0.01));
|
||||
}
|
||||
|
||||
TEST_CASE("Sort triangle points") {
|
||||
|
|
Reference in a new issue