add defragment test after deletion of odd cells

Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
This commit is contained in:
Pere Diaz Bou
2025-02-12 21:29:10 +01:00
parent 0274f74f32
commit ea77902e24

View File

@@ -2427,7 +2427,6 @@ fn defragment_page(page: &PageContent, usable_space: u16) {
// return SQLITE_CORRUPT_PAGE(pPage);
// }
assert!(cbrk >= first_cell);
dbg!(cbrk, first_cell);
let write_buf = page.as_ptr();
// set new first byte of cell content
@@ -3521,6 +3520,51 @@ mod tests {
}
}
#[test]
fn test_drop_odd_with_defragment() {
set_breakpoint_panic();
let db = get_database();
let page = get_page(2);
let page = page.get_contents();
let header_size = 8;
let mut total_size = 0;
let mut cells = Vec::new();
let usable_space = 4096;
let total_cells = 10;
for i in 0..total_cells {
let record = OwnedRecord::new([OwnedValue::Integer(i as i64)].to_vec());
let payload = add_record(i, i, page, record, &db);
assert_eq!(page.cell_count(), i + 1);
let free = compute_free_space(page, usable_space);
total_size += payload.len() as u16 + 2;
assert_eq!(free, 4096 - total_size - header_size);
cells.push(Cell { pos: i, payload });
}
let mut removed = 0;
let mut new_cells = Vec::new();
for cell in cells {
if cell.pos % 2 == 1 {
drop_cell(page, cell.pos - removed, usable_space);
removed += 1;
} else {
new_cells.push(cell);
}
}
let cells = new_cells;
for (i, cell) in cells.iter().enumerate() {
ensure_cell(page, i, &cell.payload);
}
defragment_page(page, usable_space);
for (i, cell) in cells.iter().enumerate() {
ensure_cell(page, i, &cell.payload);
}
}
fn set_breakpoint_panic() {
// Set custom panic hook at start of program
panic::set_hook(Box::new(|panic_info| {