From e48c4a79062530d87160c9aaead1f11f62857abb Mon Sep 17 00:00:00 2001 From: Daniel Russel Date: Tue, 30 Jan 2007 21:02:03 +0000 Subject: [PATCH] tweaked error reporting --- .../CGAL/Kinetic/Active_objects_vector.h | 3 +- .../Handle_degeneracy_function_kernel.h | 4 +- .../include/CGAL/Kinetic/Sort.h | 9 +- .../Kinetic/Two_list_pointer_event_queue.h | 4 +- .../include/CGAL/Kinetic/internal/Log.h | 2 - .../CGAL/Kinetic/internal/debug_counters.h | 11 ++ Kinetic_data_structures/src/CGAL/KDS_Log.cpp | 2 - .../src/CGAL/KDS_debug_counters.cpp | 17 ++ .../Delaunay_triangulation_2.cpp | 2 +- .../Delaunay_triangulation_3.cpp | 2 +- .../Kinetic_data_structures/exact_kds.cpp | 2 +- .../include/sort_test.h | 4 +- .../test/Kinetic_data_structures/numbers.cpp | 2 +- .../Kinetic_data_structures/numeric_kds.cpp | 2 +- .../regular_triangulation_3.cpp | 183 +++++++++--------- .../Kinetic_data_structures/simulator.cpp | 2 +- .../test/Kinetic_data_structures/solvers.cpp | 2 +- .../test/Kinetic_data_structures/timings.cpp | 2 +- 18 files changed, 145 insertions(+), 110 deletions(-) create mode 100644 Kinetic_data_structures/include/CGAL/Kinetic/internal/debug_counters.h create mode 100644 Kinetic_data_structures/src/CGAL/KDS_debug_counters.cpp diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/Active_objects_vector.h b/Kinetic_data_structures/include/CGAL/Kinetic/Active_objects_vector.h index df992e59368..38171ee7f00 100644 --- a/Kinetic_data_structures/include/CGAL/Kinetic/Active_objects_vector.h +++ b/Kinetic_data_structures/include/CGAL/Kinetic/Active_objects_vector.h @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -305,7 +306,7 @@ public: iss >> d; if (!iss) { CGAL_KINETIC_ERROR("ERROR reading object from line " << buf); - internal::fail__=true; + ++internal::io_errors__; } else { //CGAL_KINETIC_LOG(LOG_LOTS, "Read " << d << std::endl); insert(d); diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/Handle_degeneracy_function_kernel.h b/Kinetic_data_structures/include/CGAL/Kinetic/Handle_degeneracy_function_kernel.h index ef85c2f9e86..87c3f332ee6 100644 --- a/Kinetic_data_structures/include/CGAL/Kinetic/Handle_degeneracy_function_kernel.h +++ b/Kinetic_data_structures/include/CGAL/Kinetic/Handle_degeneracy_function_kernel.h @@ -21,6 +21,7 @@ #ifndef CGAL_KINETIC_ROOT_DEGEN_FK_H #define CGAL_KINETIC_ROOT_DEGEN_FK_H #include +#include CGAL_KINETIC_BEGIN_NAMESPACE; @@ -43,7 +44,7 @@ class HDRS{ CGAL_KINETIC_LOG(LOG_LOTS, "Function= " << uf << std::endl); CGAL_expensive_precondition(solver_.empty() || solver_.top() >= lb); -#if 0 +#ifndef NDEBUG if (!SLOPPY && k.sign_at_object()(uf, lb) == CGAL::NEGATIVE) { CGAL_KINETIC_ERROR( "Invalid certificate constructed for function " << uf << " between " << lb << " and " << ub << " will fail immediately." << std::endl); @@ -57,6 +58,7 @@ class HDRS{ CGAL_KINETIC_LOG(LOG_LOTS, "Degeneracy at " << solver_.top() << std::endl); CGAL::Sign sn = k.sign_after_object()(uf, lb); if (sn == CGAL::NEGATIVE) { + ++internal::function_degeneracies__; CGAL_KINETIC_LOG(LOG_LOTS, "Extra root at lower bound of " << lb << std::endl); } else { CGAL_KINETIC_LOG(LOG_LOTS, "Popping extra root at lower bound of " << lb << std::endl); diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/Sort.h b/Kinetic_data_structures/include/CGAL/Kinetic/Sort.h index 5efcebb9e2f..9f4fd95a30b 100644 --- a/Kinetic_data_structures/include/CGAL/Kinetic/Sort.h +++ b/Kinetic_data_structures/include/CGAL/Kinetic/Sort.h @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -272,7 +273,7 @@ public: std::cerr << "ERROR: order is "; write(std::cerr); std::cerr << std::endl; - CGAL::Kinetic::internal::fail__=true; + ++internal::audit_failures__; if (!wrote_objects_) { wrote_objects_=true; @@ -408,7 +409,11 @@ public: if (s_.will_fail()) out << " next is " << s_.failure_time(); else out << " out of failures"; } - void audit(typename Sort::Event_key tk) const { + void audit(typename Sort::Event_key +#ifndef NDEBUG + tk +#endif +) const { //std::cout << "Auditing event "; //write(std::cout); //std::cout << std::endl; diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/Two_list_pointer_event_queue.h b/Kinetic_data_structures/include/CGAL/Kinetic/Two_list_pointer_event_queue.h index be63b275bc0..75f5890160b 100644 --- a/Kinetic_data_structures/include/CGAL/Kinetic/Two_list_pointer_event_queue.h +++ b/Kinetic_data_structures/include/CGAL/Kinetic/Two_list_pointer_event_queue.h @@ -22,6 +22,7 @@ #define CGAL_KINETIC_BIN_QUEUE_H #include #include +#include #include #include #include @@ -31,6 +32,7 @@ #include #include #include +#include //int two_list_remaining=0; @@ -668,7 +670,7 @@ protected: #ifndef NDEBUG if (CGAL::compare(tc, tp) == CGAL::SMALLER) { std::cout << "ERROR: Out of order " << tc << std::endl << tp << std::endl << std::endl; - CGAL::Kinetic::internal::fail__= true; + ++internal::audit_failures__; } #endif //CGAL_assertion(tc >= tp); diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/internal/Log.h b/Kinetic_data_structures/include/CGAL/Kinetic/internal/Log.h index 1ac05481b8d..d24ab475a21 100644 --- a/Kinetic_data_structures/include/CGAL/Kinetic/internal/Log.h +++ b/Kinetic_data_structures/include/CGAL/Kinetic/internal/Log.h @@ -27,8 +27,6 @@ CGAL_KINETIC_BEGIN_INTERNAL_NAMESPACE -extern bool fail__; - class Logs { public: diff --git a/Kinetic_data_structures/include/CGAL/Kinetic/internal/debug_counters.h b/Kinetic_data_structures/include/CGAL/Kinetic/internal/debug_counters.h new file mode 100644 index 00000000000..43eba0bc177 --- /dev/null +++ b/Kinetic_data_structures/include/CGAL/Kinetic/internal/debug_counters.h @@ -0,0 +1,11 @@ +#include + +CGAL_KINETIC_BEGIN_NAMESPACE +namespace internal { + extern unsigned int function_degeneracies__; + extern unsigned int io_errors__; + extern unsigned int audit_failures__; + + void write_debug_counters(std::ostream &out); +} +CGAL_KINETIC_END_NAMESPACE diff --git a/Kinetic_data_structures/src/CGAL/KDS_Log.cpp b/Kinetic_data_structures/src/CGAL/KDS_Log.cpp index c508119cf7f..979406edad2 100644 --- a/Kinetic_data_structures/src/CGAL/KDS_Log.cpp +++ b/Kinetic_data_structures/src/CGAL/KDS_Log.cpp @@ -23,8 +23,6 @@ CGAL_KINETIC_BEGIN_INTERNAL_NAMESPACE -bool fail__=false; - Logs kds_logs; CGAL_KINETIC_END_INTERNAL_NAMESPACE diff --git a/Kinetic_data_structures/src/CGAL/KDS_debug_counters.cpp b/Kinetic_data_structures/src/CGAL/KDS_debug_counters.cpp new file mode 100644 index 00000000000..86c8d9234db --- /dev/null +++ b/Kinetic_data_structures/src/CGAL/KDS_debug_counters.cpp @@ -0,0 +1,17 @@ +#include + +#include + +CGAL_KINETIC_BEGIN_NAMESPACE +namespace internal { + unsigned int function_degeneracies__=0; + unsigned int io_errors__=0; + unsigned int audit_failures__=0; + + void write_debug_counters(std::ostream &out) { + out << "Degeneracies " << function_degeneracies__ << std::endl; + if (io_errors__ != 0) out << "I/O errors " << io_errors__ << std::endl; + if (audit_failures__ != 0) out << "Audit failures " << audit_failures__ << std::endl; + } +} +CGAL_KINETIC_END_NAMESPACE diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2.cpp index f2fb464f0b4..9593b3ad840 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_2.cpp @@ -88,6 +88,6 @@ int main(int, char *[]) std::cout << "No errors for " << std::distance(kdel.visitor().events_begin(), kdel.visitor().events_end()) << " events.\n"; } - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; + if (CGAL::Kinetic::internal::audit_failures__ != 0 ) return EXIT_FAILURE; else return EXIT_SUCCESS; }; diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3.cpp index f0d5155c56c..5c73c751dc9 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/Delaunay_triangulation_3.cpp @@ -84,6 +84,6 @@ int main(int, char *[]) //std::cout << "Insert " << queue_insertions__ << " and front " << queue_front_insertions__ << std::endl; //std::cout << "Sturm created " << sturm_created__ << " and shrink " << sturm_refined__ << std::endl; - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; + if (CGAL::Kinetic::internal::audit_failures__ != 0 ) return EXIT_FAILURE; else return EXIT_SUCCESS; }; diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/exact_kds.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/exact_kds.cpp index fc38e6d4460..aa0b8c2d299 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/exact_kds.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/exact_kds.cpp @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) { } - if (error || CGAL::Kinetic::internal::fail__) { + if (error || CGAL::Kinetic::internal::audit_failures__ != 0) { return EXIT_FAILURE; } else { diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/include/sort_test.h b/Kinetic_data_structures/test/Kinetic_data_structures/include/sort_test.h index ee802dc40c3..e16b2a457a8 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/include/sort_test.h +++ b/Kinetic_data_structures/test/Kinetic_data_structures/include/sort_test.h @@ -28,7 +28,7 @@ bool sort_test(Traits &tr, double max_events=std::numeric_limits::infini #ifndef NDEBUG if (tr.simulator_handle()->current_event_number() > max_events){ std::cerr << "ERROR too many events" << std::endl; - CGAL::Kinetic::internal::fail__=true; + ++CGAL::Kinetic::internal::audit_failures__; std::cerr << *tr.active_points_1_table_handle() << std::endl; } #endif @@ -73,7 +73,7 @@ bool sort_test(Traits &tr, double max_events=std::numeric_limits::infini std::cerr << etag << "Objects " << c->object() << " = " << tr.active_points_1_table_handle()->at(*c).x() << " and " << b->object() << " = " << tr.active_points_1_table_handle()->at(*b).x() << " out of order at end of time " <(tr, 3000); - if (error || CGAL::Kinetic::internal::fail__) { + if (error || CGAL::Kinetic::internal::audit_failures__ != 0) { return EXIT_FAILURE; } else { diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/regular_triangulation_3.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/regular_triangulation_3.cpp index f7ea8e54ea7..cbba66c1e19 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/regular_triangulation_3.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/regular_triangulation_3.cpp @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include #include @@ -17,103 +17,104 @@ int main(int, char *[]) if (0) { typedef CGAL::Kinetic::Regular_triangulation_inexact_simulation_traits Simulation_traits; - typedef CGAL::Kinetic::Regular_triangulation_event_log_visitor_3 Visitor; - typedef CGAL::Kinetic::Regular_triangulation_3 KDel; - Simulation_traits simtr(0,100000); - Simulation_traits::Simulator::Handle sp= simtr.simulator_handle(); + typedef CGAL::Kinetic::Regular_triangulation_event_log_visitor_3 Visitor; + typedef CGAL::Kinetic::Regular_triangulation_3 KDel; + Simulation_traits simtr(0,100000); + Simulation_traits::Simulator::Handle sp= simtr.simulator_handle(); - KDel kdel(simtr); - //CGAL_KINETIC_SET_LOG_LEVEL(CGAL::Kinetic::LOG_LOTS); - std::ifstream in("data/regular_triangulation_3.input"); - if (!in) { - std::cerr << "Error opening input file: " << "data/regular_triangulation_3.input" << std::endl; - return EXIT_FAILURE; - } - char buf[1000]; - int nread=0; - while (true ) { - in.getline(buf, 1000); - if (!in) break; - std::istringstream il(buf); - Simulation_traits::Kinetic_kernel::Weighted_point_3 p; - il >> p; - //std::cout << p << std::endl; - simtr.active_points_3_table_handle()->insert(p); // here - ++nread; - } - kdel.set_has_certificates(true); + KDel kdel(simtr); + //CGAL_KINETIC_SET_LOG_LEVEL(CGAL::Kinetic::LOG_LOTS); + std::ifstream in("data/regular_triangulation_3.input"); + if (!in) { + std::cerr << "Error opening input file: " << "data/regular_triangulation_3.input" << std::endl; + return EXIT_FAILURE; + } + char buf[1000]; + int nread=0; + while (true ) { + in.getline(buf, 1000); + if (!in) break; + std::istringstream il(buf); + Simulation_traits::Kinetic_kernel::Weighted_point_3 p; + il >> p; + //std::cout << p << std::endl; + simtr.active_points_3_table_handle()->insert(p); // here + ++nread; + } + kdel.set_has_certificates(true); - while (sp->next_event_time() - < sp->end_time()) { - sp->set_current_event_number(sp->current_event_number()+1); - } + while (sp->next_event_time() + < sp->end_time()) { + sp->set_current_event_number(sp->current_event_number()+1); + } } else { - typedef CGAL::Kinetic::Regular_triangulation_exact_simulation_traits Simulation_traits; - typedef CGAL::Kinetic::Regular_triangulation_event_log_visitor_3 Visitor; - typedef CGAL::Kinetic::Regular_triangulation_3 KDel; - Simulation_traits simtr(0,100000); - Simulation_traits::Simulator::Handle sp= simtr.simulator_handle(); + typedef CGAL::Kinetic::Regular_triangulation_CORE_exact_simulation_traits Simulation_traits; + typedef CGAL::Kinetic::Regular_triangulation_event_log_visitor_3 Visitor; + typedef CGAL::Kinetic::Regular_triangulation_3 KDel; + Simulation_traits simtr(0,100000); + Simulation_traits::Simulator::Handle sp= simtr.simulator_handle(); - KDel kdel(simtr); - //CGAL_KINETIC_SET_LOG_LEVEL(CGAL::Kinetic::LOG_LOTS); - std::ifstream in("data/regular_triangulation_3.input"); - if (!in) { - std::cerr << "Error opening input file: " << "data/regular_triangulation_3.input" << std::endl; - return EXIT_FAILURE; - } - char buf[1000]; - int nread=0; - while (true ) { - in.getline(buf, 1000); - if (!in) break; - std::istringstream il(buf); - Simulation_traits::Kinetic_kernel::Weighted_point_3 p; - il >> p; - //std::cout << p << std::endl; - simtr.active_points_3_table_handle()->insert(p); // here - ++nread; - } - kdel.set_has_certificates(true); - - while (sp->next_event_time() - < sp->end_time()) { - sp->set_current_event_number(sp->current_event_number()+1); - } - - /*std::copy(kdel.visitor().begin(), kdel.visitor().end(), - std::ostream_iterator(std::cout, "\n"));*/ - - std::ifstream out("data/regular_triangulation_3.output"); - if (!out) { - std::cerr << "Error opening input file: " << "data/regular_triangulation_3.output" << std::endl; - return EXIT_FAILURE; - } - - int error_count=0; - for (CGAL::Kinetic::Delaunay_triangulation_event_log_visitor_3::Event_iterator it = kdel.visitor().events_begin(); - it != kdel.visitor().events_end(); ++it) { - char buf[1000]; - out.getline(buf, 1000); - if (*it != buf) { - std::cerr << "ERROR Got event: " << *it << std::endl; - std::cerr << "ERROR Expected event: " << buf << std::endl; - ++error_count; + KDel kdel(simtr); + //CGAL_KINETIC_SET_LOG_LEVEL(CGAL::Kinetic::LOG_LOTS); + std::ifstream in("data/regular_triangulation_3.input"); + if (!in) { + std::cerr << "Error opening input file: " << "data/regular_triangulation_3.input" << std::endl; + return EXIT_FAILURE; } - } - - while (out) { char buf[1000]; - out.getline(buf, 1000); - if (out) { - std::cerr << "ERROR Missing event: " << buf << std::endl; - ++error_count; + int nread=0; + while (true ) { + in.getline(buf, 1000); + if (!in) break; + std::istringstream il(buf); + Simulation_traits::Kinetic_kernel::Weighted_point_3 p; + il >> p; + //std::cout << p << std::endl; + simtr.active_points_3_table_handle()->insert(p); // here + ++nread; } - } + kdel.set_has_certificates(true); - if (error_count != 0) { - std::cerr << "ERROR " << error_count << " errors in " << kdel.visitor().size() << " events.\n"; - } - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; - else return EXIT_SUCCESS; + while (sp->next_event_time() + < sp->end_time()) { + sp->set_current_event_number(sp->current_event_number()+1); + } + + /*std::copy(kdel.visitor().begin(), kdel.visitor().end(), + std::ostream_iterator(std::cout, "\n"));*/ + + std::ifstream out("data/regular_triangulation_3.output"); + if (!out) { + std::cerr << "Error opening input file: " << "data/regular_triangulation_3.output" << std::endl; + return EXIT_FAILURE; + } + + int error_count=0; + for (CGAL::Kinetic::Delaunay_triangulation_event_log_visitor_3::Event_iterator it = kdel.visitor().events_begin(); + it != kdel.visitor().events_end(); ++it) { + char buf[1000]; + out.getline(buf, 1000); + if (*it != buf) { + std::cerr << "ERROR Got event: " << *it << std::endl; + std::cerr << " Expected event: " << buf << std::endl; + ++error_count; + } + } + + while (out) { + char buf[1000]; + out.getline(buf, 1000); + if (out) { + std::cerr << "ERROR Missing event: " << buf << std::endl; + ++error_count; + } + } + + if (error_count != 0) { + std::cerr << "ERROR " << error_count << " errors in " << kdel.visitor().size() << " events.\n"; + } + CGAL::Kinetic::internal::write_debug_counters(std::cout); + if (CGAL::Kinetic::internal::audit_failures__ != 0) return EXIT_FAILURE; + else return EXIT_SUCCESS; } }; diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/simulator.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/simulator.cpp index 32693050836..dc582217ef0 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/simulator.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/simulator.cpp @@ -269,6 +269,6 @@ int main(int, char *[]) // if (!error) return EXIT_SUCCESS; //else - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; + if (CGAL::Kinetic::internal::audit_failures__ != 0 ) return EXIT_FAILURE; else return EXIT_SUCCESS; } diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/solvers.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/solvers.cpp index 53ea3ad0f1c..19d0eca1cd1 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/solvers.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/solvers.cpp @@ -127,6 +127,6 @@ int main(int, char *[]) } }*/ - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; + if (CGAL::Kinetic::internal::audit_failures__ != 0) return EXIT_FAILURE; else return EXIT_SUCCESS; } diff --git a/Kinetic_data_structures/test/Kinetic_data_structures/timings.cpp b/Kinetic_data_structures/test/Kinetic_data_structures/timings.cpp index 8aa8765de93..1d882c705c2 100644 --- a/Kinetic_data_structures/test/Kinetic_data_structures/timings.cpp +++ b/Kinetic_data_structures/test/Kinetic_data_structures/timings.cpp @@ -189,7 +189,7 @@ int main(int argc, char *argv[]) std::cout << "Sort\n"; test_sort < CGAL::Kinetic::Exact_simulation_traits > ("Upper bound"); - if (CGAL::Kinetic::internal::fail__) return EXIT_FAILURE; + if (CGAL::Kinetic::internal::audit_failures__ != 0) return EXIT_FAILURE; else return EXIT_SUCCESS; //test_sort < CGAL::Kinetic::Exact_simulation_traits_1 > ("Upper bound");