qec-code 0.3.0

Rust primitives for constructing and analyzing quantum error-correcting codes
Documentation
#![cfg(any(
    all(feature = "distance-ilp-highs", not(feature = "distance-ilp-gurobi")),
    all(feature = "distance-ilp-gurobi", not(feature = "distance-ilp-highs"))
))]

use qec_code::QecError;
use qec_code::codes::steane::Steane;
use qec_code::distance::compute_distance_with_solver_options;
use qec_code::distance_exact::{ExactCssDistanceBackend, ExactCssDistanceSolverOptions};

fn options(backend: ExactCssDistanceBackend) -> ExactCssDistanceSolverOptions {
    ExactCssDistanceSolverOptions {
        backend,
        ..ExactCssDistanceSolverOptions::default()
    }
}

#[cfg(all(feature = "distance-ilp-highs", not(feature = "distance-ilp-gurobi")))]
#[test]
fn highs_only_build_reports_explicit_gurobi_request_as_unavailable() {
    let code = Steane::new().unwrap();

    let err =
        compute_distance_with_solver_options(code.code(), options(ExactCssDistanceBackend::Gurobi))
            .unwrap_err();

    assert_eq!(err, QecError::IlpBackendUnavailable("Gurobi".into()));
}

#[cfg(all(feature = "distance-ilp-gurobi", not(feature = "distance-ilp-highs")))]
#[test]
fn gurobi_only_build_reports_explicit_highs_request_as_unavailable() {
    let code = Steane::new().unwrap();

    let err =
        compute_distance_with_solver_options(code.code(), options(ExactCssDistanceBackend::Highs))
            .unwrap_err();

    assert_eq!(err, QecError::IlpBackendUnavailable("Highs".into()));
}