#![allow(clippy::pedantic, clippy::unreadable_literal)]
use quantrs2::testing;
use std::collections::HashMap;
fn main() {
println!("=== QuantRS2 Testing Helpers Example ===\n");
println!("1. Floating-Point Assertions:");
demonstrate_float_assertions();
println!();
println!("2. Vector Assertions:");
demonstrate_vector_assertions();
println!();
println!("3. Measurement Count Assertions (for stochastic algorithms):");
demonstrate_measurement_assertions();
println!();
println!("4. Deterministic Test Data Generation:");
demonstrate_test_data_generation();
println!();
println!("5. Test Utilities:");
demonstrate_test_utilities();
println!();
println!("=== Example Complete ===");
}
fn demonstrate_float_assertions() {
let a = 1.0;
let b = 1.0;
testing::assert_approx_eq(a, b, testing::DEFAULT_TOLERANCE);
println!(" ✓ {a} ≈ {b} (exact)");
let a = 1.0;
let b = 1.0000001;
testing::assert_approx_eq(a, b, 1e-6);
println!(" ✓ {a} ≈ {b} (tolerance: 1e-6)");
let probs = vec![0.5, 0.3, 0.2];
let sum: f64 = probs.iter().sum();
testing::assert_approx_eq(sum, 1.0, 1e-10);
println!(" ✓ Probabilities sum to 1.0: {probs:?}");
}
fn demonstrate_vector_assertions() {
let state_a = vec![0.707, 0.0, 0.0, 0.707]; let state_b = vec![0.707_000_1, 0.0, 0.0, 0.707_000_1];
testing::assert_vec_approx_eq(&state_a, &state_b, 1e-5);
println!(" ✓ State vectors are approximately equal");
println!(" state_a: {state_a:?}");
println!(" state_b: {state_b:?}");
let dist_a = vec![0.25, 0.25, 0.25, 0.25];
let dist_b = vec![0.250_001, 0.249_999, 0.250_001, 0.249_999];
testing::assert_vec_approx_eq(&dist_a, &dist_b, 1e-5);
println!(" ✓ Probability distributions are approximately equal");
}
fn demonstrate_measurement_assertions() {
let mut actual = HashMap::new();
actual.insert("00".to_string(), 495); actual.insert("11".to_string(), 505);
let mut expected = HashMap::new();
expected.insert("00".to_string(), 500);
expected.insert("11".to_string(), 500);
testing::assert_measurement_counts_close(&actual, &expected, 0.05);
println!(" ✓ Bell state measurements within tolerance:");
println!(" Actual: {actual:?}");
println!(" Expected: {expected:?}");
println!();
let mut actual = HashMap::new();
actual.insert("000".to_string(), 487);
actual.insert("111".to_string(), 513);
let mut expected = HashMap::new();
expected.insert("000".to_string(), 500);
expected.insert("111".to_string(), 500);
testing::assert_measurement_counts_close(&actual, &expected, 0.10);
println!(" ✓ GHZ state measurements within tolerance:");
println!(" Actual: {actual:?}");
println!(" Expected: {expected:?}");
}
fn demonstrate_test_data_generation() {
let seed = testing::test_seed(); println!(" Test seed: {seed}");
let data = testing::generate_random_test_data(10, seed);
println!(" Generated {} values: {:?}", data.len(), data);
let data2 = testing::generate_random_test_data(10, seed);
assert_eq!(data, data2);
println!(" ✓ Data is reproducible with same seed");
println!();
let data3 = testing::generate_random_test_data(10, 123);
assert_ne!(data, data3);
println!(" ✓ Different seed produces different data");
assert!(data.iter().all(|&x| (0.0..=1.0).contains(&x)));
println!(" ✓ All values in range [0, 1]");
}
fn demonstrate_test_utilities() {
let temp_dir = testing::create_temp_test_dir();
println!(" Created temp directory: {}", temp_dir.display());
println!(" ✓ Directory exists: {}", temp_dir.exists());
let seed1 = testing::test_seed();
let seed2 = testing::test_seed();
assert_eq!(seed1, seed2);
println!(" ✓ Test seed is consistent: {seed1}");
testing::with_suppressed_output(|| {
println!("This is suppressed in tests");
});
println!(" ✓ Output suppression works for noisy tests");
}
#[cfg(test)]
mod tests {
use super::*;
use quantrs2::testing;
#[test]
fn test_quantum_algorithm_convergence() {
let expected_energy = -1.137;
let computed_energy = -1.136_999;
testing::assert_approx_eq(expected_energy, computed_energy, 1e-5);
}
#[test]
fn test_bell_state_probabilities() {
let mut counts = HashMap::new();
counts.insert("00".to_string(), 502);
counts.insert("11".to_string(), 498);
let mut expected = HashMap::new();
expected.insert("00".to_string(), 500);
expected.insert("11".to_string(), 500);
testing::assert_measurement_counts_close(&counts, &expected, 0.10);
}
}