use crate::error::CharacterParseError;
use crate::utils::matrix_functions::transpose_matrix;
use crate::utils::{decode_list, encode_char, encode_string, BaseString, EncodedString};
use num_integer::gcd;
fn test_gcd(a: usize, b: usize, expected: usize) {
let result = gcd(a, b);
assert_eq!(result, expected);
}
#[test]
fn test_gcd_1() {
test_gcd(255, 256, 1);
}
#[test]
fn test_gcd_numbers() {
let n = 255;
let mut relative_primes = Vec::new();
for i in 1..n {
let num = gcd(i, n);
if num == 1 {
relative_primes.push(i);
}
}
println!("{:?}", relative_primes.len());
}
#[test]
fn test_sve() {
let t = "abc";
let v = vec![0, 1, 2];
let result = encode_string(t).unwrap();
assert_eq!(result, v);
}
#[test]
fn test_sve_act() {
let t = "act";
let v = vec![0, 2, 19];
let result = encode_string(t).unwrap();
assert_eq!(result, v);
}
#[test]
fn test_sve_vec() {
let t = vec![0, 1, 2];
let v = "abc";
assert_eq!(decode_list(t).unwrap(), v);
}
#[test]
fn test_transpose_matrix() {
let matrix = vec![1, 2, 3, 4, 5, 6];
let rows = 2;
let cols = 3;
let expected = vec![vec![1, 4], vec![2, 5], vec![3, 6]];
let result = transpose_matrix(&matrix, rows, cols);
assert_eq!(result, expected);
}
#[test]
fn test_sve_char() {
let t = 'a';
let v = 0;
let result = encode_char(t).unwrap();
assert_eq!(result, v);
}
#[test]
fn test_sve_invalid_char() {
let t = 'w';
let result = encode_char(t);
assert!(result.is_err());
let result = result.unwrap_err();
assert_eq!(result, CharacterParseError::InvalidCharacter(t));
}
#[test]
fn sve_returns_error_for_non_alphabet_characters() {
let t = "abc1";
let result = encode_string(t);
assert!(result.is_err());
assert_eq!(
result.unwrap_err(),
CharacterParseError::InvalidCharacter('1')
);
}
#[test]
fn sve_vec_returns_error_for_out_of_range_indices() {
let t = vec![0, 1, 2, 50];
let result = decode_list(t);
assert!(result.is_err());
assert_eq!(result.unwrap_err(), CharacterParseError::InvalidIndex(50));
}
#[test]
fn sve_char_returns_error_for_non_alphabet_character() {
let t = '1';
let result = encode_char(t);
assert!(result.is_err());
assert_eq!(
result.unwrap_err(),
CharacterParseError::InvalidCharacter('1')
);
}
fn test_encode(txt: String, expected: String) {
let base_str = BaseString::new(txt);
let result = base_str.encode().unwrap().flatten();
assert_eq!(result, expected);
}
fn test_encode_asym(txt: String, expected: String) {
let base_str = BaseString::new(txt);
let result = base_str.encode_asym().unwrap().flatten();
assert_eq!(result, expected);
}
#[test]
fn test_encode_string() {
test_encode("abc".to_string(), "012".to_string());
}
#[test]
fn test_encode_string_asym() {
test_encode_asym(
"imponerande".to_string(),
"913161514051801140405".to_string(),
);
}
#[test]
fn test_encode_string_2() {
let base_str = BaseString::new("imponerande".to_string());
let result = base_str.encode().unwrap().flatten();
assert_eq!(result, "81215141341701334");
}