#[derive(Copy, Clone, Debug)]
pub struct IterLimit {
max: u64,
cur: u64,
}
impl IterLimit {
pub fn new(max: u64) -> IterLimit {
IterLimit { max, cur: 0 }
}
pub fn inc(&mut self) {
self.cur += 1;
}
pub fn reached(&self) -> bool {
self.cur >= self.max
}
pub fn reset(&mut self) {
self.cur = 0;
}
pub fn get(&self) -> u64 {
self.cur
}
}
#[cfg(test)]
mod tests {
use super::IterLimit;
#[test]
fn test_iter_limit_reset() {
let mut limit = IterLimit::new(5);
for _ in 0..4 {
limit.inc();
}
assert_eq!(limit.reached(), false);
limit.reset();
assert_eq!(limit.reached(), false);
}
#[test]
fn test_iter_limit_reached() {
let mut limit = IterLimit::new(5);
for _ in 0..5 {
limit.inc();
}
assert!(limit.reached());
for _ in 0..10 {
limit.inc();
}
assert!(limit.reached());
assert_eq!(limit.get(), 15);
}
}