From 4938e1b6b92204d7d1940faba6d99919da8bdabc Mon Sep 17 00:00:00 2001 From: Erick Ahmed Date: Mon, 10 Nov 2025 11:14:12 +0100 Subject: [PATCH] test: improve test coverage for make_point() and coord_point() --- .github/workflows/occt-unit-test.yml | 14 +-- test/occt/point-test.cpp | 129 ++++++++++----------------- 2 files changed, 52 insertions(+), 91 deletions(-) diff --git a/.github/workflows/occt-unit-test.yml b/.github/workflows/occt-unit-test.yml index 92b4fb8..538300e 100644 --- a/.github/workflows/occt-unit-test.yml +++ b/.github/workflows/occt-unit-test.yml @@ -1,7 +1,7 @@ name: OCCT CI on: push: - branches: [master] + branches: [master, dev-occt] paths: - "src/occt/**" - "src/ffi/**" @@ -11,7 +11,7 @@ on: - ".github/**" - "./CMakeLists.txt" pull_request: - branches: [master] + branches: [master, dev-occt] paths: - "src/occt/**" - "src/ffi/**" @@ -24,7 +24,7 @@ on: jobs: build-wrappers: name: Build OCCT wrappers - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Checkout code @@ -35,11 +35,3 @@ jobs: - name: Build OCCT and run tests 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 "==================" diff --git a/test/occt/point-test.cpp b/test/occt/point-test.cpp index 4a1d5fc..0d14308 100644 --- a/test/occt/point-test.cpp +++ b/test/occt/point-test.cpp @@ -8,102 +8,71 @@ #include #include "point.hpp" -TEST_CASE("Create points and get coordinates") { - SECTION("Positive integer coordinates") { - double coords[3] = {3, 7, 2}; - TopoDS_Shape p = make_point(coords[0], coords[1], coords[2]); - +TEST_CASE("make_point and coord_point behavior", "[make_point]") { + auto check_coords = [](const TopoDS_Shape& p, const double expected[3]) { double 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); - - 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}; + SECTION("Accept integer coordinates") { + double coords[3] = {3, -7, 2}; 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])); + check_coords(p, coords); } - SECTION("Mixed integer coordinates") { - double coords[3] = {8, -5, 4}; + SECTION("Accept float coordinates") { + 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])); + check_coords(p, coords); } - SECTION("Positive float coordinates") { - 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") { + SECTION("XYZ Origin") { double coords[3] = {0, 0, 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])); + check_coords(p, coords); } - SECTION("Large values") { - double coords[3] = {65186415.16516, 948156654.0, -6516515.165}; + SECTION("Large magnitude values") { + double coords[3] = {6.5186415e7, 9.48156654e8, -6.516515e6}; 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::max(), + std::numeric_limits::lowest(), + std::numeric_limits::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::quiet_NaN(), + std::numeric_limits::infinity(), + -std::numeric_limits::infinity()}; + 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])); + REQUIRE((std::isnan(x) || std::isinf(x))); + REQUIRE((std::isnan(y) || std::isinf(y))); + REQUIRE((std::isnan(z) || std::isinf(z))); } }