void ma_init() { init_arr(&g_arr); //dlist_init(&g_list); init_list(&g_list); srand(time(NULL)); }
bool test_one_file(std::ifstream& in, int verbose_level) { std::list<X_monotone_curve_2> xcurves; std::list<Point_2> isolated_points; read_arr(in, std::back_inserter(xcurves), std::back_inserter(isolated_points)); Arrangement arr1; construct_arr(arr1, xcurves.begin(), xcurves.end(), isolated_points.begin(), isolated_points.end(), verbose_level); isolated_points.clear(); xcurves.clear(); init_arr(arr1, verbose_level); read_arr(in, std::back_inserter(xcurves), std::back_inserter(isolated_points)); Arrangement arr2; construct_arr(arr2, xcurves.begin(), xcurves.end(), isolated_points.begin(), isolated_points.end(), verbose_level); isolated_points.clear(); xcurves.clear(); init_arr(arr2, verbose_level); // Read the number of cells left. Arrangement::Size num_vertices, num_edges, num_faces; in >> num_vertices >> num_edges >> num_faces; // Read the expected face data: std::vector<int> fdata(num_faces); std::copy(std::istream_iterator<int>(in), std::istream_iterator<int>(), fdata.begin()); Arrangement arr; Overlay_traits overlay_traits; if (verbose_level > 2) std::cout << "overlaying" << " ... "; std::cout.flush(); CGAL::overlay(arr1, arr2, arr, overlay_traits); if (verbose_level > 2) std::cout << "overlaid" << std::endl; // Verify the resulting arrangement. Arrangement::Size num_vertices_res = arr.number_of_vertices(); Arrangement::Size num_edges_res = arr.number_of_edges(); Arrangement::Size num_faces_res = arr.number_of_faces(); if (verbose_level > 0) std::cout << "Arrangement Output: " << std::endl; if (verbose_level > 1) { std::cout << "Halfedge Data: " << std::endl; Halfedge_iterator heit; for (heit = arr.halfedges_begin(); heit != arr.halfedges_end(); ++heit) std::cout << heit->source()->point() << " " << heit->target()->point() << " " << heit->data() << std::endl; } if (verbose_level > 0) { std::cout << "Face Data: " << std::endl; Face_iterator fit; for (fit = arr.faces_begin(); fit != arr.faces_end(); ++fit) std::cout << fit->data() << std::endl; } if ((num_vertices_res != num_vertices) || (num_edges_res != num_edges) || (num_faces_res != num_faces)) { std::cerr << "ERROR: The number of arrangement cells is incorrect:" << std::endl << " V = " << arr.number_of_vertices() << ", E = " << arr.number_of_edges() << ", F = " << arr.number_of_faces() << std::endl; arr.clear(); return false; } std::vector<int> fdata_res(num_faces); std::vector<int>::iterator it = fdata_res.begin(); Face_iterator fit; for (fit = arr.faces_begin(); fit != arr.faces_end(); ++fit) *it++ = fit->data(); std::sort(fdata_res.begin(), fdata_res.end()); if (! std::equal(fdata_res.begin(), fdata_res.end(), fdata.begin())) { std::cerr << "ERROR: Incorrect face data:" << std::endl; std::copy(fdata_res.begin(), fdata_res.end(), std::ostream_iterator<int>(std::cout, "\n")); arr.clear(); return false; } arr.clear(); return true; }
identifier<int>::identifier() : _arr(NULL), _elements() { init_arr(); }