timecode 0.7.5

library to manipulate timecode
Documentation
use timecode::*;

#[test]
fn test_smpte_12m_bad_length() {
  let data = vec![0, 0, 0];
  let tc = Timecode::parse_smpte_12m(&data, FrameRate::_25_00);
  assert!(tc.is_none());
}

#[test]
fn test_smpte_12m_zero() {
  let data = vec![0, 0, 0, 0, 0, 0, 0, 0];
  let value = Timecode::parse_smpte_12m(&data, FrameRate::_25_00);

  assert!(value.is_some());
  let tc = value.unwrap();
  assert_eq!(tc.hours(), 0);
  assert_eq!(tc.minutes(), 0);
  assert_eq!(tc.seconds(), 0);
  assert_eq!(
    tc.fraction(),
    &Fraction::Frames(TimecodeFrames::new(FrameRate::_25_00, 0, false, false,))
  );
}

#[test]
fn test_smpte_12m_full_range() {
  let data = vec![
    0b0011_1111,
    0b0111_1111,
    0b0111_1111,
    0b0011_1111,
    0,
    0,
    0,
    0,
  ];
  let value = Timecode::parse_smpte_12m(&data, FrameRate::_25_00);

  assert!(value.is_some());
  let tc = value.unwrap();
  assert_eq!(tc.hours(), 45);
  assert_eq!(tc.minutes(), 85);
  assert_eq!(tc.seconds(), 85);
  assert_eq!(
    tc.fraction(),
    &Fraction::Frames(TimecodeFrames::new(FrameRate::_25_00, 45, false, false,))
  );
}

#[test]
fn test_smpte_12m_10_hours() {
  let data = vec![0, 0, 0, 0b0001_0000, 0, 0, 0, 0];
  let value = Timecode::parse_smpte_12m(&data, FrameRate::_25_00);

  assert!(value.is_some());
  let tc = value.unwrap();
  assert_eq!(tc.hours(), 10);
  assert_eq!(tc.minutes(), 0);
  assert_eq!(tc.seconds(), 0);
  assert_eq!(
    tc.fraction(),
    &Fraction::Frames(TimecodeFrames::new(FrameRate::_25_00, 0, false, false,))
  );
}

#[test]
fn test_smpte_12m_drop_frame_and_color_frame() {
  let data = vec![0b1100_0000, 0, 0, 0, 0, 0, 0, 0];
  let value = Timecode::parse_smpte_12m(&data, FrameRate::_25_00);

  assert!(value.is_some());
  let tc = value.unwrap();
  assert_eq!(tc.hours(), 0);
  assert_eq!(tc.minutes(), 0);
  assert_eq!(tc.seconds(), 0);
  assert_eq!(
    tc.fraction(),
    &Fraction::Frames(TimecodeFrames::new(FrameRate::_25_00, 0, true, true,))
  );
}

#[test]
fn test_smpte_331m_bad_length() {
  let data = vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
  let value = Timecode::parse_smpte_331m(&data, FrameRate::_25_00);

  assert!(value.is_none());
}

#[test]
fn test_smpte_331m_bad_code() {
  let data = vec![
    0x00,
    0,
    0,
    0,
    0b0001_0000,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
  ];
  let value = Timecode::parse_smpte_331m(&data, FrameRate::_25_00);

  assert!(value.is_none());
}

#[test]
fn test_smpte_331m_smpte_12m_content() {
  let data = vec![
    0x81,
    0,
    0,
    0,
    0b0001_0000,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
  ];
  let value = Timecode::parse_smpte_331m(&data, FrameRate::_25_00);

  assert!(value.is_some());
  let tc = value.unwrap();
  assert_eq!(tc.hours(), 10);
  assert_eq!(tc.minutes(), 0);
  assert_eq!(tc.seconds(), 0);
  assert_eq!(
    tc.fraction(),
    &Fraction::Frames(TimecodeFrames::new(FrameRate::_25_00, 0, false, false,))
  );
}