diff options
author | practicalswift <practicalswift@users.noreply.github.com> | 2020-01-23 17:26:19 +0000 |
---|---|---|
committer | practicalswift <practicalswift@users.noreply.github.com> | 2020-01-31 12:36:13 +0000 |
commit | 3c82b92d2e01e409cc46261bffcf3643102f0b94 (patch) | |
tree | 00676e43f9fb1efae651a7d87af78318932a7dcd /src/test/fuzz/float.cpp | |
parent | c2bd5888607d283a229c9361747a93c83dfea0de (diff) | |
download | bitcoin-3c82b92d2e01e409cc46261bffcf3643102f0b94.tar.xz |
tests: Add fuzzing harness for functions taking floating-point types as input
Diffstat (limited to 'src/test/fuzz/float.cpp')
-rw-r--r-- | src/test/fuzz/float.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/test/fuzz/float.cpp b/src/test/fuzz/float.cpp new file mode 100644 index 0000000000..a24bae5b35 --- /dev/null +++ b/src/test/fuzz/float.cpp @@ -0,0 +1,42 @@ +// Copyright (c) 2020 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include <memusage.h> +#include <serialize.h> +#include <streams.h> +#include <test/fuzz/FuzzedDataProvider.h> +#include <test/fuzz/fuzz.h> +#include <version.h> + +#include <cassert> +#include <cstdint> + +void test_one_input(const std::vector<uint8_t>& buffer) +{ + FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); + + { + const double d = fuzzed_data_provider.ConsumeFloatingPoint<double>(); + (void)memusage::DynamicUsage(d); + assert(ser_uint64_to_double(ser_double_to_uint64(d)) == d); + + CDataStream stream(SER_NETWORK, INIT_PROTO_VERSION); + stream << d; + double d_deserialized; + stream >> d_deserialized; + assert(d == d_deserialized); + } + + { + const float f = fuzzed_data_provider.ConsumeFloatingPoint<float>(); + (void)memusage::DynamicUsage(f); + assert(ser_uint32_to_float(ser_float_to_uint32(f)) == f); + + CDataStream stream(SER_NETWORK, INIT_PROTO_VERSION); + stream << f; + float f_deserialized; + stream >> f_deserialized; + assert(f == f_deserialized); + } +} |