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  }