use crate::{check_common, graph_and_expected, graph_and_expected_named}; #[test]fn single_parent() { let (cg, refs) = graph_and_expected("single_parent.sh", &["parent", "child"]); check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["parent"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2);} #[test]fn single_commit_huge_dates_generation_v2_also_do_not_allow_huge_dates() { let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "v2", &["HEAD"]); let info = &refs["HEAD"]; let actual = cg.commit_by_id(info.id).expect("present"); assert_eq!( actual.committer_timestamp(), 1, "overflow happened, can't represent huge dates" ); assert_eq!( info.time.seconds, 68719476737, "this is the value we would want to see, but it's not possible in V2 either, as that is just about generations" ); assert_eq!(actual.generation(), 1, "generations are fine though");} #[test]fn single_commit_huge_dates_overflow_v1() { let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "v1", &["HEAD"]); let info = &refs["HEAD"]; let actual = cg.commit_by_id(info.id).expect("present"); assert_eq!(actual.committer_timestamp(), 1, "overflow happened"); assert_eq!( info.time.seconds, 68719476737, "this is the value we would want to see, but it's not possible in V1" ); assert_eq!(actual.generation(), 1, "generations are fine though");} #[test]fn single_commit_future_64bit_dates_work() { let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "max-date", &["HEAD"]); let info = &refs["HEAD"]; let actual = cg.commit_by_id(info.id).expect("present"); assert_eq!( actual.committer_timestamp(), info.time.seconds.try_into().expect("timestamps in bound"), "this is close the highest representable value in the graph, like year 2500, so we are good for longer than I should care about" ); assert_eq!(actual.generation(), 1);} #[test]fn generation_numbers_overflow_is_handled_in_chained_graph() { let names = ["extra", "old-2", "future-2", "old-1", "future-1"]; let (cg, mut refs) = graph_and_expected("generation_number_overflow.sh", &names); for (r, expected) in names .iter() .map(|n| refs.remove(n.to_owned()).expect("present")) .zip((1..=5).rev()) { assert_eq!( cg.commit_by_id(r.id).expect("present").generation(), expected, "actually, this test seems to have valid generation numbers from the get-go. How to repro the actual issue?" ); }} #[test]fn octopus_merges() { let (cg, refs) = graph_and_expected( "octopus_merges.sh", &[ "root", "parent1", "parent2", "parent3", "parent4", "three_parents", "four_parents", ], ); check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["root"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent3"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["parent4"].pos()).generation(), 2); assert_eq!(cg.commit_at(refs["three_parents"].pos()).generation(), 3); assert_eq!(cg.commit_at(refs["four_parents"].pos()).generation(), 3);} #[test]fn single_commit() { let (cg, refs) = graph_and_expected("single_commit.sh", &["commit"]); check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["commit"].pos()).generation(), 1);} #[test]fn two_parents() { let (cg, refs) = graph_and_expected("two_parents.sh", &["parent1", "parent2", "child"]); check_common(&cg, &refs); assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 1); assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2);}
use crate::{check_common, graph_and_expected, graph_and_expected_named};
#[test]
fn single_parent() {
let (cg, refs) = graph_and_expected("single_parent.sh", &["parent", "child"]);
check_common(&cg, &refs);
assert_eq!(cg.commit_at(refs["parent"].pos()).generation(), 1);
assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2);
}
#[test]
fn single_commit_huge_dates_generation_v2_also_do_not_allow_huge_dates() {
let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "v2", &["HEAD"]);
let info = &refs["HEAD"];
let actual = cg.commit_by_id(info.id).expect("present");
assert_eq!(
actual.committer_timestamp(),
1,
"overflow happened, can't represent huge dates"
);
assert_eq!(
info.time.seconds, 68719476737,
"this is the value we would want to see, but it's not possible in V2 either, as that is just about generations"
);
assert_eq!(actual.generation(), 1, "generations are fine though");
}
#[test]
fn single_commit_huge_dates_overflow_v1() {
let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "v1", &["HEAD"]);
let info = &refs["HEAD"];
let actual = cg.commit_by_id(info.id).expect("present");
assert_eq!(actual.committer_timestamp(), 1, "overflow happened");
assert_eq!(
info.time.seconds, 68719476737,
"this is the value we would want to see, but it's not possible in V1"
);
assert_eq!(actual.generation(), 1, "generations are fine though");
}
#[test]
fn single_commit_future_64bit_dates_work() {
let (cg, refs) = graph_and_expected_named("single_commit_huge_dates.sh", "max-date", &["HEAD"]);
let info = &refs["HEAD"];
let actual = cg.commit_by_id(info.id).expect("present");
assert_eq!(
actual.committer_timestamp(),
info.time.seconds.try_into().expect("timestamps in bound"),
"this is close the highest representable value in the graph, like year 2500, so we are good for longer than I should care about"
);
assert_eq!(actual.generation(), 1);
}
#[test]
fn generation_numbers_overflow_is_handled_in_chained_graph() {
let names = ["extra", "old-2", "future-2", "old-1", "future-1"];
let (cg, mut refs) = graph_and_expected("generation_number_overflow.sh", &names);
for (r, expected) in names
.iter()
.map(|n| refs.remove(n.to_owned()).expect("present"))
.zip((1..=5).rev())
{
assert_eq!(
cg.commit_by_id(r.id).expect("present").generation(),
expected,
"actually, this test seems to have valid generation numbers from the get-go. How to repro the actual issue?"
);
}
}
#[test]
fn octopus_merges() {
let (cg, refs) = graph_and_expected(
"octopus_merges.sh",
&[
"root",
"parent1",
"parent2",
"parent3",
"parent4",
"three_parents",
"four_parents",
],
);
check_common(&cg, &refs);
assert_eq!(cg.commit_at(refs["root"].pos()).generation(), 1);
assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 2);
assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 2);
assert_eq!(cg.commit_at(refs["parent3"].pos()).generation(), 2);
assert_eq!(cg.commit_at(refs["parent4"].pos()).generation(), 2);
assert_eq!(cg.commit_at(refs["three_parents"].pos()).generation(), 3);
assert_eq!(cg.commit_at(refs["four_parents"].pos()).generation(), 3);
}
#[test]
fn single_commit() {
let (cg, refs) = graph_and_expected("single_commit.sh", &["commit"]);
check_common(&cg, &refs);
assert_eq!(cg.commit_at(refs["commit"].pos()).generation(), 1);
}
#[test]
fn two_parents() {
let (cg, refs) = graph_and_expected("two_parents.sh", &["parent1", "parent2", "child"]);
check_common(&cg, &refs);
assert_eq!(cg.commit_at(refs["parent1"].pos()).generation(), 1);
assert_eq!(cg.commit_at(refs["parent2"].pos()).generation(), 1);
assert_eq!(cg.commit_at(refs["child"].pos()).generation(), 2);
}