diff --git a/src/mrds/trees.rs b/src/mrds/trees.rs
index d1866cf..fedb2eb 100644
--- a/src/mrds/trees.rs
+++ b/src/mrds/trees.rs
@@ -1,3 +1,2 @@
-pub mod avl;
pub mod heighted;
pub mod unbalanced;
diff --git a/src/mrds/trees/avl.rs b/src/mrds/trees/avl.rs
deleted file mode 100644
index 76ca655..0000000
--- a/src/mrds/trees/avl.rs
+++ /dev/null
@@ -1,251 +0,0 @@
-use std::{fmt::Display, marker::PhantomData, rc::Rc};
-
-use crate::flow::{
- binary::{avl::*, bounds::bound::*, *},
- comparator::*,
-};
-use crate::func::{context::*, *};
-
-#[derive(Clone)]
-struct AvlN {
- l: AvlT,
- r: AvlT,
- key: A,
-}
-
-impl Display for AvlN {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "({} {} {})", self.l, self.key, self.r)
- }
-}
-
-#[cfg(test)]
-impl AvlN {
- fn balanced(&self) -> bool {
- let (hl, hr) = (self.l.height, self.r.height);
- std::cmp::max(hl, hr) - std::cmp::min(hl, hr) < 2 && self.l.balanced() && self.r.balanced()
- }
-}
-
-struct AvlR {
- node: Rc>,
- height: u64,
-}
-
-impl Clone for AvlR {
- fn clone(&self) -> Self {
- Self {
- node: self.node.clone(),
- height: self.height,
- }
- }
-}
-
-impl Display for AvlR {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- write!(f, "{}", self.node)
- }
-}
-
-struct AvlT {
- reference: Option>>,
- height: u64,
-}
-
-impl Clone for AvlT {
- fn clone(&self) -> Self {
- Self {
- reference: self.reference.clone(),
- height: self.height,
- }
- }
-}
-
-impl Display for AvlT {
- fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
- match &self.reference {
- Some(reference) => write!(f, "{}", reference),
- None => write!(f, "-"),
- }
- }
-}
-
-#[cfg(test)]
-impl AvlT {
- fn balanced(&self) -> bool {
- match &self.reference {
- Some(reference) => reference.balanced(),
- None => true,
- }
- }
-}
-
-struct AvlTs {
- _a: PhantomData,
-}
-
-impl AvlTs {
- fn new() -> Self {
- Self { _a: PhantomData }
- }
-}
-
-impl Clone for AvlTs {
- fn clone(&self) -> Self {
- Self::new()
- }
-}
-
-impl<'a, A: 'a> FunctorContext<'a> for AvlTs {
- type T = instances::solo::SoloInstance;
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTrees<'a> for AvlTs {
- type Node = AvlN;
-
- type Reference = AvlR;
-
- type Tree = AvlT;
-
- type Key = A;
-
- type Comparator = DefaultComparator;
-
- type _Tm = Self::T;
-
- fn comparator(&self) -> &Self::Comparator {
- &DefaultComparator
- }
-
- fn split(&self, node: &Self::Node) -> Split<'a, Self> {
- (node.l.clone(), node.r.clone(), node.key.clone())
- }
-
- fn resolve(&self, reference: &Self::Reference) -> BTWrap<'a, Self, Self::Node> {
- reference.node.as_ref().clone()
- }
-
- fn equal(&self, _rhs: &Self::Reference, _lhs: &Self::Reference) -> bool {
- false
- }
-
- fn refer(&self, tree: &Self::Tree) -> Option {
- Some(AvlR {
- node: tree.reference.clone()?,
- height: tree.height,
- })
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesTreeOf<'a> for AvlTs {
- fn tree_of(&self, node: Self::Node) -> BTWrap<'a, Self, Self::Tree> {
- AvlT {
- height: std::cmp::max(node.l.height, node.r.height)
- .checked_add(1)
- .unwrap(),
- reference: Some(node.into()),
- }
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesEmpty<'a> for AvlTs {
- fn empty(&self) -> Self::Tree {
- AvlT {
- reference: None,
- height: 0,
- }
- }
-
- fn split_key_empty(
- &self,
- _tree: Self::Tree,
- _key: Self::Key,
- ) -> BTWrap<'a, Self, KeySplit<'a, Self>> {
- (self.empty(), self.empty())
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesMutable<'a> for AvlTs {
- fn join_key(
- self,
- tl: Self::Tree,
- key: Self::Key,
- tr: Self::Tree,
- ) -> BTWrap<'a, Self, Self::Node> {
- self.join_key_balanced(tl, key, tr)
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesHeight<'a> for AvlTs {
- fn height(&self, tree: &Self::Tree) -> u64 {
- tree.height
- }
-
- fn leaf_height_error(&self, height: u64) -> BTWrap<'a, Self, T> {
- panic!("leaf height error: {height}.")
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesTryJoin<'a> for AvlTs {
- fn try_join(
- &self,
- tl: Self::Tree,
- key: Self::Key,
- tr: Self::Tree,
- ) -> BTWrap<'a, Self, Self::Node> {
- AvlN { l: tl, r: tr, key }
- }
-}
-
-impl<'a, A: 'a + Ord + Clone> BinaryTreesBindable<'a> for AvlTs {
- fn bounds_error(&self, _error: bounds::BoundsError) -> BTWrap<'a, Self, T> {
- panic!("bounds violated.");
- }
-}
-
-#[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);
- 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);
- assert!(tree.balanced());
- // println!("{} {}", tree.height, tree);
- }
- // assert!(false);
- }
-
- #[test]
- fn test_with_bounds() {
- let trees = BoundTrees::new(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);
- 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);
- assert!(tree.balanced());
- // println!("{} {}", tree.height, tree);
- }
- // assert!(false);
- }
-}