use async_timer::timer::{Timer, Platform, SyncTimer, new_sync_timer};
use tokio_1 as tokio;

use std::time;

#[tokio::test]
async fn test_async_timer() {
    let work = Platform::new(time::Duration::from_secs(2));
    assert!(!work.is_ticking());
    assert!(!work.is_expired());

    let before = time::SystemTime::now();
    work.await;
    let after = time::SystemTime::now();
    let diff = after.duration_since(before).unwrap();

    assert!(diff.as_millis() >= 1_500 && diff.as_millis() <= 2_500);
}

#[test]
fn test_cancel_timer() {
    let mut work = new_sync_timer(time::Duration::from_secs(500000));

    assert!(!work.is_ticking());
    assert!(!work.is_expired());

    assert!(!work.tick());

    assert!(work.is_ticking());
    assert!(!work.is_expired());

    work.cancel();

    assert!(!work.is_ticking());
    assert!(work.is_expired());
}