use super::*;
fn oid(byte: u8) -> gix::ObjectId {
gix::ObjectId::from_bytes_or_panic(&[byte; 20])
}
#[test]
fn tip_at_or_before_picks_the_most_recent_in_range() {
let timeline = vec![(300, oid(3)), (200, oid(2)), (100, oid(1))];
assert_eq!(tip_at_or_before(&timeline, 200), Some(oid(2)));
assert_eq!(tip_at_or_before(&timeline, 250), Some(oid(2)));
assert_eq!(tip_at_or_before(&timeline, 999), Some(oid(3)));
}
#[test]
fn tip_at_or_before_returns_none_before_first_commit() {
let timeline = vec![(300, oid(3)), (100, oid(1))];
assert_eq!(tip_at_or_before(&timeline, 50), None);
assert_eq!(tip_at_or_before(&[], 100), None);
}
#[test]
fn tip_at_or_before_is_robust_to_out_of_order_times() {
let timeline = vec![(150, oid(1)), (250, oid(9)), (90, oid(2))];
assert_eq!(tip_at_or_before(&timeline, 300), Some(oid(9)));
assert_eq!(tip_at_or_before(&timeline, 200), Some(oid(1)));
}
#[test]
fn tip_at_or_before_breaks_same_second_ties_toward_newest() {
let timeline = vec![(100, oid(3)), (100, oid(2)), (100, oid(1))];
assert_eq!(tip_at_or_before(&timeline, 100), Some(oid(3)));
assert_eq!(tip_at_or_before(&timeline, 250), Some(oid(3)));
assert_eq!(tip_at_or_before(&timeline, 50), None);
}
#[test]
fn snapshot_options_anchors_reference_and_as_of() {
let base = Options {
reference: "HEAD".to_owned(),
compute_bus_factor: true,
long_window_secs: 999,
..Options::default()
};
let opts = snapshot_options(&base, oid(7), 4_242);
assert_eq!(opts.reference, oid(7).to_hex().to_string());
assert_eq!(opts.as_of, Some(4_242));
assert!(!opts.compute_bus_factor);
assert_eq!(opts.long_window_secs, 999);
}