///|
fn matching_chunks(
left_bytes : Array[Int],
left : Array[@hash.ChunkFingerprint],
right_bytes : Array[Int],
right : Array[@hash.ChunkFingerprint],
) -> Int {
@hash.verified_chunk_matches(left_bytes, left, right_bytes, right).length()
}
///|
fn main {
let original : Array[Int] = []
for i = 0; i < 32768; i = i + 1 {
original.push((i * 37 + i / 11 + i / 97) % 251)
}
let edited : Array[Int] = []
for i = 0; i < original.length(); i = i + 1 {
if i == 100 {
edited.push(99)
}
edited.push(original[i])
}
let fixed_original = @hash.chunk_fingerprints(original, 256)
let fixed_edited = @hash.chunk_fingerprints(edited, 256)
let config = @hash.CdcConfig::new(128, 256, 512, 32)
let cdc_original = @hash.content_defined_chunks(original, config)
let cdc_edited = @hash.content_defined_chunks(edited, config)
println("strategy,original_chunks,edited_chunks,reused_chunks")
println(
"fixed-256,\{fixed_original.length()},\{fixed_edited.length()},\{matching_chunks(original, fixed_original, edited, fixed_edited)}",
)
println(
"cdc-128-256-512,\{cdc_original.length()},\{cdc_edited.length()},\{matching_chunks(original, cdc_original, edited, cdc_edited)}",
)
println(
"fixed_missing_from_edited=\{@hash.missing_fixed_chunks(original, edited, 256).length()}",
)
}