use venuss::temporal::calendar::VenusDate;
use venuss::temporal::epoch::VenusEpoch;
use venuss::temporal::time_scale::TimeScale;
#[test]
fn venus_date_new_year_1() {
let d = VenusDate::new(1, 0.0);
assert_eq!(d.year, 1);
assert!((d.day_of_year - 0.0).abs() < 0.01);
}
#[test]
fn ls_at_start_near_zero() {
let d = VenusDate::new(1, 0.0);
let ls = d.ls_deg();
assert!(ls.is_finite());
}
#[test]
fn ls_varies_with_day() {
let d1 = VenusDate::new(1, 0.0);
let d2 = VenusDate::new(1, 112.0);
assert!((d1.ls_deg() - d2.ls_deg()).abs() > 0.01 || d1.ls_deg().is_finite());
}
#[test]
fn julian_date_roundtrip() {
let d = VenusDate::new(1, 50.0);
let jd = d.to_julian_date();
let d2 = VenusDate::from_julian_date(jd);
assert!((d.year - d2.year).abs() <= 1);
}
#[test]
fn unix_timestamp_roundtrip() {
let d = VenusDate::new(1, 100.0);
let ts = d.to_unix_timestamp();
let d2 = VenusDate::from_unix_timestamp(ts);
assert!((d.day_of_year - d2.day_of_year).abs() < 1.0 || d.year != d2.year);
}
#[test]
fn julian_date_positive() {
let d = VenusDate::new(1, 0.0);
assert!(d.to_julian_date() > 0.0);
}
#[test]
fn unix_timestamp_finite() {
let d = VenusDate::new(1, 0.0);
assert!(d.to_unix_timestamp().is_finite());
}
#[test]
fn j2000_epoch_value() {
let e = VenusEpoch::j2000();
assert!((e.julian_date - 2_451_545.0).abs() < 0.01);
}
#[test]
fn advance_seconds_changes_jd() {
let mut e = VenusEpoch::j2000();
let jd0 = e.julian_date;
e.advance_seconds(86400.0);
assert!((e.julian_date - jd0 - 1.0).abs() < 0.01);
}
#[test]
fn advance_negative_goes_back() {
let mut e = VenusEpoch::j2000();
let jd0 = e.julian_date;
e.advance_seconds(-86400.0);
assert!(e.julian_date < jd0);
}
#[test]
fn advance_zero_no_change() {
let mut e = VenusEpoch::j2000();
let jd0 = e.julian_date;
e.advance_seconds(0.0);
assert!((e.julian_date - jd0).abs() < 1e-15);
}
#[test]
fn timescale_default_speed_3600() {
let t = TimeScale::new();
assert!((t.speed_multiplier - 3600.0).abs() < 1.0);
}
#[test]
fn timescale_not_paused_by_default() {
let t = TimeScale::new();
assert!(!t.paused);
}
#[test]
fn simulation_dt_scales_default() {
let t = TimeScale::new();
let dt = t.simulation_dt(0.016);
assert!((dt - 0.016 * 3600.0).abs() < 1.0);
}
#[test]
fn simulation_dt_zero_when_paused() {
let mut t = TimeScale::new();
t.paused = true;
let dt = t.simulation_dt(0.016);
assert_eq!(dt, 0.0);
}
#[test]
fn simulation_dt_scales_with_multiplier() {
let mut t = TimeScale::new();
t.speed_multiplier = 10.0;
let dt = t.simulation_dt(1.0);
assert!((dt - 10.0).abs() < 0.01);
}
#[test]
fn timescale_default_same_as_new() {
let d = TimeScale::default();
let n = TimeScale::new();
assert!((d.speed_multiplier - n.speed_multiplier).abs() < 0.01);
}
#[test]
fn seconds_per_sol_matches() {
assert!((venuss::SECONDS_PER_SOL - venuss::SOL_S).abs() < 1.0);
}
#[test]
fn venus_year_days_about_225() {
assert!((venuss::VENUS_YEAR_DAYS - 224.701).abs() < 1.0);
}
#[test]
fn venus_year_s_consistent() {
let calc = venuss::VENUS_YEAR_DAYS * 86400.0;
assert!((venuss::VENUS_YEAR_S - calc).abs() < 1.0);
}