tiny-counter 0.1.0

Track event counts across time windows with fixed memory and fast queries
Documentation
//! Tests for combining multiple rate limiting constraints

use chrono::Duration;
use tiny_counter::{EventStore, TimeUnit};

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

    // Record prerequisite for "within" constraint
    store.record("auth");

    // All constraints should pass
    let result = store
        .limit()
        .at_most("action", 10, TimeUnit::Hours)
        .within("auth", Duration::hours(1))
        .check_and_record("action");

    assert!(result.is_ok());
}

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

    // Don't record prerequisite, so "within" will fail
    // Even though "at_most" would pass

    let result = store
        .limit()
        .at_most("action", 10, TimeUnit::Hours)
        .within("auth", Duration::hours(1))
        .check_and_record("action");

    assert!(result.is_err());
}