vinezombie 0.3.1

A modular IRCv3 framework
Documentation
use super::{Suffix, SuffixStrategy, SuffixType};
use crate::{client::nick::NickTransformer, string::Nick};

#[test]
pub fn suffix_rng() {
    let prefix = Nick::from_bytes("Foo").unwrap();
    let gen = Suffix {
        suffixes: vec![SuffixType::Base8; 9].into(),
        strategy: SuffixStrategy::Rng(Some(1337)),
    };
    let (mut nick, mut gen) = gen.transform(prefix).next_nick();
    let mut prev: u32 = 9;
    for _ in 0..16 {
        let nick_str = nick.to_utf8().unwrap();
        let num = nick_str.strip_prefix("Foo").unwrap();
        assert_eq!(num.len(), 9);
        let num: u32 = num.parse().unwrap();
        assert_ne!(num, prev);
        prev = num;
        (nick, gen) = gen.unwrap().next_nick();
    }
}

#[test]
pub fn suffix_seq() {
    let prefix = Nick::from_bytes("Foo").unwrap();
    let gen = Suffix {
        suffixes: vec![
            SuffixType::Char('_'),
            SuffixType::Char('_'),
            SuffixType::NonZeroBase8,
            SuffixType::Base8,
        ]
        .into(),
        strategy: SuffixStrategy::Seq,
    };
    let (mut nick, mut gen) = gen.transform(prefix).next_nick();
    assert_eq!(nick, "Foo_");
    (nick, gen) = gen.unwrap().next_nick();
    assert_eq!(nick, "Foo__");
    (nick, gen) = gen.unwrap().next_nick();
    assert_eq!(nick, "Foo__1");
    for _ in 1..7 {
        (nick, gen) = gen.unwrap().next_nick();
    }
    assert_eq!(nick, "Foo__7");
    (nick, gen) = gen.unwrap().next_nick();
    assert_eq!(nick, "Foo__10");
    (nick, _) = gen.unwrap().next_nick();
    assert_eq!(nick, "Foo__20");
}