1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/datatypes/doubly_linked_list_test.v

215 lines
4.0 KiB
V

module datatypes
fn test_is_empty() {
mut list := DoublyLinkedList<int>{}
assert list.is_empty() == true
list.push_back(1)
assert list.is_empty() == false
}
fn test_len() ? {
mut list := DoublyLinkedList<int>{}
assert list.len() == 0
list.push_back(1)
assert list.len() == 1
list.pop_back()?
assert list.len() == 0
}
fn test_first() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
assert list.first()? == 1
list.push_back(2)
assert list.first()? == 1
list = DoublyLinkedList<int>{}
list.first() or { return }
assert false
}
fn test_last() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
assert list.last()? == 1
list.push_back(2)
assert list.last()? == 2
list = DoublyLinkedList<int>{}
list.last() or { return }
assert false
}
fn test_push() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
assert list.last()? == 1
list.push_back(2)
assert list.last()? == 2
list.push_back(3)
assert list.last()? == 3
}
fn test_pop() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
assert list.pop_back()? == 3
list.push_back(4)
assert list.pop_back()? == 4
assert list.pop_back()? == 2
list = DoublyLinkedList<int>{}
list.pop_back() or { return }
assert false
}
fn test_pop_front() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
assert list.pop_front()? == 1
list.push_back(4)
assert list.pop_front()? == 2
assert list.pop_front()? == 3
list = DoublyLinkedList<int>{}
list.pop_front() or { return }
assert false
}
fn test_insert() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
// [1, 2, 3]
list.insert(1, 111)?
// [1, 111, 2, 3]
list.insert(3, 222)?
// [1, 111, 2, 222, 3]
assert list.pop_back()? == 3
assert list.pop_back()? == 222
assert list.pop_front()? == 1
assert list.pop_front()? == 111
}
fn test_push_front() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
list.push_front(111)
assert list.first()? == 111
}
fn test_delete() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(0)
list.push_back(1)
list.push_back(2)
list.delete(1)
assert list.first()? == 0
assert list.last()? == 2
assert list.len() == 2
list.delete(1)
assert list.first()? == 0
assert list.last()? == 0
assert list.len() == 1
list.delete(0)
assert list.len() == 0
}
fn test_iter() ? {
mut list := DoublyLinkedList<int>{}
for i := 0; i < 10; i++ {
list.push_back(i * 10)
}
mut count := 0
for i, v in list {
count += 1
assert int(i * 10) == v
}
assert count == 10
// test it gets reset
count = 0
for i, v in list {
count += 1
assert int(i * 10) == v
}
assert count == 10
}
fn test_index() ? {
mut list := DoublyLinkedList<int>{}
for i := 0; i < 10; i++ {
list.push_back(i * 10)
}
for i := 0; i < 10; i++ {
assert list.index(i * 10)? == i
}
}
fn test_str() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
assert list.str() == '[1, 2, 3]'
}
fn test_array() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
assert list.array() == [1, 2, 3]
}
fn test_string_array() ? {
mut list := DoublyLinkedList<[]string>{}
list.push_back(['a'])
list.push_back(['b'])
list.push_back(['c'])
assert list.array() == [['a'], ['b'], ['c']]
}
fn test_iteration_with_for() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
mut res := []int{}
for x in list {
res << x
}
assert res == [1, 2, 3]
}
fn test_iterator() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
mut iter := list.iterator()
mut res := []int{}
for x in iter {
res << x
}
assert res == [1, 2, 3]
}
fn test_back_iterator() ? {
mut list := DoublyLinkedList<int>{}
list.push_back(1)
list.push_back(2)
list.push_back(3)
mut iter := list.back_iterator()
mut res := []int{}
for x in iter {
res << x
}
assert res == [3, 2, 1]
}