aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz/float.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/fuzz/float.cpp')
-rw-r--r--src/test/fuzz/float.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/src/test/fuzz/float.cpp b/src/test/fuzz/float.cpp
index d18a87d177..adef66a3ee 100644
--- a/src/test/fuzz/float.cpp
+++ b/src/test/fuzz/float.cpp
@@ -3,14 +3,14 @@
// 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 <util/serfloat.h>
#include <version.h>
#include <cassert>
-#include <cstdint>
+#include <cmath>
+#include <limits>
FUZZ_TARGET(float)
{
@@ -19,24 +19,17 @@ FUZZ_TARGET(float)
{
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);
+ uint64_t encoded = EncodeDouble(d);
+ if constexpr (std::numeric_limits<double>::is_iec559) {
+ if (!std::isnan(d)) {
+ uint64_t encoded_in_memory;
+ std::copy((const unsigned char*)&d, (const unsigned char*)(&d + 1), (unsigned char*)&encoded_in_memory);
+ assert(encoded_in_memory == encoded);
+ }
+ }
+ double d_deserialized = DecodeDouble(encoded);
+ assert(std::isnan(d) == std::isnan(d_deserialized));
+ assert(std::isnan(d) || d == d_deserialized);
}
}