mirror of
https://github.com/telemt/telemt.git
synced 2026-06-19 01:11:09 +03:00
65 lines
1.8 KiB
Rust
65 lines
1.8 KiB
Rust
use super::watchdog_delta;
|
|
|
|
#[test]
|
|
fn positive_monotonic_growth_returns_exact_delta() {
|
|
assert_eq!(watchdog_delta(42, 40), 2);
|
|
assert_eq!(watchdog_delta(4096, 1024), 3072);
|
|
}
|
|
|
|
#[test]
|
|
fn edge_equal_values_return_zero_delta() {
|
|
assert_eq!(watchdog_delta(0, 0), 0);
|
|
assert_eq!(watchdog_delta(777, 777), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn adversarial_wrap_like_regression_saturates_to_zero() {
|
|
// Simulates a wrapped or reset counter observation where current < previous.
|
|
assert_eq!(watchdog_delta(0, 1), 0);
|
|
assert_eq!(watchdog_delta(12, 4096), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn adversarial_blackhat_large_previous_value_never_underflows() {
|
|
let current = 3u64;
|
|
let previous = u64::MAX - 1;
|
|
assert_eq!(watchdog_delta(current, previous), 0);
|
|
}
|
|
|
|
#[test]
|
|
fn light_fuzz_mixed_pairs_match_saturating_sub_contract() {
|
|
// Deterministic xorshift64* generator for reproducible pseudo-fuzzing.
|
|
let mut seed = 0xA51C_ED42_D00D_F00Du64;
|
|
|
|
for _ in 0..10_000 {
|
|
seed ^= seed >> 12;
|
|
seed ^= seed << 25;
|
|
seed ^= seed >> 27;
|
|
let current = seed.wrapping_mul(0x2545_F491_4F6C_DD1D);
|
|
|
|
seed ^= seed >> 12;
|
|
seed ^= seed << 25;
|
|
seed ^= seed >> 27;
|
|
let previous = seed.wrapping_mul(0x2545_F491_4F6C_DD1D);
|
|
|
|
let expected = current.saturating_sub(previous);
|
|
let actual = watchdog_delta(current, previous);
|
|
assert_eq!(
|
|
actual, expected,
|
|
"delta mismatch for ({current}, {previous})"
|
|
);
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn stress_long_running_monotonic_sequence_remains_exact() {
|
|
let mut prev = 0u64;
|
|
|
|
for step in 1u64..=200_000 {
|
|
let curr = prev.saturating_add(step & 0x7);
|
|
let delta = watchdog_delta(curr, prev);
|
|
assert_eq!(delta, curr - prev);
|
|
prev = curr;
|
|
}
|
|
}
|