Testing
The tester test/test.cpp checks every search against references that do
not come from the library, i.e., a breadth-first search of the whole state
space of the 8-puzzle, the optimal costs of the 100 instances of Korf
[7], Dijkstra’s algorithm on random grids and the distances on the
map of Romania; for each solution it checks both the cost and the path,
which must start at the initial state, end at a goal and be made of edges
of the Domain whose costs add up to the one reported. Its cases (the
sequential A*, then each parallel search on each runtime with 1 to 8
workers, and HDA* over MPI with 1, 2 and 4 processes) are listed in
test/tests.txt, which both CMake and the makefiles read, and the case
registry checks that the list and the cases of the tester are the same;
ctest runs them together with the examples of known answer. The CI runs
them on Linux with gcc and clang, on macOS and on Windows (without
FastFlow and MPI there), with the makefiles, and once more under
AddressSanitizer with UndefinedBehaviorSanitizer and under ThreadSanitizer,
which checks the synchronization of the searches in shared memory; with
each of the other sets of data structures of A* it runs them in Release
and under AddressSanitizer with UndefinedBehaviorSanitizer (with the
preconditions of ADS checked for its set), and on the three systems it builds
packaging/test against the installed package. The line coverage of the
tests is on Coveralls.