array-linked-list 0.2.3

A data structure, which combines the advantages of dynamic arrays and linked lists
Documentation
use array_linked_list::ArrayLinkedList;

fn get_default_array() -> ArrayLinkedList<u8> {
    let mut array = ArrayLinkedList::new();

    array.push_front(1);
    array.push_back(2);
    array.push_front(3);
    array.push_back(4);
    array.push_back(5);

    array
}

#[test]
fn test_values() {
    let array = get_default_array();

    let vec: Vec<_> = array.iter().copied().collect();
    assert_eq!(vec, vec![3, 1, 2, 4, 5]);
}

#[test]
fn test_values_after() {
    let array = get_default_array();

    let vec: Vec<_> = array.iter_after(1).copied().collect();
    assert_eq!(vec, vec![4, 5]);
}

#[test]
fn test_values_before() {
    let array = get_default_array();

    let vec: Vec<_> = array.iter_before(1).copied().collect();
    assert_eq!(vec, vec![3, 1]);
}

#[test]
fn test_into_values() {
    let array = get_default_array();

    let vec: Vec<_> = array.into_iter().collect();
    assert_eq!(vec, vec![3, 1, 2, 4, 5]);
}

#[test]
fn test_indexed() {
    let array = get_default_array();

    let vec: Vec<_> = array.indexed().collect();
    assert_eq!(vec, vec![(2, &3), (0, &1), (1, &2), (3, &4), (4, &5)]);
}

#[test]
fn test_indexed_after() {
    let array = get_default_array();

    let vec: Vec<_> = array.indexed_after(1).collect();
    assert_eq!(vec, vec![(3, &4), (4, &5)]);
}

#[test]
fn test_indexed_before() {
    let array = get_default_array();

    let vec: Vec<_> = array.indexed_before(1).collect();
    assert_eq!(vec, vec![(2, &3), (0, &1)]);
}

#[test]
fn test_into_indexed() {
    let array = get_default_array();

    let vec: Vec<_> = array.into_indexed().collect();
    assert_eq!(vec, vec![(2, 3), (0, 1), (1, 2), (3, 4), (4, 5)]);
}

#[test]
fn test_indices() {
    let array = get_default_array();

    let vec: Vec<_> = array.indices().collect();
    assert_eq!(vec, vec![2, 0, 1, 3, 4]);
}

#[test]
fn test_indices_after() {
    let array = get_default_array();

    let vec: Vec<_> = array.indices_after(1).collect();
    assert_eq!(vec, vec![3, 4]);
}

#[test]
fn test_indices_before() {
    let array = get_default_array();

    let vec: Vec<_> = array.indices_before(1).collect();
    assert_eq!(vec, vec![2, 0]);
}

#[test]
fn test_into_indices() {
    let array = get_default_array();

    let vec: Vec<_> = array.into_indices().collect();
    assert_eq!(vec, vec![2, 0, 1, 3, 4]);
}

#[test]
fn test_values_mut() {
    let mut array = get_default_array();

    for value in array.iter_mut() {
        *value *= 10;
    }
    let vec: Vec<_> = array.iter().copied().collect();
    assert_eq!(vec, vec![30, 10, 20, 40, 50]);
}

#[test]
fn test_values_mut_rev() {
    let mut array = get_default_array();

    let vec: Vec<_> = array.iter_mut().rev().map(|value| *value).collect();
    assert_eq!(vec, vec![5, 4, 2, 1, 3]);
}

#[test]
fn test_indexed_mut() {
    let mut array = get_default_array();

    for (index, value) in array.indexed_mut() {
        *value = index as u8;
    }
    let vec: Vec<_> = array
        .indexed()
        .map(|(index, value)| (index, *value))
        .collect();
    assert_eq!(vec, vec![(2, 2), (0, 0), (1, 1), (3, 3), (4, 4)]);
}

#[test]
fn test_values_mut_after_before() {
    let mut array = get_default_array();

    for value in array.iter_mut_after(1) {
        *value += 100;
    }
    for value in array.iter_mut_before(1) {
        *value += 200;
    }
    let vec: Vec<_> = array.iter().copied().collect();
    assert_eq!(vec, vec![203, 201, 2, 104, 105]);
}

#[test]
fn test_from_iter_and_extend() {
    let mut array: ArrayLinkedList<u8> = (1..=3).collect();
    array.extend(4..=5);

    let vec: Vec<_> = array.iter().copied().collect();
    assert_eq!(vec, vec![1, 2, 3, 4, 5]);
    assert_eq!(array.len(), 5);
}