20 #include <ripple/beast/unit_test.h>
21 #include <ripple/beast/utility/rngfill.h>
22 #include <ripple/beast/xor_shift_engine.h>
23 #include <ripple/protocol/digest.h>
37 template <
class Hasher>
44 for (
int i = 0; i != 4; i++)
49 h(x.data(), x.size());
50 (void)
static_cast<typename Hasher::result_type
>(h);
56 for (
auto& result : results)
58 auto const start = high_resolution_clock::now();
63 h(x.data(), x.size());
64 (void)
static_cast<typename Hasher::result_type
>(h);
67 auto const d = high_resolution_clock::now() - start;
72 log <<
" " << name <<
":" <<
'\n';
77 auto s = duration_cast<seconds>(
sum);
78 auto ms = duration_cast<milliseconds>(
sum) - s;
79 log <<
" Total Time = " << s.count() <<
"." << ms.count()
83 auto const mean =
sum / results.size();
85 auto s = duration_cast<seconds>(mean);
86 auto ms = duration_cast<milliseconds>(mean) - s;
87 log <<
" Mean Time = " << s.count() <<
"." << ms.count()
96 [&mean](
nanoseconds trial) { return (trial - mean).count(); });
100 nanoseconds const stddev{
static_cast<nanoseconds::rep
>(
102 auto s = duration_cast<seconds>(stddev);
103 auto ms = duration_cast<milliseconds>(stddev) - s;
104 log <<
" Std Dev = " << s.count() <<
"." << ms.count()
115 for (
int i = 0; i < 1000000; i++)
126 test<openssl_ripemd160_hasher>(
"OpenSSL");
127 test<beast::ripemd160_hasher>(
"Beast");
135 test<openssl_sha256_hasher>(
"OpenSSL");
136 test<beast::sha256_hasher>(
"Beast");
143 testcase(
"RIPEMD160");
144 test<openssl_ripemd160_hasher>(
"OpenSSL");
145 test<beast::ripemd160_hasher>(
"Beast");