focus/map/linked_hashmap/linked_hashmap_test.go
2019-07-19 19:05:35 +08:00

175 lines
3.0 KiB
Go

package linkedhashmap
import (
"reflect"
"testing"
)
func TestPush(t *testing.T) {
lhm := New()
lhm.PushFront(1, "1")
lhm.PushBack("2", 2)
var values []interface{}
values = lhm.Values()
var testType reflect.Type
if testType = reflect.TypeOf(values[0]); testType.String() != "string" {
t.Error(testType)
}
if testType = reflect.TypeOf(values[1]); testType.String() != "int" {
t.Error(testType)
}
// 1 2
lhm.PushFront(4, "4") // 4 1 2
lhm.PushBack("3", 3) // 4 1 2 3
if lhm.String() != "[4 1 2 3]" {
t.Error(lhm.String())
}
lhm.Put(5, 5)
if lhm.String() != "[4 1 2 3 5]" {
t.Error(lhm.String())
}
}
func TestBase(t *testing.T) {
lhm := New()
for i := 0; i < 10; i++ {
lhm.PushBack(i, i)
}
if lhm.Empty() {
t.Error("why lhm Enpty, check it")
}
if lhm.Size() != 10 {
t.Error("why lhm Size != 10, check it")
}
lhm.Clear()
if !lhm.Empty() {
t.Error("why lhm Clear not Empty, check it")
}
if lhm.Size() != 0 {
t.Error("why lhm Size != 0, check it")
}
}
func TestGet(t *testing.T) {
lhm := New()
for i := 0; i < 10; i++ {
lhm.PushBack(i, i)
}
for i := 0; i < 10; i++ {
lhm.PushBack(i, i)
}
if lhm.Size() != 10 {
t.Error("why lhm Size != 10, check it")
}
for i := 0; i < 10; i++ {
if v, ok := lhm.Get(i); !ok || v != i {
t.Error("ok is ", ok, " get value is ", v)
}
}
}
func TestInsert(t *testing.T) {
lhm := New()
for i := 0; i < 5; i++ {
lhm.Insert(0, i, i)
}
if lhm.String() != "[4 3 2 1 0]" {
t.Error(lhm.String())
}
if !lhm.Insert(2, 5, 5) {
t.Error("Insert 2 5 5 error check it")
}
if lhm.String() != "[4 3 5 2 1 0]" {
t.Error(lhm.String())
}
if !lhm.Insert(lhm.Size(), 6, 6) {
t.Error("Insert Size() error check it")
}
if lhm.String() != "[4 3 5 2 1 0 6]" {
t.Error(lhm.String())
}
}
func TestRemove(t *testing.T) {
lhm := New()
for i := 0; i < 10; i++ {
lhm.PushBack(i, i)
}
var resultStr = "[0 1 2 3 4 5 6 7 8 9]"
for i := 0; i < 10; i++ {
if lhm.String() != resultStr {
t.Error(lhm.String(), resultStr)
}
lhm.Remove(i)
if lhm.Size() != uint(9-i) {
t.Error("why lhm Size != ", uint(9-i), ", check it")
}
resultStr = resultStr[0:1] + resultStr[3:]
}
if lhm.Size() != 0 {
t.Error(lhm.Size())
}
for i := 0; i < 10; i++ {
lhm.PushFront(i, i)
}
for i := 0; i < 10; i++ {
if i >= 5 {
lhm.Remove(i)
}
}
if lhm.String() != "[4 3 2 1 0]" {
t.Error(lhm.String())
}
// RemoveIndex [4 3 2 1 0]
if value, _ := lhm.RemoveIndex(2); value != 2 {
t.Error("[4 3 2 1 0] remove index 2, value is 2, but now is", value)
}
// [4 3 1 0]
if value, _ := lhm.RemoveIndex(2); value != 1 {
t.Error("[4 3 1 0] remove index 2, value is 1, but now is", value)
}
// [4 3 0]
if value, _ := lhm.RemoveIndex(2); value != 0 {
t.Error("[4 3 0] remove index 2, value is 0, but now is", value)
}
// [4 3]
if value, _ := lhm.RemoveIndex(2); value != nil {
t.Error("[4 3] remove index 2, value is nil, but now is", value)
}
// [4 3]
if value, _ := lhm.RemoveIndex(0); value != 4 {
t.Error("[4 3] remove index 0, value is 4, but now is", value)
}
}