#[path = "../src/test_utils.rs"]
mod utils;
use std::any::Any;
use trait_obj_list::DynList;
use crate::utils::assert_any_eq;
utils::for_each_list_type! {
#[test]
fn no_empty_cursor<T>() {
let mut l = DynList::<dyn Any, T>::new();
assert!(l.cursor().is_none());
}
#[test]
fn cursor<T>() {
let mut l = DynList::<dyn Any, T>::new();
l.extend(0..10i32);
assert_eq!(l.len(), 10);
let mut cursor = l.cursor().unwrap();
for i in 0..10 {
assert_any_eq(cursor.current(), i);
assert_eq!(cursor.move_next(), i != 9);
}
assert!(!cursor.move_next());
let mut cursor = l.cursor().unwrap();
for i in 0..5 {
assert_any_eq(cursor.current(), i);
assert!(cursor.move_next());
}
cursor.drop_after();
assert_eq!(l.len(), 5);
for (i, v) in l.iter().enumerate() {
assert_any_eq(v, i as i32);
}
l.shrink_to_fit();
assert_eq!(l.len(), 5);
for (i, v) in l.iter().enumerate() {
assert_any_eq(v, i as i32);
}
}
}
#[test]
fn no_empty_cursor_end_double_linked() {
let mut l = DynList::<dyn Any, trait_obj_list::types::DoubleLinked>::new();
assert!(l.cursor_end().is_none());
}
#[test]
fn cursor_rev_double_linked() {
let mut l = DynList::<dyn Any, trait_obj_list::types::DoubleLinked>::new();
l.extend(0..10i32);
assert_eq!(l.len(), 10);
let mut cursor = l.cursor().unwrap();
assert!(!cursor.move_prev());
let mut cursor = l.cursor_end().unwrap();
for i in (0..10).rev() {
assert_any_eq(cursor.current(), i);
assert_eq!(cursor.move_prev(), i != 0);
}
assert!(!cursor.move_prev());
let mut cursor = l.cursor_end().unwrap();
for i in (6..10).rev() {
assert_any_eq(cursor.current(), i);
assert!(cursor.move_prev());
}
cursor.drop_after();
assert_eq!(l.len(), 5);
for (i, v) in l.iter().enumerate() {
assert_any_eq(v, i as i32);
}
l.shrink_to_fit();
assert_eq!(l.len(), 5);
for (i, v) in l.iter().enumerate() {
assert_any_eq(v, i as i32);
}
}