79 lines
2.3 KiB
Odin
79 lines
2.3 KiB
Odin
package tests
|
|
|
|
import "core:testing"
|
|
import list "../"
|
|
|
|
Entity :: struct {
|
|
id: int,
|
|
using node: list.IntrusiveListNode,
|
|
position: [2]f32,
|
|
}
|
|
|
|
IntrusiveListTestData :: struct {
|
|
nodes: [3]Entity,
|
|
list: list.IntrusiveList,
|
|
first, second, last: ^list.IntrusiveListNode,
|
|
}
|
|
|
|
intrusive_list_setup_data :: proc(data: ^IntrusiveListTestData) {
|
|
for i in 0..<len(data.nodes) {
|
|
data.nodes[i].id = i
|
|
}
|
|
list.intrusive_list_push_back(&data.list, &data.nodes[0])
|
|
list.intrusive_list_push_back(&data.list, &data.nodes[1])
|
|
list.intrusive_list_push_back(&data.list, &data.nodes[2])
|
|
data.first, data.second, data.last = &data.nodes[0], &data.nodes[1], &data.nodes[2]
|
|
}
|
|
|
|
@test intrusive_list_push_back_loops_forward :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
assert(data.second == data.second)
|
|
}
|
|
|
|
@test intrusive_list_push_back_loops_backward :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
assert(data.second == data.second)
|
|
}
|
|
|
|
@test intrusive_list_pop_back_loops_forward :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
list.intrusive_list_pop_back(&data.list)
|
|
list.intrusive_list_pop_back(&data.list)
|
|
assert(data.list.head.next == data.list.head)
|
|
}
|
|
|
|
@test intrusive_list_pop_back_loops_backward :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
list.intrusive_list_pop_back(&data.list)
|
|
list.intrusive_list_pop_back(&data.list)
|
|
assert(data.list.head.next == data.list.head)
|
|
}
|
|
|
|
@test intrusive_list_remove_links :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
list.intrusive_list_remove(&data.list, data.second)
|
|
assert(data.list.head != nil)
|
|
assert(data.list.head == data.first)
|
|
assert(data.list.head.next == data.last)
|
|
}
|
|
|
|
@test intrusive_list_iterator_next_works :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
it := list.intrusive_list_iterator_head(data.list, Entity, "node")
|
|
entity := list.intrusive_list_iterate_next(&it)
|
|
assert(entity.id == 1)
|
|
}
|
|
|
|
@test intrusive_list_iterator_next_from_node_works :: proc(_: ^testing.T) {
|
|
data: IntrusiveListTestData
|
|
intrusive_list_setup_data(&data)
|
|
it := list.intrusive_list_iterator_from_node(data.second, Entity, "node")
|
|
entity := list.intrusive_list_iterate_next(&it)
|
|
assert(entity.id == 2)
|
|
}
|