Skip to content

Commit

Permalink
tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kelindar committed Jul 13, 2021
1 parent db6af1c commit cfcfc70
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 81 deletions.
68 changes: 0 additions & 68 deletions commit/buffer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ package commit

import (
"testing"
"time"
"unsafe"

"github.com/stretchr/testify/assert"
Expand Down Expand Up @@ -157,70 +156,3 @@ func TestReadWrite(t *testing.T) {
assert.Equal(t, 12.34, r.Number())
assert.False(t, r.Next())
}

func TestWriteAny(t *testing.T) {
buf := NewBuffer(0)
buf.PutAny(Put, 10, int16(100))
buf.PutAny(Put, 20, int32(200))
buf.PutAny(Put, 30, int64(300))
buf.PutAny(Put, 40, uint16(400))
buf.PutAny(Put, 50, uint32(500))
buf.PutAny(Put, 60, uint64(600))
buf.PutAny(Put, 70, float32(700))
buf.PutAny(Put, 80, float64(800))
buf.PutAny(Put, 90, "900")
buf.PutAny(Put, 100, []byte("binary"))
buf.PutAny(Put, 110, true)
buf.PutAny(Put, 120, int8(100))
buf.PutAny(Put, 130, uint8(100))
buf.PutAny(Put, 140, int(100))
buf.PutAny(Put, 150, uint(100))

// Should only have 1 chunk
assert.False(t, buf.IsEmpty())
assert.Equal(t, 1, len(buf.chunks))
buf.RangeChunks(func(chunk uint32) {
assert.Equal(t, uint32(0), chunk)
})

r := NewReader()
r.Seek(buf)
assert.True(t, r.Next())
assert.Equal(t, int16(100), r.Int16())
assert.True(t, r.Next())
assert.Equal(t, int32(200), r.Int32())
assert.True(t, r.Next())
assert.Equal(t, int64(300), r.Int64())
assert.True(t, r.Next())
assert.Equal(t, uint16(400), r.Uint16())
assert.True(t, r.Next())
assert.Equal(t, uint32(500), r.Uint32())
assert.True(t, r.Next())
assert.Equal(t, uint64(600), r.Uint64())
assert.True(t, r.Next())
assert.Equal(t, float32(700), r.Float32())
assert.True(t, r.Next())
assert.Equal(t, float64(800), r.Float64())
assert.True(t, r.Next())
assert.Equal(t, "900", r.String())
assert.True(t, r.Next())
assert.Equal(t, "binary", string(r.Bytes()))
assert.True(t, r.Next())
assert.Equal(t, true, r.Bool())
assert.True(t, r.Next())
assert.Equal(t, int16(100), r.Int16())
assert.True(t, r.Next())
assert.Equal(t, uint16(100), r.Uint16())
assert.True(t, r.Next())
assert.Equal(t, int(100), r.Int())
assert.True(t, r.Next())
assert.Equal(t, uint(100), r.Uint())
assert.False(t, r.Next())
}

func TestWriteUnsupported(t *testing.T) {
assert.Panics(t, func() {
buf := NewBuffer(0)
buf.PutAny(Put, 10, time.Time{})
})
}
15 changes: 15 additions & 0 deletions commit/commit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,36 @@ func TestCommits(t *testing.T) {
Type: Delete,
Deletes: bitmap.Bitmap{0xff},
}

commit2 := Commit{
Type: Store,
Updates: []*Buffer{{
buffer: []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f},
chunks: []header{{
Chunk: 0,
}},
}},
}

commit3 := Commit{
Type: Insert,
Inserts: bitmap.Bitmap{0xaa},
}

// Assert types
assert.Equal(t, Delete, commit1.Type)
assert.Equal(t, Store, commit2.Type)
assert.Equal(t, Insert, commit3.Type)

// Clone and assert
clone1 := commit1.Clone()
clone2 := commit2.Clone()
clone3 := commit3.Clone()
assert.Equal(t, commit1, clone1, "clone1")
assert.Equal(t, commit2, clone2, "clone2")
assert.Equal(t, commit3, clone3, "clone3")
assert.NotEqual(t, unsafe.Pointer(&commit1.Deletes), unsafe.Pointer(&clone1.Deletes))
assert.NotEqual(t, unsafe.Pointer(&commit2.Updates), unsafe.Pointer(&clone2.Updates))
assert.NotEqual(t, unsafe.Pointer(&commit3.Inserts), unsafe.Pointer(&clone3.Inserts))
}

Expand Down
14 changes: 1 addition & 13 deletions commit/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,23 +187,11 @@ func (r *Reader) SwapNumber(v interface{}) {
binary.BigEndian.PutUint64(r.buffer[r.i0:r.i1], math.Float64bits(v.(float64)))
}

// SwapString swaps a string value with a new one.
func (r *Reader) SwapString(v string) {
b := *(*[]byte)(unsafe.Pointer(&v))
r.SwapBytes(b)
}

// SwapBytes swaps a binary value with a new one.
func (r *Reader) SwapBytes(b []byte) {
copy(r.buffer[r.i0:r.i1], b)
}

