| 98 | } // namespace |
| 99 | |
| 100 | int main(int argc, char **argv) |
| 101 | { |
| 102 | if (argc < 2) |
| 103 | { |
| 104 | std::cerr << "Usage: " << argv[0] << " file.json\n"; |
| 105 | return EXIT_FAILURE; |
| 106 | } |
| 107 | |
| 108 | const auto obj = load(argv[1]); |
| 109 | |
| 110 | TIMER_START(string); |
| 111 | std::string out_str; |
| 112 | json::render(out_str, obj); |
| 113 | TIMER_STOP(string); |
| 114 | std::cout << "String: " << TIMER_MSEC(string) << "ms" << std::endl; |
| 115 | |
| 116 | TIMER_START(stringstream); |
| 117 | std::stringstream ss; |
| 118 | json::render(ss, obj); |
| 119 | std::string out_ss_str{ss.str()}; |
| 120 | TIMER_STOP(stringstream); |
| 121 | |
| 122 | std::cout << "Stringstream: " << TIMER_MSEC(stringstream) << "ms" << std::endl; |
| 123 | TIMER_START(vector); |
| 124 | std::vector<char> out_vec; |
| 125 | json::render(out_vec, obj); |
| 126 | TIMER_STOP(vector); |
| 127 | std::cout << "Vector: " << TIMER_MSEC(vector) << "ms" << std::endl; |
| 128 | |
| 129 | if (std::string{out_vec.begin(), out_vec.end()} != out_str || out_str != out_ss_str) |
| 130 | { |
| 131 | std::cerr << "Vector/string results are not equal\n"; |
| 132 | throw std::logic_error("Vector/stringstream/string results are not equal"); |
| 133 | } |
| 134 | return EXIT_SUCCESS; |
| 135 | } |