Collision Checker
test_common.cc
Go to the documentation of this file.
2 #if ENABLE_COLLISION_TESTS
4 
5 #include <fstream>
6 
7 namespace collision {
8 namespace test {
9 
10 template <typename T>
11 std::ofstream TestFailureLogger<T>::out_file;
12 template <typename T>
13 std::mutex TestFailureLogger<T>::file_mutex;
14 template <typename T>
15 int TestFailureLogger<T>::num_copies = 0;
16 
17 template <typename T>
19  static bool notified_of_file_open_error = false;
20  std::lock_guard<std::mutex> guard(file_mutex);
21  if (!num_copies) {
22  out_file.open(get_filename(), std::ofstream::out | std::ofstream::app);
23  if (out_file.fail())
24  if (!notified_of_file_open_error) {
25  std::cout << "Failed to open error log file" << std::endl;
26  notified_of_file_open_error = true;
27  }
28  }
29  num_copies++;
30 }
31 
32 template <typename T>
34  std::lock_guard<std::mutex> guard(file_mutex);
35  num_copies--;
36  if (!num_copies && out_file.is_open()) {
37  out_file.close();
38  }
39 }
40 
41 template <typename T>
42 int TestFailureLogger<T>::log_failure(std::string log_str) {
43  std::lock_guard<std::mutex> guard(file_mutex);
44  if (out_file.is_open() && !out_file.fail()) {
45  out_file << log_str;
46  }
47  return 0;
48 }
49 
50 template class TestFailureLogger<TestFailureLoggerNarrowphase>;
51 template class TestFailureLogger<TestFailureLoggerBroadphase>;
52 template class TestFailureLogger<TestFailureLoggerParentMap>;
53 
54 template <>
55 const char *TestFailureLogger<TestFailureLoggerNarrowphase>::get_filename(
56  void) {
57  static const char narrowphase_filename[] = NARROWPHASE_FILENAME;
58  return narrowphase_filename;
59 }
60 template <>
61 const char *TestFailureLogger<TestFailureLoggerBroadphase>::get_filename(void) {
62  static const char broadphase_filename[] = BROADPHASE_FILENAME;
63  return broadphase_filename;
64 }
65 
66 template <>
67 const char *TestFailureLogger<TestFailureLoggerParentMap>::get_filename(void) {
68  static const char parentmap_filename[] = PARENTMAP_FILENAME;
69  return parentmap_filename;
70 }
71 
72 } // namespace test
73 } // namespace collision
74 
75 #endif
int log_failure(std::string log_str)