From e30ba86653f6caa8395c1159999e74e4fd9a906c Mon Sep 17 00:00:00 2001 From: Zixuan Chen Date: Fri, 12 Aug 2022 11:30:08 +0800 Subject: [PATCH] fix: update leaf cache when create new elem by del --- crates/rle/src/rle_tree/node/leaf_impl.rs | 4 ++++ .../rle/src/rle_tree/test/range_rle_test.rs | 23 +++++++++++++------ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/crates/rle/src/rle_tree/node/leaf_impl.rs b/crates/rle/src/rle_tree/node/leaf_impl.rs index 309a356f..5a7ce1f4 100644 --- a/crates/rle/src/rle_tree/node/leaf_impl.rs +++ b/crates/rle/src/rle_tree/node/leaf_impl.rs @@ -209,6 +209,10 @@ impl<'a, T: Rle, A: RleTreeTrait> LeafNode<'a, T, A> { } A::update_cache_leaf(self); + if let Err(new) = &mut result { + A::update_cache_leaf(&mut *new); + } + result } diff --git a/crates/rle/src/rle_tree/test/range_rle_test.rs b/crates/rle/src/rle_tree/test/range_rle_test.rs index 736f4584..b0b57b2a 100644 --- a/crates/rle/src/rle_tree/test/range_rle_test.rs +++ b/crates/rle/src/rle_tree/test/range_rle_test.rs @@ -5,6 +5,11 @@ use crate::rle_tree::tree_trait::Position; use super::super::*; use std::ops::Range; +#[ctor] +fn init_color_backtrace() { + color_backtrace::install(); +} + #[derive(Debug)] struct RangeTreeTrait; impl RleTreeTrait> for RangeTreeTrait { @@ -196,13 +201,17 @@ fn delete_that_causes_removing_layers() { } tree.debug_check(); tree.delete_range(Some(1), None); - dbg!(tree); -} - -#[ctor] -fn init_color_backtrace() { - color_backtrace::install(); } #[test] -fn delete_that_causes_increase_levels() {} +fn delete_that_causes_increase_levels() { + let mut t: RleTree, RangeTreeTrait> = RleTree::new(); + let tree = t.get_mut(); + tree.insert(0, 0..100); + for i in 0..50 { + tree.delete_range(Some(i), Some(i + 1)); + tree.debug_check(); + } + + dbg!(tree); +}