use super::*;
#[test]
fn test_stress_runner_memory_bytes_calculation() {
let config = StressConfig {
cycles: 1,
seed: 42,
min_input_size: 100,
max_input_size: 101, ..Default::default()
};
let mut runner = StressTestRunner::new(config);
let profile = runner.run_cycle(0, |input| (input.len() as u32, 0));
assert_eq!(profile.memory_bytes, profile.input_size * std::mem::size_of::<f32>());
}
#[test]
fn test_verify_performance_multiple_violations() {
let mut report = StressReport::default();
report.add_frame(FrameProfile {
cycle: 0,
duration_ms: 200, tests_passed: 1,
tests_failed: 99, ..Default::default()
});
report.add_frame(FrameProfile {
cycle: 1,
duration_ms: 10, tests_passed: 1,
tests_failed: 0,
..Default::default()
});
let thresholds = PerformanceThresholds {
max_frame_time_ms: 100, max_timing_variance: 0.1, max_failure_rate: 0.01, ..Default::default()
};
let result = verify_performance(&report, &thresholds);
assert!(!result.passed);
assert!(result.violations.len() >= 2); }
#[test]
fn test_stress_rng_sequence_consistency() {
let mut rng = StressRng::new(42);
let seq1: Vec<u32> = (0..10).map(|_| rng.next_u32()).collect();
let mut rng2 = StressRng::new(42);
let seq2: Vec<u32> = (0..10).map(|_| rng2.next_u32()).collect();
assert_eq!(seq1, seq2);
}
#[test]
fn test_stress_rng_different_seeds() {
let mut rng1 = StressRng::new(1);
let mut rng2 = StressRng::new(2);
let val1 = rng1.next_u32();
let val2 = rng2.next_u32();
assert_ne!(val1, val2);
}
#[test]
fn test_stress_runner_input_generation_determinism() {
let config1 =
StressConfig { seed: 12345, min_input_size: 50, max_input_size: 100, ..Default::default() };
let config2 =
StressConfig { seed: 12345, min_input_size: 50, max_input_size: 100, ..Default::default() };
let mut runner1 = StressTestRunner::new(config1);
let mut runner2 = StressTestRunner::new(config2);
let (seed1, input1) = runner1.generate_input();
let (seed2, input2) = runner2.generate_input();
assert_eq!(seed1, seed2);
assert_eq!(input1, input2);
}
#[test]
fn test_run_all_with_zero_interval() {
let config = StressConfig {
cycles: 3,
interval_ms: 0, seed: 42,
min_input_size: 10,
max_input_size: 20,
thresholds: PerformanceThresholds::default(),
};
let mut runner = StressTestRunner::new(config);
let report = runner.run_all(|_input| (1, 0));
assert_eq!(report.cycles_completed, 3);
}
#[test]
fn test_verify_performance_boundary_threshold() {
let mut report = StressReport::default();
report.add_frame(FrameProfile {
cycle: 0,
duration_ms: 100, tests_passed: 99,
tests_failed: 1, ..Default::default()
});
let thresholds = PerformanceThresholds {
max_frame_time_ms: 100, max_timing_variance: 1.0,
max_failure_rate: 0.01, ..Default::default()
};
let result = verify_performance(&report, &thresholds);
assert!(result.passed || result.violations.len() <= 1);
}
#[test]
fn test_stress_rng_gen_f32_range() {
let mut rng = StressRng::new(42);
for _ in 0..1000 {
let val = rng.gen_f32();
assert!(val >= 0.0, "Value should be >= 0.0");
assert!(val < 1.0, "Value should be < 1.0");
}
}
#[test]
fn test_stress_runner_report_method() {
let config = StressConfig::default();
let runner = StressTestRunner::new(config);
let report = runner.report();
assert_eq!(report.cycles_completed, 0);
assert!(report.frames.is_empty());
}
#[test]
fn test_run_cycle_with_failures_and_slow_frame() {
let config = StressConfig {
cycles: 1,
seed: 42,
thresholds: PerformanceThresholds {
max_frame_time_ms: 1, ..Default::default()
},
..Default::default()
};
let mut runner = StressTestRunner::new(config);
runner.run_cycle(0, |_input| {
std::thread::sleep(Duration::from_millis(5));
(3, 5) });
let report = runner.report();
let slow_count = report.anomalies.iter().filter(|a| a.kind == AnomalyKind::SlowFrame).count();
let failure_count =
report.anomalies.iter().filter(|a| a.kind == AnomalyKind::TestFailure).count();
assert_eq!(slow_count, 1, "Should have one SlowFrame anomaly");
assert_eq!(failure_count, 1, "Should have one TestFailure anomaly");
}