Check the character in the output string instead of referring to a nonexistent grid_ member. This restores Debug compilation while preserving the intended invariant that rendering must not write an identical character twice. Size labels intentionally replace interior spaces, so requiring an entirely unwritten destination would reject valid solutions. Update the testing notes now that Debug builds pass. Tests: Debug and Release CTest suites (4 passed each) Refs: #7
44 lines
1.6 KiB
Markdown
44 lines
1.6 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 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.
|