aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz/float.cpp
diff options
context:
space:
mode:
authorpracticalswift <practicalswift@users.noreply.github.com>2020-01-23 17:26:19 +0000
committerpracticalswift <practicalswift@users.noreply.github.com>2020-01-31 12:36:13 +0000
commit3c82b92d2e01e409cc46261bffcf3643102f0b94 (patch)
tree00676e43f9fb1efae651a7d87af78318932a7dcd /src/test/fuzz/float.cpp
parentc2bd5888607d283a229c9361747a93c83dfea0de (diff)
downloadbitcoin-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.cpp42
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);
+ }
+}