You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package test
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
|
|
"git.wens.org.uk/heapqueue/pkg/queue"
|
|
)
|
|
|
|
func TestQueue(t *testing.T) {
|
|
// building
|
|
input := []queue.QueueObject[int, string]{{Key: 0, Value: "task a"}, {Key: 5, Value: "task b"}}
|
|
q := queue.BuildQueue(input, queue.MAXQUEUE)
|
|
if !queue.IsMaxQueue(q) {
|
|
t.Fatalf("Failed to build max queue. Queue object: %v\n", &q)
|
|
}
|
|
// maximum key
|
|
max, err := queue.Maximum(q)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
if max.Key != 5 || max.Value != "task b" {
|
|
t.Errorf("Unexpected value of %v for max. Expected {5, \"task b\"}\n", max.Key)
|
|
}
|
|
// increasing key to new maximum
|
|
queue.IncreaseKey(q, queue.QueueObject[int, string]{Key: 0, Value: "task a"}, 10)
|
|
max, err = queue.Maximum(q)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
if max.Key != 10 || max.Value != "task a" {
|
|
t.Errorf("Failed to increase key to 10\n")
|
|
}
|
|
// inserting in between
|
|
queue.Insert(q, queue.QueueObject[int, string]{Key: 7, Value: "task c"})
|
|
// extracting maximum
|
|
maxExtracted, err := queue.ExtractMaximum(q)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
if !reflect.DeepEqual(max, maxExtracted) {
|
|
t.Errorf("Extracted maximum not equal to peeked maximum, %v and %v\n", max, maxExtracted)
|
|
}
|
|
// check new maximum is the inserted value
|
|
max, err = queue.ExtractMaximum(q)
|
|
if err != nil {
|
|
t.Errorf(err.Error())
|
|
}
|
|
if max.Key != 7 || max.Value != "task c" {
|
|
t.Errorf("Unexpected maximum after extraction, expected {7 \"task c\"}, got %v\n", max)
|
|
}
|
|
}
|