add a few accounts hash dedup tests (#33208)

This commit is contained in:
Jeff Washington (jwash) 2023-09-11 13:20:28 -07:00 committed by GitHub
parent 6298c6c31e
commit d724af863c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 76 additions and 0 deletions

View File

@ -1798,6 +1798,82 @@ pub mod tests {
assert_eq!((get_vec(hashfile), lamports), (vec![], 0));
}
#[test]
fn test_accountsdb_dup_pubkey_2_chunks() {
// 2 chunks, a dup pubkey in each chunk
for reverse in [false, true] {
let key = Pubkey::new_from_array([1; 32]); // key is BEFORE key2
let key2 = Pubkey::new_from_array([2; 32]);
let hash = Hash::new_unique();
let mut account_maps = Vec::new();
let mut account_maps2 = Vec::new();
let val = CalculateHashIntermediate::new(hash, 1, key);
account_maps.push(val.clone());
let val2 = CalculateHashIntermediate::new(hash, 2, key2);
account_maps.push(val2.clone());
let val3 = CalculateHashIntermediate::new(hash, 3, key2);
account_maps2.push(val3.clone());
let mut vecs = vec![account_maps.to_vec(), account_maps2.to_vec()];
if reverse {
vecs = vecs.into_iter().rev().collect();
}
let slice = convert_to_slice(&vecs);
let (hashfile, lamports) = test_de_dup_accounts_in_parallel(&slice);
assert_eq!(
(get_vec(hashfile), lamports),
(
vec![val.hash, if reverse { val2.hash } else { val3.hash }],
val.lamports
+ if reverse {
val2.lamports
} else {
val3.lamports
}
),
"reverse: {reverse}"
);
}
}
#[test]
fn test_accountsdb_dup_pubkey_2_chunks_backwards() {
// 2 chunks, a dup pubkey in each chunk
for reverse in [false, true] {
let key = Pubkey::new_from_array([3; 32]); // key is AFTER key2
let key2 = Pubkey::new_from_array([2; 32]);
let hash = Hash::new_unique();
let mut account_maps = Vec::new();
let mut account_maps2 = Vec::new();
let val2 = CalculateHashIntermediate::new(hash, 2, key2);
account_maps.push(val2.clone());
let val = CalculateHashIntermediate::new(hash, 1, key);
account_maps.push(val.clone());
let val3 = CalculateHashIntermediate::new(hash, 3, key2);
account_maps2.push(val3.clone());
let mut vecs = vec![account_maps.to_vec(), account_maps2.to_vec()];
if reverse {
vecs = vecs.into_iter().rev().collect();
}
let slice = convert_to_slice(&vecs);
let (hashfile, lamports) = test_de_dup_accounts_in_parallel(&slice);
assert_eq!(
(get_vec(hashfile), lamports),
(
vec![if reverse { val2.hash } else { val3.hash }, val.hash],
val.lamports
+ if reverse {
val2.lamports
} else {
val3.lamports
}
),
"reverse: {reverse}"
);
}
}
#[test]
fn test_accountsdb_cumulative_offsets1_d() {
let input = vec![vec![0, 1], vec![], vec![2, 3, 4], vec![]];