in eden/mononoke/mononoke_types/src/blame_v2.rs [1170:1427]
fn test_linear() -> Result<()> {
let path1 = MPath::new("path")?;
let path2 = MPath::new("new/path")?;
let c1 = "one\ntwo\nthree\nfour\n";
let c2 = "one\nfive\nsix\nfour\n";
let c3 = "seven\none\nsix\neight\nfour\n";
let c4 = "seven\none\nnine\nten\neight\nfour\n";
let c5 = "one\n";
let b1 = BlameV2::new(ONES_CSID, path1.clone(), c1, vec![])?;
let b2 = BlameV2::new(
TWOS_CSID,
path1.clone(),
c2,
vec![BlameParent::new(0, path1.clone(), c1, b1.clone())],
)?;
let b3 = BlameV2::new(
THREES_CSID,
path1.clone(),
c3,
vec![BlameParent::new(0, path1.clone(), c2, b2.clone())],
)?;
let b4 = BlameV2::new(
FOURS_CSID,
path2.clone(),
c4,
vec![BlameParent::new(0, path1.clone(), c3, b3.clone())],
)?;
let b5 = BlameV2::new(
FIVES_CSID,
path2.clone(),
c5,
vec![BlameParent::new(0, path2.clone(), c4, b4.clone())],
)?;
assert_eq!(
b1,
BlameV2::Blame(BlameData {
ranges: vec![BlameRangeIndexes {
offset: 0,
length: 4,
csid_index: 0,
path_index: 0,
origin_offset: 0,
parent: None,
}],
csids: vec_map! {
0 => ONES_CSID,
},
max_csid_index: 0,
paths: vec![path1.clone()],
}),
);
assert_eq!(
b2,
BlameV2::Blame(BlameData {
ranges: vec![
BlameRangeIndexes {
offset: 0,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 0,
parent: None,
},
BlameRangeIndexes {
offset: 1,
length: 2,
csid_index: 1,
path_index: 0,
origin_offset: 1,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 1,
length: 2,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 3,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 3,
parent: None,
},
],
csids: vec_map! {
0 => ONES_CSID,
1 => TWOS_CSID,
},
max_csid_index: 1,
paths: vec![path1.clone()],
}),
);
assert_eq!(
b3,
BlameV2::Blame(BlameData {
ranges: vec![
BlameRangeIndexes {
offset: 0,
length: 1,
csid_index: 2,
path_index: 0,
origin_offset: 0,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 0,
length: 0,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 1,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 0,
parent: None,
},
BlameRangeIndexes {
offset: 2,
length: 1,
csid_index: 1,
path_index: 0,
origin_offset: 2,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 1,
length: 2,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 3,
length: 1,
csid_index: 2,
path_index: 0,
origin_offset: 3,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 3,
length: 0,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 4,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 3,
parent: None,
},
],
csids: vec_map! {
0 => ONES_CSID,
1 => TWOS_CSID,
2 => THREES_CSID,
},
max_csid_index: 2,
paths: vec![path1.clone()],
}),
);
assert_eq!(
b4,
BlameV2::Blame(BlameData {
ranges: vec![
BlameRangeIndexes {
offset: 0,
length: 1,
csid_index: 2,
path_index: 0,
origin_offset: 0,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 0,
length: 0,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 1,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 0,
parent: None,
},
BlameRangeIndexes {
offset: 2,
length: 2,
csid_index: 3,
path_index: 1,
origin_offset: 2,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 2,
length: 1,
renamed_from_path_index: Some(0),
}),
},
BlameRangeIndexes {
offset: 4,
length: 1,
csid_index: 2,
path_index: 0,
origin_offset: 3,
parent: Some(BlameParentIndexes {
parent_index: 0,
offset: 3,
length: 0,
renamed_from_path_index: None,
}),
},
BlameRangeIndexes {
offset: 5,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 3,
parent: None,
},
],
csids: vec_map! {
0 => ONES_CSID,
2 => THREES_CSID,
3 => FOURS_CSID,
},
max_csid_index: 3,
paths: vec![path1.clone(), path2.clone()],
}),
);
assert_eq!(
b5,
BlameV2::Blame(BlameData {
ranges: vec![BlameRangeIndexes {
offset: 0,
length: 1,
csid_index: 0,
path_index: 0,
origin_offset: 0,
parent: None,
},],
csids: vec_map! {
0 => ONES_CSID,
},
max_csid_index: 4,
paths: vec![path1.clone(), path2.clone()],
}),
);
Ok(())
}