mirror of https://github.com/CGAL/cgal
test all cases from command line
This commit is contained in:
parent
9651d0bcad
commit
df462df4dc
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue