cue_lib 0.1.0

cuesheet library
Documentation
#![cfg(feature = "upc")]

use cue_lib::{core::Digits, discid::error::UpcParseErrorKind, discid::upc::UpcA};
use std::str::FromStr;

macro_rules! test_upc_a {
  ($test_name:ident, $digits:literal) => {
    #[test]
    fn $test_name() {
      match UpcA::from_str($digits) {
        Ok(upca) => {
          let digits = Digits::from_str(&$digits).unwrap();
          assert_eq!(upca.left_part().as_bytes(), &digits[1..6]);
          assert_eq!(upca.right_part().as_bytes(), &digits[6..11]);
          assert_eq!(upca.digit_system(), digits[0]);
          assert_eq!(&upca.as_bytes(), &digits.as_bytes());
          assert_eq!(&upca.to_string(), $digits);
          assert_eq!(&upca.as_ascii_bytes(), $digits.as_bytes());
        }
        Err(err) => assert!(false, "UPC-A parsing should've succeed, {:?}", err),
      }
    }
  };

  ($test_name:ident, $digits:literal, expects_err = $err:expr) => {
    #[test]
    fn $test_name() {
      match UpcA::from_str($digits) {
        Ok(_) => {
          assert!(false, "UPC-A parsing should've failed.")
        }
        Err(err) => assert_eq!(err.kind(), $err),
      }
    }
  };
}

test_upc_a!(from_str_123456789120, "123456789128");
test_upc_a!(from_str_000000000000, "000000000000");
test_upc_a!(from_str_111111111111, "111111111117");
test_upc_a!(from_str_999999999993, "999999999993");
test_upc_a!(from_str_760524681238, "760524681238");
test_upc_a!(from_str_546984834526, "546984834526");

test_upc_a!(
  invalid_cheksum_123456789121,
  "123456789121",
  expects_err = UpcParseErrorKind::ChecksumFail
);

test_upc_a!(
  invalid_char_abc000012345,
  "abc000012345",
  expects_err = UpcParseErrorKind::InvalidCharacter
);

test_upc_a!(
  invalid_checksumdigit_11100001234_,
  "11100001234_",
  expects_err = UpcParseErrorKind::InvalidCharacter
);

test_upc_a!(
  empty_str,
  "",
  expects_err = UpcParseErrorKind::InvalidLength
);

test_upc_a!(
  invalid_length_3,
  "123",
  expects_err = UpcParseErrorKind::InvalidLength
);

test_upc_a!(
  invalid_length_11,
  "54698483452",
  expects_err = UpcParseErrorKind::InvalidLength
);

test_upc_a!(
  invalid_length_13,
  "5469848345212",
  expects_err = UpcParseErrorKind::InvalidLength
);