// SwapBool swaps a boolean value with a new one.
func (r *Reader) SwapBool(b bool) {
r.buffer[r.i0] = 0
if b {
r.buffer[r.i0] = 1
} else {
r.buffer[r.i0] = 0
}
}

Expand Down
122 changes: 122 additions & 0 deletions commit/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package commit
import (
"math/rand"
"testing"
"time"

"github.com/stretchr/testify/assert"
)
Expand Down Expand Up @@ -72,3 +73,124 @@ func TestRange(t *testing.T) {
})
}
}

func TestReadSwap(t *testing.T) {
buf := NewBuffer(0)
buf.PutAny(Put, 10, int16(100))
buf.PutAny(Put, 20, int32(200))
buf.PutAny(Put, 30, int64(300))
buf.PutAny(Put, 40, uint16(400))
buf.PutAny(Put, 50, uint32(500))
buf.PutAny(Put, 60, uint64(600))
buf.PutAny(Put, 70, float32(700))
buf.PutAny(Put, 80, float64(800))
buf.PutAny(Put, 90, "900")
buf.PutAny(Put, 100, []byte("binary"))
buf.PutAny(Put, 110, true)
buf.PutAny(Put, 120, int8(100))
buf.PutAny(Put, 130, uint8(100))
buf.PutAny(Put, 140, int(100))
buf.PutAny(Put, 150, uint(100))
buf.PutAny(Put, 160, float64(100))

// Should only have 1 chunk
assert.False(t, buf.IsEmpty())
assert.Equal(t, 1, len(buf.chunks))
buf.RangeChunks(func(chunk uint32) {
assert.Equal(t, uint32(0), chunk)
})

r := NewReader()
r.Seek(buf)
assert.True(t, r.Next())
assert.Equal(t, int16(100), r.Int16())
assert.True(t, r.Next())
assert.Equal(t, int32(200), r.Int32())
assert.True(t, r.Next())
assert.Equal(t, int64(300), r.Int64())
assert.True(t, r.Next())
assert.Equal(t, uint16(400), r.Uint16())
assert.True(t, r.Next())
assert.Equal(t, uint32(500), r.Uint32())
assert.True(t, r.Next())
assert.Equal(t, uint64(600), r.Uint64())
assert.True(t, r.Next())
assert.Equal(t, float32(700), r.Float32())
assert.True(t, r.Next())
assert.Equal(t, float64(800), r.Float64())
assert.True(t, r.Next())
assert.Equal(t, "900", r.String())
assert.True(t, r.Next())
assert.Equal(t, "binary", string(r.Bytes()))
assert.True(t, r.Next())
assert.Equal(t, true, r.Bool())
assert.True(t, r.Next())
assert.Equal(t, int16(100), r.Int16())
assert.True(t, r.Next())
assert.Equal(t, uint16(100), r.Uint16())
assert.True(t, r.Next())
assert.Equal(t, int(100), r.Int())
assert.True(t, r.Next())
assert.Equal(t, uint(100), r.Uint())

// Rewind back and swap values
r.Rewind()
assert.True(t, r.Next())
r.SwapInt16(99)
assert.Equal(t, int16(99), r.Int16())
assert.True(t, r.Next())
r.SwapInt32(199)
assert.Equal(t, int32(199), r.Int32())
assert.True(t, r.Next())
r.SwapInt64(299)
assert.Equal(t, int64(299), r.Int64())
assert.True(t, r.Next())
r.SwapUint16(399)
assert.Equal(t, uint16(399), r.Uint16())
assert.True(t, r.Next())
r.SwapUint32(499)
assert.Equal(t, uint32(499), r.Uint32())
assert.True(t, r.Next())
r.SwapUint64(599)
assert.Equal(t, uint64(599), r.Uint64())
assert.True(t, r.Next())
r.SwapFloat32(699)
assert.Equal(t, float32(699), r.Float32())
assert.True(t, r.Next())
r.SwapFloat64(799)
assert.Equal(t, float64(799), r.Float64())
assert.True(t, r.Next())
assert.True(t, r.Next())
assert.True(t, r.Next())
r.SwapBool(true)
assert.Equal(t, true, r.Bool())
assert.True(t, r.Next())
assert.True(t, r.Next())
assert.True(t, r.Next())
r.SwapInt(300)
assert.Equal(t, int(300), r.Int())
assert.True(t, r.Next())
r.SwapUint(400)
assert.Equal(t, uint(400), r.Uint())
assert.True(t, r.Next())
r.SwapNumber(float64(800))
assert.Equal(t, float64(800), r.Float64())
}

func TestWriteUnsupported(t *testing.T) {
assert.Panics(t, func() {
buf := NewBuffer(0)
buf.PutAny(Put, 10, time.Time{})
})
}

func TestReaderIface(t *testing.T) {
buf := NewBuffer(0)
buf.PutFloat64(Put, 777, float64(1))

r := NewReader()
r.Seek(buf)
assert.True(t, r.Next())
assert.Equal(t, float64(1), r.Float())
assert.Equal(t, uint32(777), r.Index())
}

0 comments on commit cfcfc70

Please sign in to comment.