github.com/zhiqiangxu/util@v0.0.0-20230112053021-0a7aee056cd5/rpheap/rank_pairing_heap_test.go (about) 1 package rpheap 2 3 import ( 4 "sort" 5 "testing" 6 7 "gotest.tools/assert" 8 ) 9 10 func TestRPHeap(t *testing.T) { 11 rpheap := &Heap{} 12 numbers := []int{10, 4, 3, 2, 5, 1} 13 for _, number := range numbers { 14 rpheap.Insert(int64(number)) 15 } 16 17 sort.Ints(numbers) 18 19 for _, number := range numbers { 20 m := rpheap.DeleteMin() 21 assert.Assert(t, int64(number) == m, "number:%v m:%v", number, m) 22 } 23 24 assert.Assert(t, rpheap.Size() == 0, "rpheap not empty") 25 26 runTestMeld([]int{2, 8, 5, 7}, []int{4, 9, 6}, t) 27 runTestMeld([]int{4, 9, 6}, []int{2, 8, 5, 7}, t) 28 runTestMeld([]int{2}, []int{4, 9, 6}, t) 29 runTestMeld([]int{2, 8, 5, 7}, []int{4}, t) 30 runTestMeld([]int{2, 8, 5, 7}, []int{}, t) 31 runTestMeld([]int{}, []int{4, 9, 6}, t) 32 33 } 34 35 func runTestMeld(arr1, arr2 []int, t *testing.T) { 36 ans := append(arr1, arr2...) 37 sort.Ints(ans) 38 39 rpheap1 := &Heap{} 40 rpheap2 := &Heap{} 41 for _, number := range arr1 { 42 rpheap1.Insert(int64(number)) 43 } 44 assert.Assert(t, rpheap1.Size() == len(arr1), "rpheap1 size not match") 45 for _, number := range arr2 { 46 rpheap2.Insert(int64(number)) 47 } 48 assert.Assert(t, rpheap2.Size() == len(arr2), "rpheap2 size not match") 49 50 rpheap1.Meld(rpheap2) 51 52 assert.Assert(t, rpheap2.Size() == 0, "rpheap2 not empty") 53 assert.Assert(t, rpheap1.Size() == len(ans), "rpheap1 size not match") 54 for _, number := range ans { 55 m := rpheap1.DeleteMin() 56 assert.Assert(t, int64(number) == m, "number:%v m:%v", number, m) 57 } 58 59 assert.Assert(t, rpheap1.Size() == 0, "rpheap1 not empty") 60 }