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.