1 // Copyright (c) 2020 The Bitcoin Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include <memusage.h>
6 #include <serialize.h>
7 #include <streams.h>
8 #include <test/fuzz/FuzzedDataProvider.h>
9 #include <test/fuzz/fuzz.h>
10 #include <version.h>
11 
12 #include <cassert>
13 #include <cstdint>
14 
test_one_input(const std::vector<uint8_t> & buffer)15 void test_one_input(const std::vector<uint8_t>& buffer)
16 {
17     FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
18 
19     {
20         const double d = fuzzed_data_provider.ConsumeFloatingPoint<double>();
21         (void)memusage::DynamicUsage(d);
22         assert(ser_uint64_to_double(ser_double_to_uint64(d)) == d);
23 
24         CDataStream stream(SER_NETWORK, INIT_PROTO_VERSION);
25         stream << d;
26         double d_deserialized;
27         stream >> d_deserialized;
28         assert(d == d_deserialized);
29     }
30 
31     {
32         const float f = fuzzed_data_provider.ConsumeFloatingPoint<float>();
33         (void)memusage::DynamicUsage(f);
34         assert(ser_uint32_to_float(ser_float_to_uint32(f)) == f);
35 
36         CDataStream stream(SER_NETWORK, INIT_PROTO_VERSION);
37         stream << f;
38         float f_deserialized;
39         stream >> f_deserialized;
40         assert(f == f_deserialized);
41     }
42 }
43