Skip to content

Commit 2cf92dd

Browse files
committed
fix: failing test
1 parent 67735ba commit 2cf92dd

File tree

2 files changed

+41
-43
lines changed

2 files changed

+41
-43
lines changed

src/node.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -158,8 +158,7 @@ impl<K: KeyTrait + Clone, V: Clone> TwigNode<K, V> {
158158
.iter()
159159
.filter(|value| value.ts <= ts)
160160
.max_by(|a, b| {
161-
a.ts.cmp(&b.ts)
162-
.then_with(|| Arc::as_ptr(a).cmp(&Arc::as_ptr(b)))
161+
a.ts.cmp(&b.ts).then_with(|| std::cmp::Ordering::Greater) // Always prefer the second entry
163162
})
164163
}
165164

src/version.rs

+40-41
Original file line numberDiff line numberDiff line change
@@ -84,44 +84,6 @@ impl<V: Clone> BTree<V> {
8484
parent.children.insert(index + 1, Arc::new(new_child));
8585
}
8686

87-
fn insert_non_full(&self, node: &mut BNode<V>, leaf_value: Arc<LeafValue<V>>) {
88-
let mut i = node.entries.len();
89-
90-
if node.is_leaf {
91-
while i > 0
92-
&& !self.should_go_right(&node.entries[i - 1], leaf_value.version, leaf_value.ts)
93-
{
94-
i -= 1;
95-
}
96-
// Check for duplicate version and replace if the new one has the same or later timestamp
97-
if i > 0 && node.entries[i - 1].version == leaf_value.version {
98-
if node.entries[i - 1].ts <= leaf_value.ts {
99-
node.entries[i - 1] = leaf_value;
100-
}
101-
} else {
102-
node.entries.insert(i, leaf_value);
103-
}
104-
} else {
105-
while i > 0
106-
&& !self.should_go_right(&node.entries[i - 1], leaf_value.version, leaf_value.ts)
107-
{
108-
i -= 1;
109-
}
110-
111-
let child = Arc::clone(&node.children[i]);
112-
if child.is_full() {
113-
self.split_child(node, i);
114-
if self.should_go_right(&node.entries[i], leaf_value.version, leaf_value.ts) {
115-
i += 1;
116-
}
117-
}
118-
119-
let mut child = (*node.children[i]).clone();
120-
self.insert_non_full(&mut child, leaf_value);
121-
node.children[i] = Arc::new(child);
122-
}
123-
}
124-
12587
// fn insert_non_full(&self, node: &mut BNode<V>, leaf_value: Arc<LeafValue<V>>) {
12688
// let mut i = node.entries.len();
12789

@@ -131,7 +93,14 @@ impl<V: Clone> BTree<V> {
13193
// {
13294
// i -= 1;
13395
// }
134-
// node.entries.insert(i, leaf_value);
96+
// // Check for duplicate version and replace if the new one has the same or later timestamp
97+
// if i > 0 && node.entries[i - 1].version == leaf_value.version {
98+
// if node.entries[i - 1].ts <= leaf_value.ts {
99+
// node.entries[i - 1] = leaf_value;
100+
// }
101+
// } else {
102+
// node.entries.insert(i, leaf_value);
103+
// }
135104
// } else {
136105
// while i > 0
137106
// && !self.should_go_right(&node.entries[i - 1], leaf_value.version, leaf_value.ts)
@@ -153,6 +122,37 @@ impl<V: Clone> BTree<V> {
153122
// }
154123
// }
155124

125+
fn insert_non_full(&self, node: &mut BNode<V>, leaf_value: Arc<LeafValue<V>>) {
126+
let mut i = node.entries.len();
127+
128+
if node.is_leaf {
129+
while i > 0
130+
&& !self.should_go_right(&node.entries[i - 1], leaf_value.version, leaf_value.ts)
131+
{
132+
i -= 1;
133+
}
134+
node.entries.insert(i, leaf_value);
135+
} else {
136+
while i > 0
137+
&& !self.should_go_right(&node.entries[i - 1], leaf_value.version, leaf_value.ts)
138+
{
139+
i -= 1;
140+
}
141+
142+
let child = Arc::clone(&node.children[i]);
143+
if child.is_full() {
144+
self.split_child(node, i);
145+
if self.should_go_right(&node.entries[i], leaf_value.version, leaf_value.ts) {
146+
i += 1;
147+
}
148+
}
149+
150+
let mut child = (*node.children[i]).clone();
151+
self.insert_non_full(&mut child, leaf_value);
152+
node.children[i] = Arc::new(child);
153+
}
154+
}
155+
156156
fn should_go_right(&self, entry: &LeafValue<V>, version: u64, ts: u64) -> bool {
157157
if version != entry.version {
158158
version > entry.version
@@ -502,8 +502,7 @@ mod tests {
502502
.iter()
503503
.filter(|value| value.ts <= ts)
504504
.max_by(|a, b| {
505-
a.ts.cmp(&b.ts)
506-
.then_with(|| Arc::as_ptr(a).cmp(&Arc::as_ptr(b)))
505+
a.ts.cmp(&b.ts).then_with(|| std::cmp::Ordering::Greater) // Always prefer the second entry
507506
})
508507
.unwrap();
509508

0 commit comments

Comments
 (0)