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

69 lines
1.2 KiB
V

module datatypes
fn test_min_heap() {
mut heap := MinHeap[int]{}
heap.insert(2)
heap.insert(0)
heap.insert(8)
heap.insert(4)
heap.insert(1)
assert heap.pop()! == 0
assert heap.pop()! == 1
assert heap.pop()! == 2
assert heap.pop()! == 4
assert heap.pop()! == 8
if _ := heap.pop() {
panic('expected none')
}
}
struct Item {
data string
priority int
}
fn (lhs Item) < (rhs Item) bool {
return rhs.priority < lhs.priority
}
fn test_min_heap_custom() {
mut heap := MinHeap[Item]{}
heap.insert(Item{'buz', 10})
heap.insert(Item{'qux', 0})
heap.insert(Item{'baz', 50})
heap.insert(Item{'foo', 100})
heap.insert(Item{'bar', 80})
assert heap.pop()!.data == 'foo'
assert heap.pop()!.data == 'bar'
assert heap.pop()!.data == 'baz'
assert heap.pop()!.data == 'buz'
assert heap.pop()!.data == 'qux'
if _ := heap.pop() {
panic('expected none')
}
}
fn test_heap_len() {
mut heap := MinHeap[int]{}
heap.insert(2)
assert heap.len() == 1
heap.insert(0)
heap.insert(8)
heap.insert(4)
assert heap.len() == 4
heap.insert(1)
assert heap.len() == 5
heap.pop()!
heap.pop()!
heap.pop()!
assert heap.len() == 2
heap.pop()!
heap.pop()!
assert heap.len() == 0
heap.pop() or {}
assert heap.len() == 0
}