From 72b0e8a222648779fda808944b3923d3044124bc Mon Sep 17 00:00:00 2001 From: Dmitry Arkhipov Date: Wed, 10 Jul 2024 16:05:19 +0300 Subject: [PATCH] explicitly fail on errors during parsing in benchmarks --- bench/bench.cpp | 71 +++++++++++++++++++------------------------------ 1 file changed, 27 insertions(+), 44 deletions(-) diff --git a/bench/bench.cpp b/bench/bench.cpp index 38149bed5..36f5ddfea 100644 --- a/bench/bench.cpp +++ b/bench/bench.cpp @@ -294,16 +294,13 @@ class boost_default_impl : public any_impl std::size_t repeat) const override { auto const start = clock_type::now(); - stream_parser p({}, popts); + parser p({}, popts); while(repeat--) { p.reset(); - system::error_code ec; - p.write(s.data(), s.size(), ec); - if(! ec) - p.finish(ec); - if(! ec) - auto jv = p.release(); + p.write( s.data(), s.size() ); + auto jv = p.release(); + (void)jv; } return clock_type::now() - start; } @@ -320,29 +317,21 @@ class boost_default_impl : public any_impl FILE* f = fopen(fi.name.data(), "rb"); - system::error_code ec; while( true ) { std::size_t const sz = fread(s, 1, sizeof(s), f); if( ferror(f) ) - { - ec = std::io_errc::stream; break; - } - p.write( s, sz, ec ); - if( ec.failed() ) - break; + p.write(s, sz); if( feof(f) ) break; } - if(! ec) - p.finish(ec); - - if(! ec) - auto jv = p.release(); + p.finish(); + auto jv = p.release(); + (void)jv; fclose(f); } @@ -407,17 +396,14 @@ class boost_pool_impl : public any_impl std::size_t repeat) const override { auto const start = clock_type::now(); - stream_parser p({}, popts); + parser p({}, popts); while(repeat--) { monotonic_resource mr; p.reset(&mr); - system::error_code ec; - p.write(s.data(), s.size(), ec); - if(! ec) - p.finish(ec); - if(! ec) - auto jv = p.release(); + p.write( s.data(), s.size() ); + auto jv = p.release(); + (void)jv; } return clock_type::now() - start; } @@ -435,29 +421,21 @@ class boost_pool_impl : public any_impl FILE* f = fopen(fi.name.data(), "rb"); - system::error_code ec; while( true ) { std::size_t const sz = fread(s, 1, sizeof(s), f); if( ferror(f) ) - { - ec = std::io_errc::stream; break; - } - p.write( s, sz, ec ); - if( ec.failed() ) - break; + p.write(s, sz); if( feof(f) ) break; } - if(! ec) - p.finish(ec); - - if(! ec) - auto jv = p.release(); + p.finish(); + auto jv = p.release(); + (void)jv; fclose(f); } @@ -601,7 +579,8 @@ class boost_null_impl : public any_impl p.reset(); system::error_code ec; p.write(s.data(), s.size(), ec); - BOOST_ASSERT(! ec); + if( ec.failed() ) + throw system::system_error( ec ); } return clock_type::now() - start; } @@ -636,8 +615,10 @@ class boost_null_impl : public any_impl break; } - BOOST_ASSERT(! ec); fclose(f); + + if( ec.failed() ) + throw system::system_error( ec ); } return clock_type::now() - start; } @@ -679,9 +660,8 @@ class boost_simple_impl : public any_impl auto const start = clock_type::now(); while(repeat--) { - system::error_code ec; monotonic_resource mr; - auto jv = json::parse(s, ec, &mr, popts); + auto jv = json::parse(s, &mr, popts); (void)jv; } return clock_type::now() - start; @@ -693,10 +673,9 @@ class boost_simple_impl : public any_impl auto const start = clock_type::now(); while(repeat--) { - system::error_code ec; std::ifstream is( fi.name, std::ios::in | std::ios::binary ); monotonic_resource mr; - auto jv = json::parse(is, ec, &mr, popts); + auto jv = json::parse(is, &mr, popts); (void)jv; } return clock_type::now() - start; @@ -749,6 +728,8 @@ class boost_operator_impl : public any_impl value jv(&mr); is.seekg(0); is >> popts >> jv; + if( is.fail() ) + throw system::system_error( std::io_errc::stream ); } return clock_type::now() - start; } @@ -762,6 +743,7 @@ class boost_operator_impl : public any_impl monotonic_resource mr; value jv(&mr); std::ifstream is( fi.name, std::ios::in | std::ios::binary ); + is.exceptions(std::ios::failbit); is >> popts >> jv; } return clock_type::now() - start; @@ -779,6 +761,7 @@ class boost_operator_impl : public any_impl while(repeat--) { std::ostringstream os; + os.exceptions(std::ios::failbit); os << jv; out = os.str(); }