Files
partridge-cpp/TESTING.md
T
Codex instance 0a7ce1e49e bench: add optional CP-SAT reference
Provide a separately installed OR-Tools model to compare a generic constraint solver with the native first-solution path without adding a production or default-test dependency.

Use no-overlap, exact-fill, edge and equal-copy symmetry constraints, validate placements independently, and record model size, memory, worker count and timings for orders 8 and 9. Keep the tool only as a reference and defer DLX absent new evidence.

Tests: Release CTest (9 passed)

Tests: Python reference tests and compilation checks

Tests: independently validated CP-SAT orders 8 and 9

Refs: #5
2026-07-30 17:40:17 +01:00

2.0 KiB

Testing

The default test suite is deterministic and has no elapsed-time assertions. Configure a build, compile it, and run the tests with CTest:

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir build --output-on-failure

The tests independently check board dimensions, square multiplicities, bounds, overlap, and complete coverage. They cover small unsatisfiable solver inputs, a known order-8 solution, invalid placement diagnostics, and construction of an order-9 solution from the order-8 fixture. The routed order-9 solver test checks that its search counters exactly match order 8. The rendering test also formats the known order-8 solution and checks the resulting grid dimensions and coverage.

When Python is available, reference-support also tests the dependency-free placement JSON validator. If the optional OR-Tools package is present, it additionally builds and solves the trivial order-1 CP-SAT model; otherwise that part is skipped without changing the default test result.

Debug and sanitizers

Use a separate build directory for each configuration:

cmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug
cmake --build build-debug
ctest --test-dir build-debug --output-on-failure

cmake -S . -B build-asan -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer" \
  -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address"
cmake --build build-asan
ctest --test-dir build-asan --output-on-failure

cmake -S . -B build-ubsan -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_CXX_FLAGS="-fsanitize=undefined -fno-omit-frame-pointer" \
  -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=undefined"
cmake --build build-ubsan
ctest --test-dir build-ubsan --output-on-failure

The sanitizer flags shown are supported by Clang and GCC. Other compilers may require different flags. A feasible solver run currently exposes the pre-existing defect tracked by issue #14; the test additions deliberately do not include its separate fix.