avl
test
This commit is contained in:
parent
5858fbd897
commit
6be1000993
@ -26,6 +26,14 @@ impl<A: Display> Display for AvlN<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
impl<A> AvlN<A> {
|
||||||
|
fn balanced(&self) -> bool {
|
||||||
|
let (lh, rh) = (self.l.height, self.r.height);
|
||||||
|
std::cmp::max(lh, rh) - std::cmp::min(lh, rh) < 2 && self.l.balanced() && self.r.balanced()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct AvlR<A> {
|
struct AvlR<A> {
|
||||||
node: Rc<AvlN<A>>,
|
node: Rc<AvlN<A>>,
|
||||||
}
|
}
|
||||||
@ -44,6 +52,13 @@ impl<A: Display> Display for AvlR<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
impl<A> AvlR<A> {
|
||||||
|
fn balanced(&self) -> bool {
|
||||||
|
self.node.balanced()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct AvlT<A> {
|
struct AvlT<A> {
|
||||||
reference: Option<AvlR<A>>,
|
reference: Option<AvlR<A>>,
|
||||||
height: u64,
|
height: u64,
|
||||||
@ -67,6 +82,16 @@ impl<A: Display> Display for AvlT<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
impl<A> AvlT<A> {
|
||||||
|
fn balanced(&self) -> bool {
|
||||||
|
match &self.reference {
|
||||||
|
Some(reference) => reference.balanced(),
|
||||||
|
None => true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct AvlTs<A> {
|
struct AvlTs<A> {
|
||||||
_a: PhantomData<A>,
|
_a: PhantomData<A>,
|
||||||
}
|
}
|
||||||
@ -170,3 +195,29 @@ impl<'a, A: 'a + PartialOrd> BinaryTreesAvl<'a> for AvlTs<A> {
|
|||||||
AvlN { l: tl, r: tr, key }
|
AvlN { l: tl, r: tr, key }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test() {
|
||||||
|
let trees = AvlTs::new();
|
||||||
|
let mut tree = trees.empty();
|
||||||
|
for i in [
|
||||||
|
8, 3, 10, 17, 0, 13, 6, 1, 11, 5, 4, 7, 18, 14, 15, 9, 2, 19, 16, 12,
|
||||||
|
] {
|
||||||
|
tree = trees.clone().add_tree(tree, i.into());
|
||||||
|
assert!(tree.balanced());
|
||||||
|
// println!("{} {}", tree.height, tree);
|
||||||
|
}
|
||||||
|
for i in [
|
||||||
|
2, 9, 4, 7, 8, 10, 17, 1, 13, 15, 18, 12, 5, 0, 3, 6, 16, 19, 14, 11,
|
||||||
|
] {
|
||||||
|
tree = trees.clone().remove(tree, i.into());
|
||||||
|
assert!(tree.balanced());
|
||||||
|
// println!("{} {}", tree.height, tree);
|
||||||
|
}
|
||||||
|
// assert!(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user