use overpunch::{convert_from_signed_format, convert_to_signed_format};
use rust_decimal::Decimal;
use test_log::test;
#[test]
fn test_convert_from_single_character() {
let result = convert_from_signed_format("{", "s9(9)v99").unwrap();
assert_eq!("0.0", format!("{:.1}", result));
let result = convert_from_signed_format("}", "s9(9)v99").unwrap();
assert_eq!("-0.0", format!("{:.1}", result));
}
#[test]
fn test_convert_from_single_digit() {
let result = convert_from_signed_format("5", "s9(9)v99").unwrap();
assert_eq!("0.05", format!("{:.2}", result));
let result = convert_from_signed_format("N", "s9(9)v99").unwrap();
assert_eq!("-0.05", format!("{:.2}", result));
}
#[test]
fn test_convert_from_signed_format_empty_field_returns_none() {
let result = convert_from_signed_format("", "s9(9)v99");
assert!(result.is_none());
}
#[test]
fn test_convert_to_single_character() {
let result =
convert_to_signed_format(Decimal::from_str_exact("0.0").unwrap(), "s9(9)v99").unwrap();
assert_eq!("00{", result);
let result =
convert_to_signed_format(-Decimal::from_str_exact("0.0").unwrap(), "s9(9)v99").unwrap();
assert_eq!("00}", result);
}
#[test]
fn test_convert_to_single_digit() {
let result =
convert_to_signed_format(Decimal::from_str_exact("0.5").unwrap(), "s9(9)v99").unwrap();
assert_eq!("05{", result);
let result =
convert_to_signed_format(Decimal::from_str_exact("-0.5").unwrap(), "s9(9)v99").unwrap();
assert_eq!("05}", result);
}
#[test]
fn test_convert_from_signed_format() {
let value = convert_from_signed_format("2258{", "s9(7)v99").unwrap();
assert_eq!(value, Decimal::from_str_exact("225.8").unwrap());
assert_eq!("225.80", format!("{:.2}", value));
let mut value = convert_from_signed_format("30000", "9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("30.0").unwrap());
assert_eq!("30.000", format!("{:.3}", value));
value = convert_from_signed_format("180592", "9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("180.592").unwrap());
assert_eq!("180.592", format!("{:.3}", value));
value = convert_from_signed_format("12345G", "s9(9)v99").unwrap();
assert_eq!(value, Decimal::from_str_exact("1234.57").unwrap());
value = convert_from_signed_format("{", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0").unwrap());
assert_eq!("0.000", format!("{:.3}", value));
value = convert_from_signed_format("N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("0N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("00N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("000N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("0000N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("00000N", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.005").unwrap());
assert_eq!("-0.005", format!("{:.3}", value));
value = convert_from_signed_format("G", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.007").unwrap());
assert_eq!("0.007", format!("{:.3}", value));
value = convert_from_signed_format("0G", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.007").unwrap());
assert_eq!("0.007", format!("{:.3}", value));
value = convert_from_signed_format("00G", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.007").unwrap());
assert_eq!("0.007", format!("{:.3}", value));
value = convert_from_signed_format("000G", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.007").unwrap());
assert_eq!("0.007", format!("{:.3}", value));
value = convert_from_signed_format("0000G", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.007").unwrap());
assert_eq!("0.007", format!("{:.3}", value));
value = convert_from_signed_format("1F", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.016").unwrap());
assert_eq!("0.016", format!("{:.3}", value));
value = convert_from_signed_format("21C", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("0.213").unwrap());
assert_eq!("0.213", format!("{:.3}", value));
value = convert_from_signed_format("67L", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-0.673").unwrap());
assert_eq!("-0.673", format!("{:.3}", value));
value = convert_from_signed_format("123Q", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("-1.238").unwrap());
assert_eq!("-1.238", format!("{:.3}", value));
value = convert_from_signed_format("133I", "s9(7)v999").unwrap();
assert_eq!(value, Decimal::from_str_exact("1.339").unwrap());
assert_eq!("1.339", format!("{:.3}", value));
value = convert_from_signed_format("{", "s9(7)").unwrap();
assert_eq!(value, Decimal::from_str_exact("0").unwrap());
assert_eq!("0.000", format!("{:.3}", value));
value = convert_from_signed_format("}", "s9(7)").unwrap();
assert_eq!(value, Decimal::from_str_exact("0").unwrap());
assert_eq!("-0.000", format!("{:.3}", value));
value = convert_from_signed_format("B", "s9(7)").unwrap();
assert_eq!(value, Decimal::from_str_exact("2").unwrap());
assert_eq!("2.000", format!("{:.3}", value));
value = convert_from_signed_format("K", "s9(7)").unwrap();
assert_eq!(value, Decimal::from_str_exact("-2").unwrap());
assert_eq!("-2.000", format!("{:.3}", value));
}
#[test]
fn test_convert_to_signed_format() {
let mut value =
convert_to_signed_format(Decimal::from_str_exact("225.8").unwrap(), "s9(7)v99").unwrap();
assert_eq!(value, "2258{");
value =
convert_to_signed_format(Decimal::from_str_exact("225.80").unwrap(), "s9(7)v99").unwrap();
assert_eq!(value, "2258{");
value =
convert_to_signed_format(Decimal::from_str_exact("225.801").unwrap(), "s9(7)v99").unwrap();
assert_eq!(value, "2258{");
value = convert_to_signed_format(Decimal::from_str_exact("-12.3450").unwrap(), "s9(7)v9999")
.unwrap();
assert_eq!(value, "12345}");
value = convert_to_signed_format(Decimal::from_str_exact("-12.3451").unwrap(), "s9(7)v9999")
.unwrap();
assert_eq!(value, "12345J");
let mut value =
convert_to_signed_format(Decimal::from_str_exact("30.000").unwrap(), "9(7)v999").unwrap();
assert_eq!(value, "3000{");
value =
convert_to_signed_format(Decimal::from_str_exact("180.592").unwrap(), "9(7)v999").unwrap();
assert_eq!(value, "18059B");
value = convert_to_signed_format(Decimal::from_str_exact("1234.5678").unwrap(), "s9(9)v99")
.unwrap();
assert_eq!(value, "12345G");
value =
convert_to_signed_format(Decimal::from_str_exact("0.0008").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00{");
value =
convert_to_signed_format(Decimal::from_str_exact("0.008").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00A");
value =
convert_to_signed_format(Decimal::from_str_exact("0.004").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00{");
value = convert_to_signed_format(Decimal::from_str_exact("0.08").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00H");
value =
convert_to_signed_format(Decimal::from_str_exact("-0.008").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00J");
value =
convert_to_signed_format(Decimal::from_str_exact("-0.004").unwrap(), "s9(9)v99").unwrap();
assert_eq!(value, "00}");
value =
convert_to_signed_format(Decimal::from_str_exact("0.004").unwrap(), "s9(9)v999").unwrap();
assert_eq!(value, "000D");
value =
convert_to_signed_format(Decimal::from_str_exact("0.004").unwrap(), "s9(9)v9999").unwrap();
assert_eq!(value, "0004{");
}