use tool_loop_break::LoopDetector;
#[test]
fn three_identical_trips_loop() {
let mut d = LoopDetector::new(10, 3);
assert!(!d.record("read", "abc"));
assert!(!d.record("read", "abc"));
assert!(d.record("read", "abc"));
}
#[test]
fn different_args_dont_trip() {
let mut d = LoopDetector::new(10, 3);
assert!(!d.record("read", "a"));
assert!(!d.record("read", "b"));
assert!(!d.record("read", "c"));
}
#[test]
fn different_tools_dont_collide() {
let mut d = LoopDetector::new(10, 2);
assert!(!d.record("read", "x"));
assert!(!d.record("write", "x"));
assert!(d.record("read", "x")); }
#[test]
fn window_eviction_clears_loop() {
let mut d = LoopDetector::new(3, 2);
d.record("t", "a");
d.record("t", "b");
d.record("t", "c");
assert!(!d.record("t", "a"));
}
#[test]
fn is_looping_flag() {
let mut d = LoopDetector::new(10, 2);
assert!(!d.is_looping());
d.record("t", "x");
d.record("t", "x");
assert!(d.is_looping());
d.reset();
assert!(!d.is_looping());
}