arXiv:math/0603097 is Springborn 2008 ("A variational principle for weighted
Delaunay triangulations and hyperideal polyhedra"), not a Kolpakov-Mednykh paper.
The author pair Kolpakov & Mednykh has no joint publication from 2006; their
earliest collaboration is arXiv:1008.0312 (2010, on torus knots, unrelated).
The wrong author name was introduced during the Java→C++ port — the Java source
correctly links to math/0603097 without naming the authors; whoever ported it
invented "Kolpakov-Mednykh". The S1 citation audit (2026-05-31) then cemented
the error by adding the incorrect row to references.md.
Files corrected (7):
- code/include/hyper_ideal_utility.hpp
- code/include/hyper_ideal_functional.hpp
- code/tests/cgal/test_hyper_ideal_functional.cpp
- doc/math/references.md
- doc/roadmap/research-track.md
- doc/architecture/project-structure.md
- doc/api/tests.md
Also:
- doc/reviewer/math-derivation-citation-audit-2026-05-31.md: M1 post-correction noted
- doc/reviewer/finding-orchestration.md: lesson-learned section added (AI citation
audits can introduce plausible-but-wrong attributions; human expert review required
before CGAL submission)
- papers/MANUAL-DOWNLOAD.md: overview of papers requiring manual download (paywalled
journals, TU Berlin theses, books)
- .gitignore: papers/*.pdf excluded (downloaded arXiv PDFs, not tracked)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Test Suites
conformallab_tests — always built (no CGAL)
Pure-math tests, only Eigen required. Covers Java utilities ported in Phase 1–2.
| File | What it tests |
|---|---|
test_clausen.cpp |
Clausen Cl₂, Lobachevsky Л, ImLi₂ — values at known points |
test_hyper_ideal_utility.cpp |
Tetrahedron volumes (Meyerhoff / Springborn 2008) + Java golden-value oracle (Clausen/Л/ImLi₂, ζ₁₃/₁₄/₁₅/ζ, both volume formulas) |
test_matrix_utility.cpp |
Matrix helpers |
test_surface_curve_utility.cpp |
Surface curve utilities |
test_discrete_elliptic_utility.cpp |
Discrete elliptic functions |
test_p2_utility.cpp |
P2 projective utilities |
test_hyper_ideal_visualization_utility.cpp |
Poincaré disk projection, circumcircle |
Total: 26 tests, 0 skipped.
conformallab_cgal_tests — built with -DWITH_CGAL_TESTS=ON or -DWITH_CGAL=ON
All tests have CTest prefix cgal. (set via TEST_PREFIX "cgal." in CMakeLists).
| Suite | File | Tests | What is verified |
|---|---|---|---|
ConformalMeshTopology |
test_conformal_mesh.cpp |
4 | Euler characteristic, vertex/edge/face counts |
ConformalMeshTraversal |
test_conformal_mesh.cpp |
4 | Halfedge iteration, valence, opposite |
ConformalMeshProperties |
test_conformal_mesh.cpp |
5 | Property maps (λ, θ, idx, α, geometry type) |
ConformalMeshValidity |
test_conformal_mesh.cpp |
1 | CGAL validity for all factory meshes |
HyperIdealFunctional |
test_hyper_ideal_functional.cpp |
7 | FD gradient checks + Hessian symmetry |
SphericalFunctional |
test_spherical_functional.cpp |
13 | Angle formula + gradient + gauge-fix + cross-module Hessian check + closed-form edge-DOF oracle |
SphericalGoldenJava |
test_spherical_functional.cpp |
3 | Java golden oracles: (1) law-of-cosines angles + β relations + Л energy term; (2) full-mesh tetrahedron — per-vertex gradient + ΔE; (3) full-mesh edge-DOF gradient (vertex + edge components, Finding 3) vs raw conformalEnergyAndGradient |
EuclideanFunctional |
test_euclidean_functional.cpp |
12 | Angle formula + gradient + cross-module Hessian check |
EuclideanGoldenJava |
test_euclidean_functional.cpp |
2 | Java golden oracles: (1) angle formula + 2·Л(α) energy term; (2) full-mesh tetrahedron — per-vertex gradient + ΔE vs real EuclideanCyclicFunctional |
EuclideanHessian |
test_euclidean_hessian.cpp |
9 | Cotangent Laplacian structure, FD agreement, PSD, null space |
SphericalHessian |
test_spherical_hessian.cpp |
8 | Derivative correctness, NSD at equilibrium |
NewtonSolver |
test_newton_solver.cpp |
11 | Convergence: Euclidean ×3, Spherical ×4, HyperIdeal ×4 |
SparseQRFallback |
test_newton_solver.cpp |
3 | Full-rank LDLT · singular matrix → QR · closed mesh gauge mode |
MeshIO |
test_mesh_io.cpp |
6 | OFF/OBJ round-trips, error handling |
Pipeline |
test_pipeline.cpp |
5 | End-to-end: build → setup → solve → export → reload |
Layout |
test_layout.cpp |
6 | Edge-length preservation (Eucl./Spher.), Poincaré disk layout |
Serialization |
test_layout.cpp |
2 | JSON and XML round-trips (DOF vector + layout UVs) |
GaussBonnet |
test_phase6.cpp |
12 | χ, genus, sum/RHS, deficit, check, enforce |
CutGraph |
test_phase6.cpp |
6 | Tree-cotree, open/closed meshes, flag–index consistency |
HyperbolicTrilateration |
test_phase6.cpp |
4 | Möbius + law of cosines: exact distances, disk interior, off-origin |
Normalisation |
test_phase6.cpp |
4 | Euclidean centroid, length ratios, Möbius centring |
MobiusMap |
test_phase7.cpp |
8 | Identity, inverse, compose, from_three, apply(Vector2d) |
BestRootFace |
test_phase7.cpp |
2 | Valid root face selection, interior bonus |
HalfedgeUV |
test_phase7.cpp |
4 | Size = number of half-edges, seam consistency, boundary half-edges = 0 |
PriorityBFS |
test_phase7.cpp |
3 | Success, no seam on open meshes, all vertices placed |
NormaliseEuclidean |
test_phase7.cpp |
2 | UV centroid = 0, halfedge_uv centroid = 0 |
PeriodMatrix |
test_phase7.cpp |
8 | τ ∈ ℍ, SL(2,ℤ) reduction, exception outside ℍ, Java normalizeModulus golden oracle |
FundamentalDomain |
test_phase7.cpp |
7 | Genus-1 parallelogram CCW, generators, g > 1 empty |
TilingCopy/Neighbourhood |
test_phase7.cpp |
4 | Translation correct, tile count |
HolonomyEndToEnd |
test_phase7.cpp |
3 | Full pipeline τ on tori of revolution (4×4, hex 6×6, 8×8) vs analytic modulus i·√(R²−r²)/r |
CuttingUtility |
test_geometry_utils.cpp |
3 | point_in_triangle_2d: false, true, unit triangle (Java CuttingUtilityTest) |
UnwrapUtility |
test_geometry_utils.cpp |
2 | Corner angle: collinear → π, equilateral → π/3 (Java UnwrapUtilityTest) |
ConvergenceUtility |
test_geometry_utils.cpp |
6 | Circumradius + scale-invariant R_f/√A (Java ConvergenceUtilityTests) |
EuclideanLayout |
test_geometry_utils.cpp |
2 | Euclidean layout round-trip edge lengths |
SphericalLayout |
test_geometry_utils.cpp |
1 | Spherical layout on unit sphere |
HomologyGenerators |
test_geometry_utils.cpp |
1 | Genus-2 cut graph: χ = −2, 4 cut edges (brezel2.obj) |
SmokeEuclidean |
test_scalability_smoke.cpp |
3 | Smoke tests on real meshes: CatHead (open), Brezel genus-1, Brezel2 genus-2 |
CGALConformalTraits |
test_cgal_traits_mvp.cpp |
2 | Phase 8a MVP traits + Default model |
CGALDiscreteConformalMap |
test_cgal_traits_mvp.cpp |
6 | Phase 8a MVP wrapper smoke tests |
CPEuclideanFunctional |
test_cp_euclidean_functional.cpp |
10 | Phase 9a.1 — BPS-2010 face-based packing (Java parity) |
InversiveDistanceFunctional |
test_inversive_distance_functional.cpp |
11 | Phase 9a.2 — Luo-2004 vertex-based packing (from literature) |
HyperIdealHessian |
test_hyper_ideal_hessian.cpp |
7 | Phase 9b — block-FD vs full-FD cross-validation + PSD + speed-up |
NewtonPhase9a |
test_newton_phase9a.cpp |
7 | Phase 9a-Newton — convergence for the two new circle-packing solvers |
CGALPhase8bLite |
test_cgal_phase8b_lite.cpp |
17 | Phase 8b-Lite — CGAL entries for all 5 DCE models + output_uv_map (Euclidean, Spherical, HyperIdeal, Inversive-Distance) + CP-Euclidean throws-clearly + pipe-operator chaining |
Total: 246 tests, 0 skipped.
Running tests
# All CGAL tests
ctest --test-dir build -R "^cgal\." --output-on-failure
# One suite
./build/conformallab_cgal_tests --gtest_filter="PeriodMatrix*"
# One specific test
./build/conformallab_cgal_tests --gtest_filter="PeriodMatrix.TauInUpperHalfPlane"
# Verbose output with timing
./build/conformallab_cgal_tests --gtest_filter="NewtonSolver*" --gtest_print_time=1