MCPcopy Create free account
hub / github.com/atomicdotdev/atomic / test_del_change

Function test_del_change

atomic-core/src/pristine/txn/write/tests.rs:318–364  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

316
317 #[test]
318 fn test_del_change() {
319 let dir = tempdir().unwrap();
320 let db_path = dir.path().join("pristine");
321 let pristine = Pristine::open(&db_path).unwrap();
322
323 let mut txn = pristine.write_txn().unwrap();
324
325 // Create a view with 3 changes
326 let mut view = txn.open_or_create_view("test").unwrap();
327
328 let hash1 = Hash::of(b"change 1");
329 let hash2 = Hash::of(b"change 2");
330 let hash3 = Hash::of(b"change 3");
331
332 let id1 = txn.register_change(&hash1).unwrap();
333 let id2 = txn.register_change(&hash2).unwrap();
334 let id3 = txn.register_change(&hash3).unwrap();
335
336 txn.put_change(&mut view, id1, &hash1).unwrap();
337 txn.put_change(&mut view, id2, &hash2).unwrap();
338 txn.put_change(&mut view, id3, &hash3).unwrap();
339 txn.update_view(&view).unwrap();
340
341 assert_eq!(view.change_count, 3);
342
343 // Remove the middle change (id2)
344 let removed_seq = txn.del_change(&mut view, id2, &hash2).unwrap();
345 assert_eq!(removed_seq, Some(1)); // Was at sequence 1
346
347 // View should now have 2 changes
348 assert_eq!(view.change_count, 2);
349
350 // Change 1 should still be at sequence 0
351 let seq0 = txn.get_change_at_seq(&view, 0).unwrap();
352 assert_eq!(seq0, Some(id1));
353
354 // Change 3 should now be at sequence 1 (shifted down)
355 let seq1 = txn.get_change_at_seq(&view, 1).unwrap();
356 assert_eq!(seq1, Some(id3));
357
358 // Merkle state should be recomputed
359 let expected_state = Merkle::ZERO.next(&hash1).next(&hash3);
360 assert_eq!(view.state, expected_state);
361
362 txn.update_view(&view).unwrap();
363 txn.commit().unwrap();
364 }
365
366 #[test]
367 fn test_del_change_not_in_view() {

Callers

nothing calls this directly

Calls 11

write_txnMethod · 0.80
open_or_create_viewMethod · 0.80
register_changeMethod · 0.80
put_changeMethod · 0.80
update_viewMethod · 0.80
del_changeMethod · 0.80
commitMethod · 0.80
unwrapMethod · 0.45
pathMethod · 0.45
get_change_at_seqMethod · 0.45
nextMethod · 0.45

Tested by

no test coverage detected