test: improve test coverage for make_point() and coord_point()

This commit is contained in:
2025-11-10 11:14:12 +01:00
parent b36ad01e8d
commit 4938e1b6b9
2 changed files with 52 additions and 91 deletions
+3 -11
View File
@@ -1,7 +1,7 @@
name: OCCT CI name: OCCT CI
on: on:
push: push:
branches: [master] branches: [master, dev-occt]
paths: paths:
- "src/occt/**" - "src/occt/**"
- "src/ffi/**" - "src/ffi/**"
@@ -11,7 +11,7 @@ on:
- ".github/**" - ".github/**"
- "./CMakeLists.txt" - "./CMakeLists.txt"
pull_request: pull_request:
branches: [master] branches: [master, dev-occt]
paths: paths:
- "src/occt/**" - "src/occt/**"
- "src/ffi/**" - "src/ffi/**"
@@ -24,7 +24,7 @@ on:
jobs: jobs:
build-wrappers: build-wrappers:
name: Build OCCT wrappers name: Build OCCT wrappers
runs-on: ubuntu-latest runs-on: ubuntu-24.04
steps: steps:
- name: Checkout code - name: Checkout code
@@ -35,11 +35,3 @@ jobs:
- name: Build OCCT and run tests - name: Build OCCT and run tests
run: ./ci/scripts/occt.sh --unit-testing run: ./ci/scripts/occt.sh --unit-testing
- name: Summary
if: always()
run: |
echo "=== CI Summary ==="
echo "Build: ${{ steps.build.outcome }}"
echo "Tests: ${{ steps.test.outcome }}"
echo "=================="
+49 -80
View File
@@ -8,102 +8,71 @@
#include <TopoDS_Shape.hxx> #include <TopoDS_Shape.hxx>
#include "point.hpp" #include "point.hpp"
TEST_CASE("Create points and get coordinates") { TEST_CASE("make_point and coord_point behavior", "[make_point]") {
SECTION("Positive integer coordinates") { auto check_coords = [](const TopoDS_Shape& p, const double expected[3]) {
double coords[3] = {3, 7, 2};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
double x, y, z; double x, y, z;
coord_point(p, &x, &y, &z); coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(expected[0]));
REQUIRE(y == Catch::Approx(expected[1]));
REQUIRE(z == Catch::Approx(expected[2]));
};
INFO("Point coordinates: " << x << ", " << y << ", " << z); SECTION("Accept integer coordinates") {
double coords[3] = {3, -7, 2};
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
}
SECTION("Negative integer coordinates") {
double coords[3] = {-2, -5, -14};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]); TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
check_coords(p, coords);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
} }
SECTION("Mixed integer coordinates") { SECTION("Accept float coordinates") {
double coords[3] = {8, -5, 4}; double coords[3] = {3.2352, 7.124662, -2.5};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]); TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
check_coords(p, coords);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
} }
SECTION("Positive float coordinates") { SECTION("XYZ Origin") {
double coords[3] = {3.2352, 7.124662, 2.5};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
}
SECTION("Negative float coordinates") {
double coords[3] = {-2.1345, -5.463, -14.00001};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
}
SECTION("Mixed float coordinates") {
double coords[3] = {8.124, -5.523, 4.0};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
}
SECTION("Origin") {
double coords[3] = {0, 0, 0}; double coords[3] = {0, 0, 0};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]); TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
check_coords(p, coords);
double x, y, z;
coord_point(p, &x, &y, &z);
REQUIRE(x == Catch::Approx(coords[0]));
REQUIRE(y == Catch::Approx(coords[1]));
REQUIRE(z == Catch::Approx(coords[2]));
} }
SECTION("Large values") { SECTION("Large magnitude values") {
double coords[3] = {65186415.16516, 948156654.0, -6516515.165}; double coords[3] = {6.5186415e7, 9.48156654e8, -6.516515e6};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]); TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
check_coords(p, coords);
}
SECTION("Multiple points") {
const double points[5][3] = {
{3, 7, 2},
{3, 7, 2},
{-5, 3.7, 8},
{-3, -7, -2},
{0, 0, 1}
};
for (const auto& c : points) {
TopoDS_Shape p = make_point(c[0], c[1], c[2]);
check_coords(p, c);
}
}
SECTION("Extreme double limits") {
double coords[3] = {std::numeric_limits<double>::max(),
std::numeric_limits<double>::lowest(),
std::numeric_limits<double>::min()};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
check_coords(p, coords);
}
SECTION("NaN and Infinity") {
double coords[3] = {std::numeric_limits<double>::quiet_NaN(),
std::numeric_limits<double>::infinity(),
-std::numeric_limits<double>::infinity()};
TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]);
double x, y, z; double x, y, z;
coord_point(p, &x, &y, &z); coord_point(p, &x, &y, &z);
REQUIRE((std::isnan(x) || std::isinf(x)));
REQUIRE(x == Catch::Approx(coords[0])); REQUIRE((std::isnan(y) || std::isinf(y)));
REQUIRE(y == Catch::Approx(coords[1])); REQUIRE((std::isnan(z) || std::isinf(z)));
REQUIRE(z == Catch::Approx(coords[2]));
} }
} }