eldek-tad 0.9.1

A project for learning Abstract Data Types (ADTs) in Rust. Heavily inspired by Java's implementation.
Documentation
#[cfg(test)]
mod test{
    use crate::{linked_list::traits::linked_list_traits::LinkedListTrait, prefix_tree::{prefix_tree::PrefixTree, traits::prefix_tree_trait::PrefixTreeTrait}};

    #[test]
    fn search() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['h', 'e', 'l', 'l', 'o']);
        assert!(tree.search(vec!['h', 'e', 'l', 'l', 'o']));
    }

    #[test]
    fn search_string() {
        let mut tree:PrefixTree<char> = PrefixTree::new();
        tree.insert_string("hello");
        assert!(tree.search_string("hello"));
    }

    #[test]
    fn search_not_inserted() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['h', 'e', 'l', 'l', 'o']);
        assert!(!tree.search(vec!['h', 'e', 'l', 'l']));
    }

    #[test]
    fn search_empty_tree() {
        let tree: PrefixTree<char> = PrefixTree::new();
        assert!(!tree.search(vec!['a']));
    }

    #[test]
    fn insert_multiple_search_all() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['c', 'a', 't']);
        tree.insert(vec!['c', 'a', 'r']);
        tree.insert(vec!['d', 'o', 'g']);
        assert!(tree.search(vec!['c', 'a', 't']));
        assert!(tree.search(vec!['c', 'a', 'r']));
        assert!(tree.search(vec!['d', 'o', 'g']));
    }

    #[test]
    fn search_prefix_of_inserted() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['c', 'a', 't']);
        assert!(!tree.search(vec!['c', 'a']));
    }

    #[test]
    fn insert_empty_sequence() {
        let mut tree: PrefixTree<char> = PrefixTree::new();
        tree.insert(vec![]);
        assert!(tree.search(vec![]));
    }

    #[test]
    fn remove(){
        let mut tree= PrefixTree::new();
        tree.insert(vec![1, 2, 3]);
        tree.remove(vec![1, 2, 3]);
        assert!(!tree.search(vec![1, 2, 3]));
        assert_eq!(0, tree.size());
    }

    #[test]
    fn remove_string(){
        let mut tree:PrefixTree<char>= PrefixTree::new();
        tree.insert_string("Howdy");
        tree.remove_string("Howdy");
        assert_eq!(false, tree.search_string("Howdy"));
        assert_eq!(0, tree.size());
    }

    #[test]
    fn remove_failed(){
        let mut tree= PrefixTree::new();
        tree.insert(vec![1, 2, 3]);
        tree.remove(vec![1, 2, 4]);
        assert!(tree.search(vec![1, 2, 3]));
        assert_eq!(1, tree.size());
    }

    #[test]
    fn autocomplete_no_match() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['c', 'a', 't']);
        let results = tree.autocomplete(vec!['d']);
        assert_eq!(results.size(), 0);
    }

    #[test]
    fn autocomplete_exact_match() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['c', 'a', 't']);
        let results = tree.autocomplete(vec!['c', 'a', 't']);
        assert_eq!(results.size(), 1);
    }

    #[test]
    fn autocomplete_empty_prefix_returns_all() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['a']);
        tree.insert(vec!['b']);
        tree.insert(vec!['c']);
        let results = tree.autocomplete(vec![]);
        assert_eq!(results.size(), 3);
    }

    #[test]
    fn autocomplete_empty_tree() {
        let tree: PrefixTree<char> = PrefixTree::new();
        let results = tree.autocomplete(vec!['a']);
        assert_eq!(results.size(), 0);
    }

    #[test]
    fn autocomplete_count() {
        let mut tree = PrefixTree::new();
        tree.insert(vec!['c', 'a', 't']);
        tree.insert(vec!['c', 'a', 'r']);
        tree.insert(vec!['c', 'a', 'r', 'g', 'o']);
        let results = tree.autocomplete(vec!['c', 'a']);
        assert_eq!(results.size(), 3);
    }

    #[test]
    fn autocomplete_string() {
        let mut tree:PrefixTree<char> = PrefixTree::new();
        tree.insert_string("cat");
        tree.insert_string("car");
        tree.insert_string("cargo");
        let results = tree.autocomplete_string("ca");
        assert_eq!(true, results.contains(&String::from("cat")));
        assert_eq!(true, results.contains(&String::from("car")));
        assert_eq!(true, results.contains(&String::from("cargo")));
        assert_eq!(results.size(), 3);
    }
}