Skip to content

Commit

Permalink
Add tests validating "bits/entry" for both {3,4}-wise xor filters
Browse files Browse the repository at this point in the history
Signed-off-by: Anjan Roy <[email protected]>
  • Loading branch information
itzmeanjan committed Jan 25, 2025
1 parent ce2f8fe commit d9e8b05
Showing 1 changed file with 34 additions and 0 deletions.
34 changes: 34 additions & 0 deletions src/pir_internals/matrix.rs
Original file line number Diff line number Diff line change
Expand Up @@ -673,4 +673,38 @@ pub mod test {

assert_eq!(matrix_a, matrix_b);
}

#[test]
fn validate_bits_per_entry_for_3_wise_xor_filter() {
const MAX_FILTER_CONSTRUCTION_ATTEMPT_COUNT: usize = 100;
const ARITY: u32 = 3;
const NUM_KV_PAIRS: usize = 1_000_000;
const MAT_ELEM_BIT_LEN: usize = 10;
const EXPECTED_BPE: f64 = (MAT_ELEM_BIT_LEN as f64) * 1.13; // From section 4 of ia.cr/2024/092

let kv_db = generate_random_kv_database(NUM_KV_PAIRS);
let kv_db_as_ref = kv_db.iter().map(|(k, v)| (k.as_slice(), v.as_slice())).collect::<HashMap<&[u8], &[u8]>>();

let (_, filter) = Matrix::from_kv_database::<ARITY>(kv_db_as_ref, MAT_ELEM_BIT_LEN, MAX_FILTER_CONSTRUCTION_ATTEMPT_COUNT).unwrap();

let computed_bpe = filter.bits_per_entry();
assert!(computed_bpe <= EXPECTED_BPE.ceil());
}

#[test]
fn validate_bits_per_entry_for_4_wise_xor_filter() {
const MAX_FILTER_CONSTRUCTION_ATTEMPT_COUNT: usize = 100;
const ARITY: u32 = 4;
const NUM_KV_PAIRS: usize = 1_000_000;
const MAT_ELEM_BIT_LEN: usize = 10;
const EXPECTED_BPE: f64 = (MAT_ELEM_BIT_LEN as f64) * 1.08; // From section 4 of ia.cr/2024/092

let kv_db = generate_random_kv_database(NUM_KV_PAIRS);
let kv_db_as_ref = kv_db.iter().map(|(k, v)| (k.as_slice(), v.as_slice())).collect::<HashMap<&[u8], &[u8]>>();

let (_, filter) = Matrix::from_kv_database::<ARITY>(kv_db_as_ref, MAT_ELEM_BIT_LEN, MAX_FILTER_CONSTRUCTION_ATTEMPT_COUNT).unwrap();

let computed_bpe = filter.bits_per_entry();
assert!(computed_bpe <= EXPECTED_BPE.ceil());
}
}

0 comments on commit d9e8b05

Please sign in to comment.