aboutsummaryrefslogtreecommitdiff
path: root/src/test/fuzz
diff options
context:
space:
mode:
authorPieter Wuille <pieter@wuille.net>2024-05-28 21:18:52 -0400
committerPieter Wuille <pieter@wuille.net>2024-08-01 16:03:34 -0400
commit04d7a04ea426dd0a69b61e3b887867b0277d84d1 (patch)
tree20eaceab7294f40bf2dc69b50129a63057d17c4b /src/test/fuzz
parent4f8958d7563ae2d0d359ec1e6885f8cb5e40a5e0 (diff)
clusterlin: add MergeLinearizations function + fuzz test + benchmark
Diffstat (limited to 'src/test/fuzz')
-rw-r--r--src/test/fuzz/cluster_linearize.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/fuzz/cluster_linearize.cpp b/src/test/fuzz/cluster_linearize.cpp
index 2412db5c1b..2dfdfbb41d 100644
--- a/src/test/fuzz/cluster_linearize.cpp
+++ b/src/test/fuzz/cluster_linearize.cpp
@@ -929,3 +929,29 @@ FUZZ_TARGET(clusterlin_postlinearize_moved_leaf)
auto cmp = CompareChunks(new_chunking, old_chunking);
assert(cmp >= 0);
}
+
+FUZZ_TARGET(clusterlin_merge)
+{
+ // Construct an arbitrary graph from the fuzz input.
+ SpanReader reader(buffer);
+ DepGraph<TestBitSet> depgraph;
+ try {
+ reader >> Using<DepGraphFormatter>(depgraph);
+ } catch (const std::ios_base::failure&) {}
+
+ // Retrieve two linearizations from the fuzz input.
+ auto lin1 = ReadLinearization(depgraph, reader);
+ auto lin2 = ReadLinearization(depgraph, reader);
+
+ // Merge the two.
+ auto lin_merged = MergeLinearizations(depgraph, lin1, lin2);
+
+ // Compute chunkings and compare.
+ auto chunking1 = ChunkLinearization(depgraph, lin1);
+ auto chunking2 = ChunkLinearization(depgraph, lin2);
+ auto chunking_merged = ChunkLinearization(depgraph, lin_merged);
+ auto cmp1 = CompareChunks(chunking_merged, chunking1);
+ assert(cmp1 >= 0);
+ auto cmp2 = CompareChunks(chunking_merged, chunking2);
+ assert(cmp2 >= 0);
+}