use pvlib::pvarray::*;
#[test]
fn test_adr_at_stc() {
let eff = pvefficiency_adr(1000.0, 25.0, 0.20, -6.0, 0.02, 0.05, 0.05);
assert!(
(eff - 0.20).abs() < 0.01,
"At STC, efficiency should be ~k_a=0.20, got {}",
eff
);
}
#[test]
fn test_adr_low_irradiance() {
let eff_low = pvefficiency_adr(100.0, 25.0, 0.20, -6.0, 0.02, 0.05, 0.05);
let eff_stc = pvefficiency_adr(1000.0, 25.0, 0.20, -6.0, 0.02, 0.05, 0.05);
assert!(eff_low < eff_stc, "Low irradiance should have lower efficiency");
}
#[test]
fn test_adr_high_temp() {
let eff_25 = pvefficiency_adr(1000.0, 25.0, 0.20, -6.0, 0.02, 0.05, 0.05);
let eff_60 = pvefficiency_adr(1000.0, 60.0, 0.20, -6.0, 0.02, 0.05, 0.05);
assert!(eff_60 < eff_25, "Higher temp should reduce efficiency");
}
#[test]
fn test_huld_at_stc() {
let p = huld(1000.0, 25.0, 300.0, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]);
assert!((p - 300.0).abs() < 1e-6, "At STC with zero k, power should be pdc0, got {}", p);
}
#[test]
fn test_huld_scales_with_irradiance() {
let p500 = huld(500.0, 25.0, 300.0, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]);
let p1000 = huld(1000.0, 25.0, 300.0, [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]);
assert!(
(p500 / p1000 - 0.5).abs() < 1e-6,
"Power should scale linearly with G when k=0"
);
}
#[test]
fn test_huld_zero_irradiance() {
let p = huld(0.0, 25.0, 300.0, [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
assert!((p - 0.0).abs() < 1e-10, "Zero irradiance should give zero power");
}