From 259bd76dbdd944c1e19b0eace0f908c91bfd2db2 Mon Sep 17 00:00:00 2001 From: Krishn Parasar <76171905+Krishn1412@users.noreply.github.com> Date: Wed, 25 Jun 2025 23:17:08 +0530 Subject: [PATCH] Adding Quickcheck for binomial tree graph. The quickcheck verifies the structure of binomial tree graph by checking number of node, number of edges and if they are bidirectional. I plan on adding quickchecks for all the deterministic graph generators and some other algos like bipartite colouring before moving forward. --- .../tests/quickcheck/binomial_tree_graph.rs | 46 +++++++++++++++++++ rustworkx-core/tests/quickcheck/main.rs | 1 + 2 files changed, 47 insertions(+) create mode 100644 rustworkx-core/tests/quickcheck/binomial_tree_graph.rs diff --git a/rustworkx-core/tests/quickcheck/binomial_tree_graph.rs b/rustworkx-core/tests/quickcheck/binomial_tree_graph.rs new file mode 100644 index 0000000000..4918142a2c --- /dev/null +++ b/rustworkx-core/tests/quickcheck/binomial_tree_graph.rs @@ -0,0 +1,46 @@ +use petgraph::graph::UnGraph; +use petgraph::visit::EdgeRef; +use quickcheck::{quickcheck, TestResult}; +use rustworkx_core::generators::binomial_tree_graph; + +#[test] +fn prop_binomial_tree_structure() { + fn prop(order: u32) -> TestResult { + let order = order % 10; // upto 2^10 nodes due to memory constraints. + if order >= 60 { + return TestResult::discard(); + } + + let g = match binomial_tree_graph::, (), _, _, ()>( + order, + None, + || (), + || (), + true, + ) { + Ok(g) => g, + Err(_) => return TestResult::error("Unexpected error in graph generation"), + }; + + let expected_nodes = 2_usize.pow(order); + let expected_edges = 2 * (expected_nodes - 1); + + if g.node_count() != expected_nodes || g.edge_count() != expected_edges { + return TestResult::failed(); + } + + // Check that for every edge, a reverse edge exists + for edge in g.edge_references() { + let u = edge.source(); + let v = edge.target(); + let reverse_exists = g.find_edge(v, u).is_some(); + if !reverse_exists { + return TestResult::failed(); + } + } + + TestResult::passed() + } + + quickcheck(prop as fn(u32) -> TestResult); +} diff --git a/rustworkx-core/tests/quickcheck/main.rs b/rustworkx-core/tests/quickcheck/main.rs index 78f5e9c719..a4f1e32eab 100644 --- a/rustworkx-core/tests/quickcheck/main.rs +++ b/rustworkx-core/tests/quickcheck/main.rs @@ -1,4 +1,5 @@ mod barbell_graph; +mod binomial_tree_graph; mod full_rary_tree_graph; mod grid_graph; mod heavy_hex_graph;