tiny-counter 0.1.0

Track event counts across time windows with fixed memory and fast queries
Documentation
//! Tests for .query_delta() and .balance_delta() methods

use tiny_counter::EventStore;

#[test]
fn query_delta() {
    let store = EventStore::new();

    store.record_count("additions", 50);
    store.record_count("deletions", 30);

    let delta = store
        .query_delta("additions", "deletions")
        .last_days(1)
        .sum();

    assert_eq!(delta, 20);
}

#[test]
fn query_delta_negative_result() {
    let store = EventStore::new();

    store.record_count("additions", 30);
    store.record_count("deletions", 50);

    let delta = store
        .query_delta("additions", "deletions")
        .last_days(1)
        .sum();

    assert_eq!(delta, -20);
}

#[test]
fn balance_delta_basic() {
    let store = EventStore::new();

    store.record_count("additions", 100);
    store.record_count("deletions", 30);

    // Delta is 70, so balance_delta adds 70 to deletions
    store.balance_delta("additions", "deletions").unwrap();

    // Delta should now be zero
    let delta = store
        .query_delta("additions", "deletions")
        .last_days(1)
        .sum();
    assert_eq!(delta, 0);

    // Both counters have increased
    assert_eq!(store.query("additions").last_days(1).sum(), Some(100));
    assert_eq!(store.query("deletions").last_days(1).sum(), Some(100));
}

#[test]
fn balance_delta_with_negative() {
    let store = EventStore::new();

    store.record_count("additions", 30);
    store.record_count("deletions", 100);

    // Delta is -70, so balance_delta adds 70 to additions
    store.balance_delta("additions", "deletions").unwrap();

    // Delta should now be zero
    let delta = store
        .query_delta("additions", "deletions")
        .last_days(1)
        .sum();
    assert_eq!(delta, 0);

    // Both counters have increased
    assert_eq!(store.query("additions").last_days(1).sum(), Some(100));
    assert_eq!(store.query("deletions").last_days(1).sum(), Some(100));
}

#[test]
fn delta_with_missing_event() {
    let store = EventStore::new();

    store.record_count("existing", 50);

    // Delta with one missing event
    let delta = store.query_delta("existing", "missing").last_days(1).sum();
    assert_eq!(delta, 50);
}