Fully ported (pure math, no HDS required):
test_discrete_elliptic_utility.cpp – 2 tests
normalizeModulus: move tau into SL(2,Z) fundamental domain
test_p2_utility.cpp – 3 tests
P2 projective geometry (perpendicularBisector, pointFromLines,
makeDirectIsometryFromFrames double vs long double precision)
New headers:
include/discrete_elliptic_utility.hpp – normalizeModulus
include/p2_utility.hpp – P2 Euclidean geometry (templated
on scalar type so double and long double share one implementation)
Stubs (GTEST_SKIP, blocked until HDS port – Phase 4):
test_hyper_ideal_functional.cpp – 5 tests (1 @Ignore in Java)
test_hyper_ideal_hyperelliptic_utility.cpp – 3 tests
test_spherical_functional.cpp – 5 tests
All use CoHDS + HalfEdgeUtils which are not yet ported to C++.
Result: 34 tests total | 21 passed | 13 skipped | 0 failed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Highlights:
- Three CMake build modes: tests-only (default), WITH_VIEWER, WITH_CGAL
- Boost removed as bundled dep; CGAL mode uses system Boost via find_package
- 16 GTest unit tests ported from Java (Clausen, HyperIdeal, Matrix, SurfaceCurve)
- Gitea Actions CI pipeline with custom ARM64 Docker image (ci-cpp:latest)
- Automatic Codeberg mirror on push to main/dev
- Dockerfile for CI image: .gitea/docker/Dockerfile.ci-cpp
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Exception updated to match renamed CMakeLists.txt (capital M)
- Add "* 2.*" / "* 3.*" patterns to suppress iCloud Drive duplicate
files (e.g. "clausen 2.hpp") from appearing in git status
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
macOS filesystem is case-insensitive so both spellings worked locally,
but the Linux container (CI) could not find the file and failed with
"does not contain a CMakeLists.txt file".
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CGAL 6.x still unconditionally includes boost/config.hpp in its
config.h, so Boost headers are required even with CGAL_DISABLE_GMP/MPFR.
Use system Boost via find_package instead of the removed 211 MB tarball.
Tests-only mode remains completely dependency-free.
Install: brew install boost (macOS)
apt install libboost-dev (Debian/Ubuntu)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace JS action with plain git clone --bare + push --mirror.
No Node.js required → runs directly on the Pi host without a container.
Also upgrades from single-branch push to a full mirror of all refs.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
build-essential pulls gcc, g++, make and libc-dev together.
CMake declares LANGUAGES C CXX so it needs a C compiler (cc) too –
individual g++ install can leave gaps that build-essential covers.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
The ci-cpp image was likely built for linux/amd64; the eulernest runner
is linux/arm64 (Raspberry Pi), so the container exited immediately
without running any steps (task 102 log: 10 lines, no step output).
Fix: run directly on the host runner and install cmake/g++ via apt-get
(same approach as the previously working workflow).
Also pin --platform=linux/arm64 in Dockerfile.ci-cpp so the next
image build produces the correct architecture. Once the image is pushed,
re-add the container: block to the workflow.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Automatically pushes main and dev to the Codeberg mirror
(codeberg.org/TMoussa/ConformalLabpp) after every push to eulernest.
Requires CODEBERG_TOKEN secret in the eulernest repo settings.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Restructures the CMake build into three clearly separated modes:
(default) tests only – Eigen + GTest, no heavy deps
-DWITH_VIEWER=ON builds viewer lib (libigl / GLFW / GLAD)
-DWITH_CGAL=ON builds conformallab_core CLI app;
implies WITH_VIEWER automatically
Changes:
- code/CMakeLists.txt: viewer and core targets are now guarded by
option() flags; GTest / tests target is always built
- code/deps/Cmakelists.txt: CGAL, libigl, glfw, glad are only
extracted when the corresponding mode is enabled; Eigen always
- Remove Boost (211 MB tarball, 0 usages in the codebase – CGAL 6.x
does not require Boost for Simple_cartesian / Surface_mesh / basic IO)
- Remove code/src/main.cpp (dead file, not referenced in CMake)
All 16 C++ tests pass in tests-only mode (verified locally).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Runs conformallab_tests (GTest) on every push to main/dev/claude/**
using ubuntu-latest + cmake + g++. Only the test binary is built,
not the full app (no CGAL/Boost compilation needed).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- include/matrix_utility.hpp: 4x4 mapping matrix R·from=to (Eigen)
- include/projective_math.hpp: dehomogenize, hyperbolicDistance,
isOnSegment (collinearity + betweenness via 3D cross/dot),
getPointOnCorrespondingSegment (parameter by arc-length ratio)
- test_matrix_utility.cpp: port of MatrixUtilityTest (1 test)
- test_surface_curve_utility.cpp: port of SurfaceCurveUtilityTest
testIsBetween and testGetPointOnSegment_SegmentEdge (2 tests)
- tolerance adjusted to 1e-12 for matrix inversion (2.7e-15 rounding
from Eigen vs jReality's LU; both well within meaningful accuracy)
Total: 16/16 tests pass
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add Google Test via CMake FetchContent (v1.14.0)
- Add clausen.hpp: Clausen integral, Lobachevsky function, Im(Li2)
- Add hyper_ideal_utility.hpp: generalized and ideal-vertex hyperbolic
tetrahedron volume formulas using Eigen for the 4x4 Gram determinant
- Port ClausenTest (5 tests) and HyperIdealUtilityTest (8 tests) from
Java/JUnit — all 13 pass with same tolerances as the Java originals
- Fix pre-existing VIEWER/viewer case mismatch in CMakeLists.txt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>