use ciphers::{Cipher, CipherInputError, Playfair};
#[test]
fn encipher_small() {
let playfair = Playfair::new("ZGPTFOIHMUWDRCNYKEQAXVSBL", 'X');
let ctext = playfair.encipher("DEFENDTHEEASTWALLOFTHECASTLE");
assert_eq!(ctext.unwrap(), "RKPAWRPMYSELZCLFXUZFRSNQBPSA");
}
#[test]
fn decipher_small() {
let playfair = Playfair::new("ZGPTFOIHMUWDRCNYKEQAXVSBL", 'X');
let ptext = playfair.decipher("RKPAWRPMYSELZCLFXUZFRSNQBPSA");
assert_eq!(ptext.unwrap(), "DEFENDTHEXASTWALLOFTHECASTLE");
}
#[test]
fn encipher_large() {
let playfair = Playfair::new("ZYXWVUTSRQPONMLKIHGFEDCBA", 'X');
let ctext = playfair.encipher("ABCDEFGHIIKLMNOPQRSTUVWXYZABCDEFGHIIKLMNOPQRSTUVWXYZ");
assert_eq!(
ctext.unwrap(),
"EABCAKFGHYFPLMNOUQRSQZVWXYEABCAKFGHYFPLMNOUQRSQZVWXY"
);
}
#[test]
fn decipher_large() {
let playfair = Playfair::new("ZYXWVUTSRQPONMLKIHGFEDCBA", 'X');
let ptext = playfair.decipher("EABCAKFGHYFPLMNOUQRSQZVWXYEABCAKFGHYFPLMNOUQRSQZVWXY");
assert_eq!(
ptext.unwrap(),
"ABCDEFGHIXKLMNOPQRSTUVWXYZABCDEFGHIXKLMNOPQRSTUVWXYZ"
);
}
#[test]
fn encipher_lowercase() {
let playfair = Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'x');
let ctext = playfair.encipher("defendtheeastwallofthecastle");
assert_eq!(ctext.unwrap(), "rkpawrpmyselzclfxuzfrsnqbpsa");
}
#[test]
fn decipher_lowercase() {
let playfair = Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'x');
let ptext = playfair.decipher("rkpawrpmyselzclfxuzfrsnqbpsa");
assert_eq!(ptext.unwrap(), "defendthexastwallofthecastle");
}
#[test]
#[should_panic]
fn key_not_25_chars() {
Playfair::new("zgptfoihmuwdrcnykeqaxvsblj", 'x');
}
#[test]
#[should_panic]
fn key_non_ascii() {
Playfair::new("zgptfoihmuwdrcnykèqaxvsbl", 'x');
}
#[test]
#[should_panic]
fn key_repeated_chars() {
Playfair::new("zgppfoihmuwdrcnykeqaxvsbl", 'x');
}
#[test]
#[should_panic]
fn pad_not_in_key() {
Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'j');
}
#[test]
fn ptext_not_in_key() {
let playfair = Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'x');
let ctext = playfair.encipher("defendtheeastwaljofthecastle");
assert_eq!(ctext, Err(CipherInputError::NotInAlphabet));
}
#[test]
fn ctext_not_in_key() {
let playfair = Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'x');
let ptext = playfair.decipher("rkpawrpmyselzcjfxuzfrsnqbpsa");
assert_eq!(ptext, Err(CipherInputError::NotInAlphabet));
}
#[test]
fn ctext_uneven_chars() {
let playfair = Playfair::new("zgptfoihmuwdrcnykeqaxvsbl", 'x');
let ptext = playfair.decipher("rkpawrpmyselzcfxuzfrsnqbpsa");
assert_eq!(
ptext,
Err(CipherInputError::BadInput(String::from(
"`ctext` must contain an even number of chars"
)))
);
}