Add UnitTest for DP
Conflicts: CMakeLists.txt
This commit is contained in:
parent
096208a154
commit
520f7fa2de
@ -41,7 +41,7 @@ add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/Util/FingerPrint.cpp FingerPrint.c
|
|||||||
VERBATIM)
|
VERBATIM)
|
||||||
|
|
||||||
add_custom_target(FingerPrintConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/FingerPrint.cpp)
|
add_custom_target(FingerPrintConfigure DEPENDS ${CMAKE_SOURCE_DIR}/Util/FingerPrint.cpp)
|
||||||
add_custom_target(tests DEPENDS datastructure-tests)
|
add_custom_target(tests DEPENDS datastructure-tests algorithm-tests)
|
||||||
add_custom_target(benchmarks DEPENDS rtree-bench)
|
add_custom_target(benchmarks DEPENDS rtree-bench)
|
||||||
|
|
||||||
set(BOOST_COMPONENTS date_time filesystem iostreams program_options regex system thread unit_test_framework)
|
set(BOOST_COMPONENTS date_time filesystem iostreams program_options regex system thread unit_test_framework)
|
||||||
@ -72,6 +72,7 @@ file(GLOB AlgorithmGlob Algorithms/*.cpp)
|
|||||||
file(GLOB HttpGlob Server/Http/*.cpp)
|
file(GLOB HttpGlob Server/Http/*.cpp)
|
||||||
file(GLOB LibOSRMGlob Library/*.cpp)
|
file(GLOB LibOSRMGlob Library/*.cpp)
|
||||||
file(GLOB DataStructureTestsGlob UnitTests/DataStructures/*.cpp DataStructures/HilbertValue.cpp)
|
file(GLOB DataStructureTestsGlob UnitTests/DataStructures/*.cpp DataStructures/HilbertValue.cpp)
|
||||||
|
file(GLOB AlgorithmTestsGlob UnitTests/Algorithms/*.cpp)
|
||||||
|
|
||||||
set(
|
set(
|
||||||
OSRMSources
|
OSRMSources
|
||||||
@ -93,6 +94,7 @@ add_executable(osrm-datastore datastore.cpp $<TARGET_OBJECTS:COORDINATE> $<TARGE
|
|||||||
|
|
||||||
# Unit tests
|
# Unit tests
|
||||||
add_executable(datastructure-tests EXCLUDE_FROM_ALL UnitTests/datastructure_tests.cpp ${DataStructureTestsGlob} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE>)
|
add_executable(datastructure-tests EXCLUDE_FROM_ALL UnitTests/datastructure_tests.cpp ${DataStructureTestsGlob} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE>)
|
||||||
|
add_executable(algorithm-tests EXCLUDE_FROM_ALL UnitTests/algorithm_tests.cpp ${AlgorithmTestsGlob} $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE>)
|
||||||
|
|
||||||
# Benchmarks
|
# Benchmarks
|
||||||
add_executable(rtree-bench EXCLUDE_FROM_ALL Benchmarks/StaticRTreeBench.cpp $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE>)
|
add_executable(rtree-bench EXCLUDE_FROM_ALL Benchmarks/StaticRTreeBench.cpp $<TARGET_OBJECTS:COORDINATE> $<TARGET_OBJECTS:LOGGER> $<TARGET_OBJECTS:PHANTOMNODE>)
|
||||||
@ -195,6 +197,7 @@ target_link_libraries(osrm-prepare ${Boost_LIBRARIES})
|
|||||||
target_link_libraries(osrm-routed ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
|
target_link_libraries(osrm-routed ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
|
||||||
target_link_libraries(osrm-datastore ${Boost_LIBRARIES})
|
target_link_libraries(osrm-datastore ${Boost_LIBRARIES})
|
||||||
target_link_libraries(datastructure-tests ${Boost_LIBRARIES})
|
target_link_libraries(datastructure-tests ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(algorithm-tests ${Boost_LIBRARIES} ${OPTIONAL_SOCKET_LIBS} OSRM)
|
||||||
target_link_libraries(rtree-bench ${Boost_LIBRARIES})
|
target_link_libraries(rtree-bench ${Boost_LIBRARIES})
|
||||||
|
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
@ -203,6 +206,7 @@ target_link_libraries(osrm-datastore ${CMAKE_THREAD_LIBS_INIT})
|
|||||||
target_link_libraries(osrm-prepare ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(osrm-prepare ${CMAKE_THREAD_LIBS_INIT})
|
||||||
target_link_libraries(OSRM ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(OSRM ${CMAKE_THREAD_LIBS_INIT})
|
||||||
target_link_libraries(datastructure-tests ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(datastructure-tests ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
target_link_libraries(algorithm-tests ${CMAKE_THREAD_LIBS_INIT})
|
||||||
target_link_libraries(rtree-bench ${CMAKE_THREAD_LIBS_INIT})
|
target_link_libraries(rtree-bench ${CMAKE_THREAD_LIBS_INIT})
|
||||||
|
|
||||||
find_package(TBB REQUIRED)
|
find_package(TBB REQUIRED)
|
||||||
@ -214,6 +218,7 @@ target_link_libraries(osrm-extract ${TBB_LIBRARIES})
|
|||||||
target_link_libraries(osrm-prepare ${TBB_LIBRARIES})
|
target_link_libraries(osrm-prepare ${TBB_LIBRARIES})
|
||||||
target_link_libraries(osrm-routed ${TBB_LIBRARIES})
|
target_link_libraries(osrm-routed ${TBB_LIBRARIES})
|
||||||
target_link_libraries(datastructure-tests ${TBB_LIBRARIES})
|
target_link_libraries(datastructure-tests ${TBB_LIBRARIES})
|
||||||
|
target_link_libraries(algorithm-tests ${TBB_LIBRARIES})
|
||||||
target_link_libraries(rtree-bench ${TBB_LIBRARIES})
|
target_link_libraries(rtree-bench ${TBB_LIBRARIES})
|
||||||
include_directories(${TBB_INCLUDE_DIR})
|
include_directories(${TBB_INCLUDE_DIR})
|
||||||
|
|
||||||
|
83
UnitTests/Algorithms/DouglasPeuckerTest.cpp
Normal file
83
UnitTests/Algorithms/DouglasPeuckerTest.cpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
#include "../../Algorithms/DouglasPeucker.h"
|
||||||
|
#include "../../DataStructures/SegmentInformation.h"
|
||||||
|
#include "../../Include/osrm/Coordinate.h"
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
#include <boost/test/test_case_template.hpp>
|
||||||
|
#include <boost/mpl/list.hpp>
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE(douglas_peucker)
|
||||||
|
|
||||||
|
SegmentInformation getTestInfo(int lat, int lon, bool necessary)
|
||||||
|
{
|
||||||
|
return SegmentInformation(FixedPointCoordinate(lat, lon),
|
||||||
|
0, 0, 0, TurnInstruction::HeadOn, necessary, false, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(all_necessary_test)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* x
|
||||||
|
* / \
|
||||||
|
* x \
|
||||||
|
* / \
|
||||||
|
* x x
|
||||||
|
*/
|
||||||
|
std::vector<SegmentInformation> info = {
|
||||||
|
getTestInfo(5, 5, true),
|
||||||
|
getTestInfo(6, 6, true),
|
||||||
|
getTestInfo(10, 10, true),
|
||||||
|
getTestInfo(5, 15, true)
|
||||||
|
};
|
||||||
|
DouglasPeucker dp;
|
||||||
|
for (unsigned z = 0; z < 20; z++)
|
||||||
|
{
|
||||||
|
dp.Run(info, z);
|
||||||
|
for (const auto& i : info)
|
||||||
|
{
|
||||||
|
BOOST_CHECK_EQUAL(i.necessary, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(remove_second_node_test)
|
||||||
|
{
|
||||||
|
DouglasPeucker dp;
|
||||||
|
for (unsigned z = 0; z < 19; z++)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* x--x
|
||||||
|
* | \
|
||||||
|
* x-x x
|
||||||
|
* |
|
||||||
|
* x
|
||||||
|
*/
|
||||||
|
std::vector<SegmentInformation> info = {
|
||||||
|
getTestInfo(5 * COORDINATE_PRECISION,
|
||||||
|
5 * COORDINATE_PRECISION, true),
|
||||||
|
getTestInfo(5 * COORDINATE_PRECISION,
|
||||||
|
5 * COORDINATE_PRECISION + DOUGLAS_PEUCKER_THRESHOLDS[z], false),
|
||||||
|
getTestInfo(10 * COORDINATE_PRECISION,
|
||||||
|
10 * COORDINATE_PRECISION, false),
|
||||||
|
getTestInfo(10 * COORDINATE_PRECISION,
|
||||||
|
10 + COORDINATE_PRECISION + DOUGLAS_PEUCKER_THRESHOLDS[z] * 2, false),
|
||||||
|
getTestInfo(5 * COORDINATE_PRECISION,
|
||||||
|
15 * COORDINATE_PRECISION, false),
|
||||||
|
getTestInfo(5 * COORDINATE_PRECISION + DOUGLAS_PEUCKER_THRESHOLDS[z],
|
||||||
|
15 * COORDINATE_PRECISION, true),
|
||||||
|
};
|
||||||
|
std::cout << "Threshold: " << DOUGLAS_PEUCKER_THRESHOLDS[z] << std::endl;
|
||||||
|
dp.Run(info, z);
|
||||||
|
std::cout << "z: " << z << std::endl;
|
||||||
|
BOOST_CHECK_EQUAL(info[0].necessary, true);
|
||||||
|
BOOST_CHECK_EQUAL(info[1].necessary, false);
|
||||||
|
BOOST_CHECK_EQUAL(info[2].necessary, true);
|
||||||
|
BOOST_CHECK_EQUAL(info[3].necessary, true);
|
||||||
|
BOOST_CHECK_EQUAL(info[4].necessary, false);
|
||||||
|
BOOST_CHECK_EQUAL(info[5].necessary, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_SUITE_END()
|
8
UnitTests/algorithm_tests.cpp
Normal file
8
UnitTests/algorithm_tests.cpp
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#define BOOST_TEST_MODULE algorithm tests
|
||||||
|
|
||||||
|
#include <boost/test/unit_test.hpp>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file will contain an automatically generated main function.
|
||||||
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user