module datatypes fn test_is_empty() { mut list := LinkedList{} assert list.is_empty() == true list.push(1) assert list.is_empty() == false } fn test_len() ? { mut list := LinkedList{} assert list.len() == 0 list.push(1) assert list.len() == 1 list.pop()? assert list.len() == 0 } fn test_first() ? { mut list := LinkedList{} list.push(1) assert list.first()? == 1 list.push(2) assert list.first()? == 1 list = LinkedList{} list.first() or { return } assert false } fn test_last() ? { mut list := LinkedList{} list.push(1) assert list.last()? == 1 list.push(2) assert list.last()? == 2 list = LinkedList{} list.last() or { return } assert false } fn test_index() ? { mut list := LinkedList{} list.push(1) assert list.index(0)? == 1 list.push(2) assert list.index(1)? == 2 list.pop()? list.index(1) or { return } assert false } fn test_push() ? { mut list := LinkedList{} list.push(1) assert list.last()? == 1 list.push(2) assert list.last()? == 2 list.push(3) assert list.last()? == 3 } fn test_pop() ? { mut list := LinkedList{} list.push(1) list.push(2) list.push(3) assert list.pop()? == 3 list.push(4) assert list.pop()? == 4 assert list.pop()? == 2 list = LinkedList{} list.pop() or { return } assert false } fn test_shift() ? { mut list := LinkedList{} list.push(1) list.push(2) list.push(3) assert list.shift()? == 1 list.push(4) assert list.shift()? == 2 assert list.shift()? == 3 list = LinkedList{} list.shift() or { return } assert false } fn test_insert() ? { mut list := LinkedList{} list.push(1) list.push(2) list.push(3) list.insert(1, 111) or { return } assert true } fn test_prepend() ? { mut list := LinkedList{} list.push(1) list.push(2) list.push(3) list.prepend(111) assert list.first()? == 111 } fn test_str() ? { mut list := LinkedList{} list.push(1) list.push(2) list.push(3) assert list.str() == '[1, 2, 3]' }