瀏覽代碼

Add the rest of File tests

Vadim Markovtsev 7 年之前
父節點
當前提交
5d96c8a495
共有 2 個文件被更改,包括 65 次插入3 次删除
  1. 3 3
      file.go
  2. 62 0
      file_test.go

+ 3 - 3
file.go

@@ -160,13 +160,13 @@ func (file *File) Update(time int, pos int, ins_length int, del_length int) {
 		return
 	}
 	tree := file.tree
+	if tree.Len() < 2 && tree.Min().Item().Key != 0 {
+		panic("invalid tree state")
+	}
 	if pos > tree.Max().Item().Key {
 		panic(fmt.Sprintf("attempt to insert after the end of the file: %d < %d",
 			tree.Max().Item().Key, pos))
 	}
-	if tree.Len() < 2 && tree.Min().Item().Key != 0 {
-		panic("invalid tree state")
-	}
 	iter := tree.FindLE(pos)
 	origin := *iter.Item()
 	file.updateTime(time, time, ins_length)

+ 62 - 0
file_test.go

@@ -4,6 +4,7 @@ import (
 	"testing"
 
 	"github.com/stretchr/testify/assert"
+	"gopkg.in/src-d/hercules.v2/rbtree"
 )
 
 func updateStatusFile(
@@ -367,3 +368,64 @@ func TestBug5File(t *testing.T) {
 	dump = file.Dump()
 	assert.Equal(t, "0 0\n14 157\n16 -1\n", dump)
 }
+
+func TestMinMaxAbs64Funcs(t *testing.T) {
+	var a int64 = 1
+	var b int64 = -1
+	assert.Equal(t, min64(a, b), b)
+	assert.Equal(t, max64(a, b), a)
+	assert.Equal(t, min64(b, a), b)
+	assert.Equal(t, max64(b, a), a)
+	assert.Equal(t, abs64(a), a)
+	assert.Equal(t, abs64(b), a)
+}
+
+func TestNewFileFromTreeInvalidSize(t *testing.T) {
+	keys := [...]int{1, 2, 3}
+	vals := [...]int{4, 5}
+	assert.Panics(t, func() {NewFileFromTree(keys[:], vals[:])})
+}
+
+func TestUpdatePanic(t *testing.T) {
+  keys := [...]int{0}
+	vals := [...]int{-1}
+	file := NewFileFromTree(keys[:], vals[:])
+	file.tree.DeleteWithKey(0)
+	file.tree.Insert(rbtree.Item{-1, -1})
+	var paniced interface{}
+	func() {
+		defer func() {
+      paniced = recover()
+    }()
+		file.Update(1, 0, 1, 0)
+	}()
+  assert.Contains(t, paniced, "invalid tree state")
+}
+
+func TestFileStatus(t *testing.T) {
+	f, _ := fixtureFile()
+	assert.Panics(t, func() {f.Status(1)})
+	assert.NotNil(t, f.Status(0))
+}
+
+func TestFileValidate(t *testing.T) {
+	keys := [...]int{0}
+	vals := [...]int{-1}
+	file := NewFileFromTree(keys[:], vals[:])
+	file.tree.DeleteWithKey(0)
+	file.tree.Insert(rbtree.Item{-1, -1})
+	assert.Panics(t, func() {file.Validate()})
+	file.tree.DeleteWithKey(-1)
+	file.tree.Insert(rbtree.Item{0, -1})
+	file.Validate()
+	file.tree.DeleteWithKey(0)
+	file.tree.Insert(rbtree.Item{0, 0})
+	assert.Panics(t, func() {file.Validate()})
+	file.tree.DeleteWithKey(0)
+	file.tree.Insert(rbtree.Item{0, 1})
+	file.tree.Insert(rbtree.Item{1, 1})
+	file.tree.Insert(rbtree.Item{2, -1})
+	file.Validate()
+	file.tree.FindGE(2).Item().Key = 1
+	assert.Panics(t, func() {file.Validate()})
+}