/ src / test / fuzz / difference_formatter.cpp
difference_formatter.cpp
 1  // Copyright (c) 2025-present 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 <blockencodings.h>
 6  #include <streams.h>
 7  #include <random.h>
 8  #include <test/fuzz/fuzz.h>
 9  
10  #include <vector>
11  
12  FUZZ_TARGET(difference_formatter)
13  {
14      const auto block_hash = InsecureRandomContext{{}}.rand256();
15      DataStream ss{};
16      ss << block_hash << std::span{buffer};
17  
18      // Test deserialization
19      try {
20          BlockTransactionsRequest test_container;
21          ss >> test_container;
22          assert(test_container.blockhash == block_hash);
23  
24          // Invariant: strictly monotonic increasing (no duplicates allowed)
25          for (size_t i = 1; i < test_container.indexes.size(); ++i) {
26              assert(test_container.indexes[i] > test_container.indexes[i-1]);
27          }
28  
29      } catch (const std::ios_base::failure&) {
30          // Expected for malformed input
31      }
32  }