ion-binary-rs 0.8.13

Pure Rust parser, encoder and hasher for Amazon's Ion binary format.
Documentation
use crate::ion_parser::IonParser;
use crate::read_file_testsuite;
use crate::IonParserError;
use std::fs::File;
use std::io::BufReader;

#[test]
fn timestamp_leap_day_non_leap_year_1() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/outOfRange/leapDayNonLeapYear_1");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::InvalidDate(2001, 2, 29, 0, 0, 0, 0);
    assert_eq!(expected, value);
}

#[test]
fn timestamp_leap_day_non_leap_year_2() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/outOfRange/leapDayNonLeapYear_2");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::InvalidDate(2001, 2, 29, 0, 0, 0, 0);
    assert_eq!(expected, value)
}

#[test]
fn timestamp_fraction_10d_1() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampFraction10d-1");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateSecondFractionOverflow;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_fraction_11d_1() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampFraction11d-1");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateSecondFractionOverflow;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_fraction_1d_0() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampFraction1d0");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateSecondFractionOverflow;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_hour_without_minute() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampHourWithoutMinute");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateWithHourButNoMinutes;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_len_too_large() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampLenTooLarge");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateValueTooBig;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_negative_fraction() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampNegativeFraction");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::DateNegativeSecondFraction;
    assert_eq!(expected, value);
}

#[test]
fn timestamp_sept_31() {
    let ion_timestamp = read_file_testsuite!("bad/timestamp/timestampSept31");
    let mut parser = IonParser::new(ion_timestamp);
    let value = parser.consume_value().unwrap_err();
    let expected = IonParserError::InvalidDate(2015, 9, 31, 0, 0, 0, 0);
    assert_eq!(expected, value);
}