dyck 0.1.0

A crate for running Dyck and InterDyck algorithms over languages of generic <T> token enum instances or string slice types.
Documentation
#[cfg(feature = "derive")]
use dyck::{DyckToken, Language, Word};

#[cfg(feature = "derive")]
#[derive(DyckToken)]
enum Token {
    OpenParen,
    CloseParen,
    OpenBracket,
    CloseBracket,
    OpenBrace,
    CloseBrace,
}

#[cfg(test)]
#[cfg(feature = "derive")]
mod core_tests {
    use super::*;

    #[test]
    fn new_from_vec_no_duplicates() {
        let pairs = vec![
            (Token::OpenParen, Token::CloseParen),
            (Token::OpenBracket, Token::CloseBracket),
        ];
        let language = Language::new_from_vec(&pairs).expect("failed to create language");
        assert_eq!(language.get_k(), 2);
    }

    #[test]
    fn new_from_arr_no_duplicates() {
        let pairs = [
            (Token::OpenParen, Token::CloseParen),
            (Token::OpenBracket, Token::CloseBracket),
        ];
        let language = Language::new_from_arr(&pairs).expect("failed to create language");
        assert_eq!(language.get_k(), 2);
    }

    #[test]
    fn is_open() {
        let pairs = vec![(Token::OpenBrace, Token::CloseBrace)];
        let language = Language::new_from_vec(&pairs).unwrap();
        assert!(language.is_open(Token::OpenBrace));
        assert!(!language.is_open(Token::CloseBrace));
    }

    #[test]
    fn is_close() {
        let pairs = vec![(Token::OpenBrace, Token::CloseBrace)];
        let language = Language::new_from_vec(&pairs).unwrap();
        assert!(language.is_close(Token::CloseBrace));
        assert!(!language.is_close(Token::OpenBrace));
    }

    #[test]
    fn is_balanced() {
        let pairs = vec![(Token::OpenBracket, Token::CloseBracket)];
        let language = Language::new_from_vec(&pairs).unwrap();
        let balanced_word: Word<Token> = vec![Token::OpenBracket, Token::CloseBracket];
        assert!(language.is_balanced(&balanced_word));
        let unbalanced_word: Word<Token> = vec![Token::OpenBracket, Token::OpenBracket];
        assert!(!language.is_balanced(&unbalanced_word));
    }
}