use shadow_counted::{IntoShadowCounted, ShadowCountedIter};
#[test]
fn test_count_simple_iteration() {
let data = vec![1, 2, 3, 4, 5];
let mut iter = data.into_iter().shadow_counted();
assert_eq!(iter.counter(), 0);
iter.next();
assert_eq!(iter.counter(), 1);
iter.next();
assert_eq!(iter.counter(), 2);
for _ in iter.by_ref() {}
assert_eq!(iter.counter(), 5);
}
#[test]
fn test_empty_iterator_count() {
let data: Vec<i32> = vec![];
let mut iter = data.into_iter().shadow_counted();
assert_eq!(iter.counter(), 0);
assert!(iter.next().is_none());
assert_eq!(iter.counter(), 0);
}
#[test]
fn test_single_element() {
let data = vec![42];
let mut iter = data.into_iter().shadow_counted();
assert_eq!(iter.counter(), 0);
assert_eq!(iter.next(), Some(42));
assert_eq!(iter.counter(), 1);
assert!(iter.next().is_none());
assert_eq!(iter.counter(), 1);
}
#[test]
fn test_counter_only_increments_on_next() {
let data = vec![1, 2];
let mut iter = data.into_iter().shadow_counted();
assert_eq!(iter.counter(), 0);
iter.next();
assert_eq!(iter.counter(), 1);
iter.next();
assert_eq!(iter.counter(), 2);
iter.next();
assert_eq!(iter.counter(), 2); iter.next();
assert_eq!(iter.counter(), 2); }
#[test]
fn test_different_types() {
let strings = vec!["a", "b", "c"];
let mut iter = strings.into_iter().shadow_counted();
for _ in iter.by_ref() {}
assert_eq!(iter.counter(), 3);
let tuples = vec![(1, 2), (3, 4)];
let mut iter = tuples.into_iter().shadow_counted();
for _ in iter.by_ref() {}
assert_eq!(iter.counter(), 2);
}
#[test]
fn test_into_inner_iter() {
let data = vec![1, 2, 3, 4, 5];
let mut iter = data.into_iter().shadow_counted();
iter.next(); assert_eq!(iter.counter(), 1);
let inner = iter.into_inner_iter();
assert_eq!(inner.collect::<Vec<_>>(), vec![2, 3, 4, 5]);
}
#[test]
fn test_add_method() {
let data = vec![1, 2, 3];
let mut iter = data.into_iter().shadow_counted();
assert_eq!(iter.counter(), 0);
iter.add(5);
assert_eq!(iter.counter(), 5);
iter.next();
assert_eq!(iter.counter(), 6);
}
#[test]
fn test_from_trait() {
let vec = vec![1, 2, 3];
let iter: ShadowCountedIter<_, _> = vec.into_iter().into();
let count = iter.count();
assert_eq!(count, 3);
}