runic 1.1.0

Stupid string to duration converter
Documentation
mod utils;

mod utc_0 {
    use super::*;

    mod at {
        use super::*;

        test! {
            name: optional_minutes,
            now: time! {10:00},
            total: duration! {01:00},
            variants: {
                without_mins => "at 11",
                with_mins => "at 11:00",
                am_without_mins => "at 11am",
                am_with_mins => "at 11:00am",
            }
        }

        test! {
            name: at_11_30,
            now: time! {10:00},
            total: duration! {01:30},
            variants: {
                h24 => "at 11:30",
                h12_short => "at 11:30am",
                h12_long => "at 11:30 am",
            }
        }

        test! {
            name: at_11_30_now_10_30,
            now: time! {10:30},
            total: duration! {01:00},
            variants: {
                h24 => "at 11:30",
                h12_short => "at 11:30am",
                h12_long => "at 11:30 am",
            }
        }

        test! {
            name: with_spaces,
            now: time! {10:30},
            total: duration! {01:00},
            variants: {
                before => "      at 11:30",
                after => "at 11:30      ",
                after_at => "at      11:30",
                after_am => "at 11:30       am",
            }
        }

        test! {
            name: with_new_lines,
            now: time! {10:30},
            total: duration! {01:00},
            variants: {
                before => "    \n\n  at 11:30",
                after => "at 11:30   \n\n   ",
                after_at => "at   \n\n   11:30",
                after_am => "at 11:30   \n\n    am",
            }
        }

        test! {
            name: with_seconds,
            now: time! {11:59-52},
            total: duration! {::8},
            variants: {
                h12 => "at 12",
                pm_12 => "at 12pm",
                pm_0 => "at 0pm",
            }
        }

        test! {
            name: tomorrow,
            now: time! {22:45-30},
            variants: {
                at_0 => "at 0" match duration!{01:14-30},
                at_2am => "at 2am" match duration!{03:14-30},
                at_4_30 => "at 4:30" match duration!{05:44-30},
                at_12_pm => "at 12pm" match duration!{13:14-30},
                at_10pm => "at 10 pm" match duration!{23:14-30},
                at_22_45 => "at 22:45" match duration!{23:59-30},
            }
        }
    }
}

const UTC_PLUS_2: i32 = 2 * 3600;
const UTC_MINUS_2: i32 = -UTC_PLUS_2;

test! {
    name: utc_plus_2,
    now: time! {22:45-30 UTC_PLUS_2},
    offset: UTC_PLUS_2,
    variants: {
        at_0 => "at 0" match duration!{01:14-30},
        at_2am => "at 2am" match duration!{03:14-30},
        at_4_30 => "at 4:30" match duration!{05:44-30},
        at_12_pm => "at 12pm" match duration!{13:14-30},
        at_10pm => "at 10 pm" match duration!{23:14-30},
        at_22_45 => "at 22:45" match duration!{23:59-30},
    }
}

test! {
    name: utc_minus_2,
    now: time! {22:45-30 UTC_MINUS_2},
    offset: UTC_MINUS_2,
    variants: {
        at_0 => "at 0" match duration!{01:14-30},
        at_2am => "at 2am" match duration!{03:14-30},
        at_4_30 => "at 4:30" match duration!{05:44-30},
        at_12_pm => "at 12pm" match duration!{13:14-30},
        at_10pm => "at 10 pm" match duration!{23:14-30},
        at_22_45 => "at 22:45" match duration!{23:59-30},
    }
}