BPPrint
General object hashing library for C++
test_bpprint.cpp
Go to the documentation of this file.
1 #include <bpprint/Format.hpp>
2 #include <iostream>
3 
4 #if defined(__clang__)
5  #pragma clang diagnostic push
6  #pragma clang diagnostic ignored "-Wformat-security"
7 #endif
8 
9 
10 template<typename... Targs>
11 void test_string(const std::string & fmt, Targs... args)
12 {
13  char refstr[1024];
14  snprintf(refstr, 1024, fmt.c_str(), args...);
15 
16  std::string bpstr = bpprint::format_string(fmt, args...);
17 
18  std::cout << "Format string: " << fmt << "\n";
19  std::cout << " Reference output: " << refstr << "\n";
20  std::cout << " BPPrint output: " << bpstr << "\n";
21 
22  if(std::string(refstr) != bpstr)
23  throw std::runtime_error("!!!!! MISMATCHED OUTPUT !!!!!\n");
24 }
25 
26 template<typename... Targs>
27 void test_format(const std::string & fmt, Targs &&... args)
28 {
29  test_string(fmt, args...);
30  test_string(fmt + " ", args...);
31  test_string(std::string(" ") + fmt, args...);
32  test_string(fmt + "\n", args...);
33  test_string(std::string("\n") + fmt, args...);
34  test_string(fmt + "\t", args...);
35  test_string(std::string("\t") + fmt, args...);
36 
37  // tests the border between stack and heap allocation
38  for(unsigned int i = 250; i < 260; i++)
39  test_string(std::string(i, '@') + fmt, args...);
40 }
41 
42 
43 int main(void)
44 {
45  try {
46  test_format("%s", "Hello");
47 
48  test_format("%0s", "Hello");
49  test_format("%-0s", "Hello");
50  test_format("%1s", "Hello");
51  test_format("%-1s", "Hello");
52  test_format("%2s", "Hello");
53  test_format("%-2s", "Hello");
54 
55  // escapes
56  test_format("%%");
57  test_format("%%?");
58  test_format("%%%d", 5);
59  //test_format("%%%?", 5);
60 
61 
62 
63  }
64  catch(std::exception & ex)
65  {
66  std::cout << "Test failed: " << ex.what() << "\n";
67  return 1;
68  }
69 
70  return 0;
71 }
std::string format_string(const std::string &str, Targs...args)
Definition: Format.hpp:145
int main(void)
void test_format(const std::string &fmt, Targs &&...args)
void test_string(const std::string &fmt, Targs...args)