Skip to content

Commit 06b4c1a

Browse files
GiggleLiuclaude
andcommitted
fix: speed up BMF→ILP closed-loop test (36s → 0.01s)
Use ILP solver on target + brute force on source instead of brute-force enumerating all 2^24 ILP configurations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9811f67 commit 06b4c1a

1 file changed

Lines changed: 5 additions & 22 deletions

File tree

src/unit_tests/rules/bmf_ilp.rs

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
use super::*;
22
use crate::models::algebraic::{ObjectiveSense, ILP};
3-
use crate::rules::test_helpers::assert_optimization_round_trip_from_optimization_target;
3+
use crate::rules::test_helpers::assert_bf_vs_ilp;
44
use crate::rules::{ReduceTo, ReductionResult};
5-
use crate::solvers::{BruteForce, ILPSolver};
6-
use crate::traits::Problem;
75

86
#[test]
97
fn test_bmf_to_ilp_structure() {
@@ -18,33 +16,18 @@ fn test_bmf_to_ilp_structure() {
1816

1917
#[test]
2018
fn test_bmf_to_ilp_closed_loop() {
21-
// 2x2 identity, rank 2 — exact factorization exists
19+
// 2x2 identity, rank 2 — exact factorization exists.
20+
// Use ILP solver on target (fast) + brute force on source (tiny 2x2).
2221
let problem = BMF::new(vec![vec![true, false], vec![false, true]], 2);
2322
let reduction: ReductionBMFToILP = ReduceTo::<ILP<bool>>::reduce_to(&problem);
24-
assert_optimization_round_trip_from_optimization_target(
25-
&problem,
26-
&reduction,
27-
"BMF->ILP closed loop",
28-
);
23+
assert_bf_vs_ilp(&problem, &reduction);
2924
}
3025

3126
#[test]
3227
fn test_bmf_to_ilp_bf_vs_ilp() {
3328
let problem = BMF::new(vec![vec![true, true], vec![true, false]], 1);
3429
let reduction: ReductionBMFToILP = ReduceTo::<ILP<bool>>::reduce_to(&problem);
35-
36-
let bf = BruteForce::new();
37-
let bf_witness = bf.find_witness(&problem).expect("should have a witness");
38-
let bf_value = problem.evaluate(&bf_witness);
39-
40-
let ilp_solver = ILPSolver::new();
41-
let ilp_solution = ilp_solver
42-
.solve(reduction.target_problem())
43-
.expect("ILP should be solvable");
44-
let extracted = reduction.extract_solution(&ilp_solution);
45-
let ilp_value = problem.evaluate(&extracted);
46-
47-
assert_eq!(bf_value, ilp_value);
30+
assert_bf_vs_ilp(&problem, &reduction);
4831
}
4932

5033
#[test]

0 commit comments

Comments
 (0)