num_base 0.4.2

Crate for manipulating with numbers (integers) in different bases.
Documentation
use super::{ Alphabet, AlphabetError, DEFAULT, UPPERCASE, DECIMAL, LATIN, LATIN_UPPERCASE };

#[test]
fn is_valid() {
    let alphabet1 = Alphabet::from("0123456789");
    let alphabet2 = Alphabet::from("0120");

    assert!(alphabet1.is_valid());
    assert!(!alphabet2.is_valid());
}

#[test]
fn to_valid() {
    let alphabet1 = Alphabet::from("0120");
    let alphabet2 = Alphabet::from("012345");

    assert_eq!(alphabet1.to_valid().get(), "012");
    assert_eq!(alphabet2.to_valid().get(), "012345");
}

#[test]
fn check() {
    let alphabet1 = Alphabet::from("0120");
    let alphabet2 = Alphabet::from("012345");

    assert_eq!(alphabet1.check(), Err(AlphabetError::RepeatedCharacters));
    assert_eq!(alphabet2.check(), Ok(Alphabet::from("012345")));
}

#[test]
fn get() {
    let default = Alphabet::Default;
    let decimal = Alphabet::Decimal;
    let custom = Alphabet::new("abcdefghijklmnopqrstuvwxyz");

    assert_eq!(default.get(), DEFAULT);
    assert_eq!(decimal.get(), DECIMAL);
    assert_eq!(custom.get(), "abcdefghijklmnopqrstuvwxyz");
}

#[test]
fn simplify() {
    let default = Alphabet::new(DEFAULT).simplify();
    let uppercase = Alphabet::new(UPPERCASE).simplify();
    let decimal = Alphabet::new(DECIMAL).simplify();
    let latin = Alphabet::new(LATIN).simplify();
    let latin_uppercase = Alphabet::new(LATIN_UPPERCASE).simplify();
    let custom = Alphabet::new("142857").simplify();

    assert_eq!(default, Alphabet::Default);
    assert_eq!(uppercase, Alphabet::UpperCase);
    assert_eq!(decimal, Alphabet::Decimal);
    assert_eq!(latin, Alphabet::Latin);
    assert_eq!(latin_uppercase, Alphabet::LatinUpperCase);
    assert_eq!(custom, Alphabet::new("142857"));
}

#[test]
fn nth_char() {
    let default = Alphabet::Default;

    assert_eq!(default.nth_char(5), Ok('5'));
    assert_eq!(default.nth_char(16), Ok('g'));

    assert_eq!(Alphabet::new("abcd").nth_char(3), Ok('d'));
    assert_eq!(Alphabet::new("あいうえお").nth_char(1), Ok(''));
    assert_eq!(Alphabet::new("花鳥風月").nth_char(2), Ok(''));
}

#[test]
fn chars_value() {
    let default = Alphabet::Default;

    assert_eq!(default.chars_index('5'), Ok(5));
    assert_eq!(default.chars_index('g'), Ok(16));

    assert_eq!(Alphabet::new("abcd").chars_index('d'), Ok(3));
    assert_eq!(Alphabet::new("あいうえお").chars_index(''), Ok(1));
    assert_eq!(Alphabet::new("花鳥風月").chars_index(''), Ok(2));
}