focus/list/array_list/array_list_test.go
2019-07-19 17:41:28 +08:00

172 lines
2.6 KiB
Go

package arraylist
import (
"bytes"
"encoding/gob"
"io/ioutil"
"log"
"testing"
"github.com/davecgh/go-spew/spew"
)
func TestPush(t *testing.T) {
l := New()
for i := 0; i < 2; i++ {
l.PushFront(1)
}
var result string
result = spew.Sprint(l.Values())
if result != "[1 1]" {
t.Error(result)
}
for i := 0; i < 2; i++ {
l.PushBack(2)
}
result = spew.Sprint(l.Values())
if result != "[1 1 2 2]" {
t.Error(result)
}
}
func TestGrowth(t *testing.T) {
l := New()
for i := 0; i < 5; i++ {
l.PushFront(1)
}
var result string
result = spew.Sprint(l.Values())
if result != "[1 1 1 1 1]" {
t.Error(result)
}
l = New()
for i := 0; i < 7; i++ {
l.PushBack(1)
}
result = spew.Sprint(l.Values())
if result != "[1 1 1 1 1 1 1]" {
t.Error(result)
}
// for i := 0; i < 2; i++ {
// l.PushBack(2)
// }
// result = spew.Sprint(l.Values())
// if result != "[1 1 2 2]" {
// t.Error(result)
// }
}
func TestPop(t *testing.T) {
l := New()
for i := 0; i < 5; i++ {
l.PushFront(i)
}
for i := 4; i >= 0; i-- {
if v, ok := l.PopFront(); ok {
if v != i {
t.Error("should be ", v)
}
} else {
t.Error("should be ok, value is", v)
}
}
if v, ok := l.PopFront(); ok {
t.Error("should not be ok, v = ", v)
}
for i := 0; i < 5; i++ {
l.PushFront(i)
}
for i := 0; i < 5; i++ {
if v, ok := l.PopBack(); ok {
if v != i {
t.Error("should be ", v)
}
} else {
t.Error("should be ok, value is", v)
}
}
if v, ok := l.PopBack(); ok {
t.Error("should not be ok, v = ", v)
}
}
func TestRemove(t *testing.T) {
l := New()
for i := 0; i < 5; i++ {
l.PushFront(uint(i))
}
var result string
for _, selval := range []uint{4, 3} {
last, _ := l.Index(selval)
if v, isfound := l.Remove(selval); isfound {
if v != last {
t.Error(v, " != ", last)
}
} else {
t.Error("should be found")
}
}
result = spew.Sprint(l.Values())
if result != "[4 3 2]" {
t.Error("should be [4 3 2], value =", result)
}
v, _ := l.Remove(1)
if v != uint(3) {
t.Error(v)
}
v, _ = l.Remove(1)
if v != uint(2) {
t.Error(v)
}
v, _ = l.Remove(1)
if v != nil && l.Size() != 1 {
t.Error(v)
}
v, _ = l.Remove(0)
if v != uint(4) && l.Size() != 0 {
t.Error(v, "size = ", l.Size())
}
}
func loadTestData() []int {
data, err := ioutil.ReadFile("../../l.log")
if err != nil {
log.Println(err)
}
var l []int
decoder := gob.NewDecoder(bytes.NewReader(data))
decoder.Decode(&l)
return l
}
func BenchmarkPush(b *testing.B) {
l := loadTestData()
b.N = len(l)
arr := New()
for i := 0; i < b.N; i++ {
arr.PushBack(l[i])
}
}