tiny-counter 0.1.0

Track event counts across time windows with fixed memory and fast queries
Documentation
//! Tests for .at_least() rate limiting constraint

use tiny_counter::{EventStore, TimeUnit};

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

    // Without prerequisite, should fail
    let result = store
        .limit()
        .at_least("prerequisite", 1, TimeUnit::Hours)
        .check("action");

    assert!(result.is_err());

    // After recording prerequisite, should succeed
    store.record("prerequisite");

    let result = store
        .limit()
        .at_least("prerequisite", 1, TimeUnit::Hours)
        .check("action");

    assert!(result.is_ok());
}

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

    store.record_count("prerequisite", 5);

    // Requires 10, should fail
    let result = store
        .limit()
        .at_least("prerequisite", 10, TimeUnit::Hours)
        .check("action");

    assert!(result.is_err());

    // Add more to reach minimum
    store.record_count("prerequisite", 5);

    // Now should succeed
    let result = store
        .limit()
        .at_least("prerequisite", 10, TimeUnit::Hours)
        .check("action");

    assert!(result.is_ok());
}