Interface Documentation
Version: invalid
output.hh
1 #pragma once
2 
3 #include <fstream>
4 #include <iostream>
5 #include <memory>
6 #include <regex>
7 
8 namespace flecsi {
9 namespace util {
10 namespace unit {
11 
13 {
14 public:
15  static test_output_t & instance() {
16  static test_output_t g;
17  return g;
18  } // instance
19 
20  std::ostream & get_stream() {
21  return *stream_;
22  } // get_stream
23 
24  std::string get_buffer() {
25  return default_.str();
26  } // get_buffer
27 
28  void to_file(const std::string & filename) {
29  to_file(filename.c_str());
30  } // to_file
31 
32  void to_file(const char * filename) {
33  std::ofstream f(filename);
34 
35  if(!f.good()) {
36  std::cerr << "Failed to open " << filename << std::endl;
37  std::exit(1);
38  } // if
39 
40  f << default_.rdbuf();
41  } // to_file
42 
43  bool equal_blessed(const char * filename) {
44  std::string testdir_filename(filename);
45 
46  // backup rdbuffer, because it will get flushed by to_file
47  std::stringstream backup;
48  backup << default_.rdbuf();
49  backup >> default_.rdbuf();
50 
51  // save test output to .current for updates
52  size_t lastindex = testdir_filename.find_last_of(".");
53  std::string save_output =
54  testdir_filename.substr(0, lastindex) + ".current";
55  to_file(save_output);
56 
57  std::ifstream f(testdir_filename);
58 
59  if(!f.good()) {
60  std::cerr << "Failed to open " << filename << std::endl;
61  std::exit(1);
62  } // if
63 
64  std::stringstream ss;
65  ss << f.rdbuf();
66 
67  if(backup.str().compare(ss.str()) == 0) {
68  return true;
69  } // if
70 
71  return false;
72  } // equal_blessed
73 
74 private:
76  : stream_(new std::ostream(default_.rdbuf())) {} // test_output_t
77 
78  std::stringstream default_;
79  std::shared_ptr<std::ostream> stream_;
80 
81 }; // class test_output_t
82 
83 } // namespace unit
84 } // namespace util
85 } // namespace flecsi
Definition: output.hh:12
Definition: control.hh:31