tiny-counter 0.1.0

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

use tiny_counter::{EventStore, TimeUnit};

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

    let result = store
        .limit()
        .at_most("action", 10, TimeUnit::Hours)
        .check("action");
    assert!(result.is_ok());

    // Event should not be recorded
    assert_eq!(store.query("action").last_hours(1).sum(), None);
}

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

    let result = store
        .limit()
        .at_most("action", 10, TimeUnit::Hours)
        .check_and_record("action");
    assert!(result.is_ok());

    // Event should be recorded
    assert_eq!(store.query("action").last_hours(1).sum(), Some(1));
}

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

    // Fill to limit
    for _ in 0..10 {
        store.record("action");
    }

    // This should fail and not record
    let result = store
        .limit()
        .at_most("action", 10, TimeUnit::Hours)
        .check_and_record("action");
    assert!(result.is_err());

    // Count should remain at limit
    assert_eq!(store.query("action").last_hours(1).sum(), Some(10));
}