test all cases from command line

This commit is contained in:
kanhuang 2013-08-11 15:37:17 -04:00
parent 9651d0bcad
commit df462df4dc
5 changed files with 167 additions and 32 deletions

View File

@ -770,8 +770,8 @@ private:
typename Output_arrangement_2::Edge_iterator e_itr;
for (e_itr = out_arr.edges_begin() ;
e_itr != out_arr.edges_end() ; e_itr++) {
Halfedge_const_handle he = e_itr;
Halfedge_const_handle he_twin = he->twin();
Halfedge_handle he = e_itr;
Halfedge_handle he_twin = he->twin();
if (he->face() == he_twin->face()) {
out_arr.remove_edge(he);
}

View File

@ -353,7 +353,7 @@ public:
if(location == CDT::VERTEX){
std::cout << "query on vertex" << std::endl;
bool query_point_on_vertex_is_not_yet_implemented = false;
bool query_point_on_vertex_is_not_working_yet = false;
assert(query_point_on_vertex_is_not_working_yet);
assert(q == he->target()->point());

View File

@ -48,21 +48,83 @@ int main(int argc, char* argv[]) {
Naive_visibility_2;
typedef CGAL::Triangular_expansion_visibility_2<Arrangement_2>
Triangular_expansion_visibility_2;
if (argc == 2) {
Simple_polygon_visibility_2 simple_visibility;
Naive_visibility_2 naive_visibility;
Triangular_expansion_visibility_2 triangular_visibility;
const CGAL::Query_choice qchoice = CGAL::FACE;
Simple_polygon_visibility_2 simple_visibility;
Naive_visibility_2 naive_visibility;
Triangular_expansion_visibility_2 triangular_visibility;
CGAL::Query_choice qchoice = CGAL::FACE;
if (argc > 1) {
std::string input_arr_file(argv[1]);
std::ifstream input(input_arr_file.c_str());
// CGAL::benchmark<Naive_visibility_2, Triangular_expansion_visibility_2>
// (naive_visibility, triangular_visibility, qchoice, input);
CGAL::benchmark<Simple_polygon_visibility_2, Triangular_expansion_visibility_2>
(simple_visibility, triangular_visibility, qchoice, input);
if (argc == 2) {
CGAL::benchmark<Simple_polygon_visibility_2, Triangular_expansion_visibility_2>
(simple_visibility, triangular_visibility, qchoice, input);
return 0;
}
if (argc == 3) {
qchoice = CGAL::FACE;
std::string class_name(argv[2]);
if ( class_name == "SN") {
CGAL::benchmark<Simple_polygon_visibility_2, Naive_visibility_2>
(simple_visibility, naive_visibility, qchoice, input);
return 0;
}
if (class_name == "ST") {
CGAL::benchmark<Simple_polygon_visibility_2, Triangular_expansion_visibility_2>
(simple_visibility, triangular_visibility, qchoice, input);
return 0;
}
if (class_name == "NT") {
CGAL::benchmark<Naive_visibility_2, Triangular_expansion_visibility_2>
(naive_visibility, triangular_visibility, qchoice, input);
return 0;
}
std::cout<<"no type is matched.\n";
return 0;
}
if (argc == 4) {
std::string query_type(argv[3]);
if (query_type == "vertex")
qchoice = CGAL::VERTEX;
else {
if (query_type == "edge")
qchoice = CGAL::EDGE;
else {
if (query_type == "face")
qchoice = CGAL::FACE;
else {
std::cout<<"query type is not matched.\n";
return 0;
}
}
}
std::string class_name(argv[2]);
if ( class_name == "SN") {
CGAL::benchmark<Simple_polygon_visibility_2, Naive_visibility_2>
(simple_visibility, naive_visibility, qchoice, input);
return 0;
}
if (class_name == "ST") {
CGAL::benchmark<Simple_polygon_visibility_2, Triangular_expansion_visibility_2>
(simple_visibility, triangular_visibility, qchoice, input);
return 0;
}
if (class_name == "NT") {
CGAL::benchmark<Naive_visibility_2, Triangular_expansion_visibility_2>
(naive_visibility, triangular_visibility, qchoice, input);
return 0;
}
std::cout<<"no type is matched.\n";
return 0;
}
}
else {
std::cout << "Usage: ./benchmark [filename]\n";
std::cout << "Usage: ./benchmark [filename] [Class types] [Query type]\n";
std::cout << "where [Class type] could be SN(simple and naive), ST(simple and triangular) and NT(naive and triangular), indicating which classes you want to test.\n";
std::cout << "[Query type] could be vertex, edge, face.\n";
std::cout << "The default value of [Class type] is ST. The default value of [Query type] is face.\n";
exit(0);
}
}

View File

@ -687,7 +687,7 @@ void benchmark_one_unit(
<< GREEN << timer.time() << " sec" << RESET << std::endl;
assert(true == (CGAL::test_are_equal<Output_arrangement_2>
(out_arr_fst, out_arr_snd)));
(out_arr_fst, out_arr_snd)));
} while (++curr != circ);
}
@ -804,10 +804,10 @@ int intersect_seg(const Segment_2& seg1, const Segment_2& seg2, Segment_2& seg_o
return 0;
}
}
//make sure q is in fh or on the bound.
template<class Visibility_2>
bool is_star_shape(const typename Visibility_2::Point_2& q,
const typename Visibility_2::Face_const_handle fh) {
const typename Visibility_2::Face_handle fh) {
typedef typename Visibility_2::Output_arrangement_2
Output_arrangement_2;
typedef typename Output_arrangement_2::Face_const_handle Face_const_handle;
@ -831,8 +831,7 @@ bool is_star_shape(const typename Visibility_2::Point_2& q,
Point_2 source = curr1->source()->point();
Point_2 target = curr1->target()->point();
int i = intersect_seg<Segment_2, Point_2>(Segment_2(p, q), Segment_2(source, target), intersect_s, intersect_p);
if (i == 1 && intersect_p != source && intersect_p != target)
if (i == 1 && intersect_p != source && intersect_p != target && intersect_p != q)
return false;
} while (++curr1 != circ1);
} while (++curr != circ);
@ -854,8 +853,11 @@ void test_star_shape_one_face( const typename Visibility_2::Input_arrangement_2
typedef typename Input_arrangement_2::Geometry_traits_2 Geometry_traits_2;
typedef typename Input_arrangement_2::Face_const_handle Face_const_handle;
typedef typename Input_arrangement_2::Ccb_halfedge_const_circulator
Ccb_halfedge_const_circulator;
typedef typename Output_arrangement_2::Face_handle Face_handle;
typedef typename Geometry_traits_2::Point_2 Point_2;
typedef typename Geometry_traits_2::FT Number_type;
typedef Timer Benchmark_timer;
@ -899,14 +901,14 @@ void test_star_shape_one_face( const typename Visibility_2::Input_arrangement_2
std::cout << " Running with qpoint: "
<< RED << curr_query_pt << RESET << std::endl;
Output_arrangement_2 out_arr;
Face_const_handle fh;
Face_handle fh;
if (choice == FACE) {
fh = visibility.visibility_region(curr_query_pt, fit, out_arr);
}
else {
fh = visibility.visibility_region(curr_query_pt, he, out_arr);
}
if ( !is_star_shape(curr_query_pt, fh)) {
if ( !is_star_shape<Visibility_2>(curr_query_pt, fh)) {
std::cout << RED << " The face is not a star shape to qpoint." << RESET << std::endl;
}
} while (++curr != circ);
@ -959,7 +961,7 @@ void test_star_shape(Visibility_2 &visibility,
int cnt(1);
for (fit = arr.faces_begin() ; fit != arr.faces_end() ; fit++) {
if (!fit->is_unbounded()) {
std::cout << "Benchmarking with face "
std::cout << "Test star-shape with face "
<< GREEN << cnt << RESET << " ..." << std::endl;
Hole_const_iterator hit;
bool has_holes = false;

View File

@ -32,6 +32,7 @@
#include <CGAL/test_model_methods.h>
#include <CGAL/test_utils.h>
#include <iostream>
#include <fstream>
@ -52,20 +53,90 @@ int main(int argc, char* argv[]) {
if (argc == 2) {
Simple_polygon_visibility_2 simple_visibility;
Naive_visibility_2 naive_visibility;
Triangular_expansion_visibility_2 triangular_visibility;
const CGAL::Query_choice qchoice = CGAL::FACE;
std::string input_arr_file(argv[1]);
std::ifstream input(input_arr_file.c_str());
CGAL::test_star_shape<Naive_visibility_2>
(naive_visibility, qchoice, input);
// CGAL::benchmark<Simple_polygon_visibility_2, Triangular_expansion_visibility_2>
// (simple_visibility, triangular_visibility, qchoice, input);
CGAL::test_star_shape<Simple_polygon_visibility_2>
(simple_visibility, qchoice, input);
return 0;
}
else {
std::cout << "Usage: ./benchmark [filename]\n";
exit(0);
if (argc == 3) {
const CGAL::Query_choice qchoice = CGAL::FACE;
std::string input_arr_file(argv[1]);
std::ifstream input(input_arr_file.c_str());
std::string class_name(argv[2]);
if ( class_name == "simple") {
Simple_polygon_visibility_2 simple_visibility;
CGAL::test_star_shape<Simple_polygon_visibility_2>
(simple_visibility, qchoice, input);
return 0;
}
if (class_name == "naive") {
Naive_visibility_2 naive_visibility;
CGAL::test_star_shape<Naive_visibility_2>
(naive_visibility, qchoice, input);
return 0;
}
if (class_name == "triangular") {
Triangular_expansion_visibility_2 triangular_visibility;
CGAL::test_star_shape<Triangular_expansion_visibility_2>
(triangular_visibility, qchoice, input);
return 0;
}
std::cout<<"no type is matched.\n";
return 0;
}
if (argc == 4) {
std::string input_arr_file(argv[1]);
std::ifstream input(input_arr_file.c_str());
CGAL::Query_choice qchoice;
std::string query_type(argv[3]);
if (query_type == "vertex")
qchoice = CGAL::VERTEX;
else {
if (query_type == "edge")
qchoice = CGAL::EDGE;
else {
if (query_type == "face")
qchoice = CGAL::FACE;
else {
std::cout<<"query type is not matched.\n";
return 0;
}
}
}
std::string class_name(argv[2]);
if (class_name == "simple") {
Simple_polygon_visibility_2 simple_visibility;
CGAL::test_star_shape<Simple_polygon_visibility_2>
(simple_visibility, qchoice, input);
return 0;
}
if (class_name == "naive") {
Naive_visibility_2 naive_visibility;
CGAL::test_star_shape<Naive_visibility_2>
(naive_visibility, qchoice, input);
return 0;
}
if (class_name == "triangular") {
Triangular_expansion_visibility_2 triangular_visibility;
CGAL::test_star_shape<Triangular_expansion_visibility_2>
(triangular_visibility, qchoice, input);
return 0;
}
std::cout<<"no type is matched.\n";
return 0;
}
std::cout << "Usage: ./test_star_shape [filename] [Class type] [Query type]\n";
std::cout << "where [Class type] could be simple, naive and triangular, indicating which class you want to test.\n";
std::cout << "[Query type] could be vertex, edge, face.\n";
std::cout << "The default value of [Query type] is face. The default value of [Class type] is simple.\n";
exit(0);
}
return 0;
}