date_time 2.2.0

Date_Time is a high-level rust library for use in situations where precision beyond seconds is not necessary.
Documentation
extern crate date_time;

use date_time::month_tuple::MonthTuple;

#[test]
fn test_component_too_large() {
    assert!(MonthTuple::new(2000, 12).is_ok());
    assert!(MonthTuple::new(2000, 13).is_err());
    assert!(MonthTuple::new(10000, 5).is_err());
}

#[test]
fn test_this_month_does_not_panic() {
    MonthTuple::this_month();
}

#[test]
fn test_to_readable_string() {
    let tuple = MonthTuple::new(2000, 5).unwrap();
    assert_eq!(String::from("May 2000"), tuple.to_readable_string());
}

#[test]
fn test_to_string() {
    let tuple = MonthTuple::new(2000, 5).unwrap();
    assert_eq!(String::from("2000-05"), tuple.to_string());
}

#[test]
fn test_equals() {
    let tuple1 = MonthTuple::new(2000, 5).unwrap();
    let tuple2 = MonthTuple::new(2000, 5).unwrap();
    assert_eq!(tuple1, tuple2);
}

#[test]
fn test_comparisons() {
    let tuple1 = MonthTuple::new(2000, 5).unwrap();
    let tuple2 = MonthTuple::new(2000, 5).unwrap();
    let tuple3 = MonthTuple::new(2000, 6).unwrap();
    let tuple4 = MonthTuple::new(2001, 1).unwrap();
    assert!(tuple1 <= tuple2);
    assert!(!(tuple1 < tuple2));
    assert!(tuple1 >= tuple2);
    assert!(tuple1 < tuple3);
    assert!(tuple3 < tuple4);
    assert!(tuple4 > tuple2);
}

#[test]
fn test_from_string() {
    let tuple = MonthTuple::new(2000, 5).unwrap();
    assert_eq!(tuple, str::parse("2000-05").unwrap());
    assert_eq!(tuple, str::parse("200005").unwrap());
    assert!(str::parse::<MonthTuple>("2000-15").is_err());
    assert!(str::parse::<MonthTuple>("200015").is_err());
    assert!(str::parse::<MonthTuple>("200O05").is_err());
}

#[test]
fn test_add_months() {
    let mut tuple1 = MonthTuple::new(2000, 6).unwrap();
    let tuple1_orig = MonthTuple::new(2000, 6).unwrap();
    let mut tuple2 = MonthTuple::new(2000, 12).unwrap();
    let tuple2_orig = MonthTuple::new(2000, 12).unwrap();
    tuple1.add_months(1);
    assert_eq!(tuple1, tuple1_orig.next_month());
    tuple2.add_months(2);
    assert_eq!(tuple2, tuple2_orig.next_month().next_month());
}

#[test]
fn test_subtract_months() {
    let mut tuple1 = MonthTuple::new(2000, 6).unwrap();
    let tuple1_orig = MonthTuple::new(2000, 6).unwrap();
    let mut tuple2 = MonthTuple::new(2000, 12).unwrap();
    let tuple2_orig = MonthTuple::new(2000, 12).unwrap();
    tuple1.subtract_months(1);
    assert_eq!(tuple1, tuple1_orig.previous_month());
    tuple2.subtract_months(2);
    assert_eq!(tuple2, tuple2_orig.previous_month().previous_month());
}

#[test]
fn test_add_years() {
    let mut tuple1 = MonthTuple::new(2000, 6).unwrap();
    let mut tuple2 = MonthTuple::new(9998, 6).unwrap();
    tuple1.add_years(2);
    assert_eq!(2002, tuple1.get_year());
    tuple2.add_years(2);
    assert_eq!(9999, tuple2.get_year());
}

#[test]
fn test_subtract_years() {
    let mut tuple1 = MonthTuple::new(2000, 6).unwrap();
    let mut tuple2 = MonthTuple::new(1, 6).unwrap();
    tuple1.subtract_years(2);
    assert_eq!(1998, tuple1.get_year());
    tuple2.subtract_years(2);
    assert_eq!(0, tuple2.get_year());
}