Avoid repeating the exponential search for odd orders at least nine. Search the even predecessor, translate its row-major placements to the enlarged board, and tile the new border. Keep direct search and construction explicit so benchmarks can report their costs separately. Verify the routed order-9 result independently and require its search counters to match order 8. Tests: Release, Debug, ASan and UBSan CTest (8 passed each) Refs: #6
46 lines
1.7 KiB
Markdown
46 lines
1.7 KiB
Markdown
# Testing
|
|
|
|
The default test suite is deterministic and has no elapsed-time assertions.
|
|
Configure a build, compile it, and run the tests with CTest:
|
|
|
|
```sh
|
|
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.
|
|
|
|
## Debug and sanitizers
|
|
|
|
Use a separate build directory for each configuration:
|
|
|
|
```sh
|
|
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.
|