|
|
package page_writer
import ( "github.com/stretchr/testify/assert" "os" "testing" )
func TestChunkedFileWriter_toActualOffset(t *testing.T) { cw := NewChunkedFileWriter("", 16)
writeToFile(cw, 50, 60) writeToFile(cw, 60, 64)
writeToFile(cw, 32, 40) writeToFile(cw, 42, 48)
writeToFile(cw, 48, 50)
assert.Equal(t, 1, cw.chunkUsages[0].size(), "fully covered") assert.Equal(t, 2, cw.chunkUsages[1].size(), "2 intervals")
}
func writeToFile(cw *ChunkedFileWriter, startOffset int64, stopOffset int64) {
_, chunkUsage := cw.toActualWriteOffset(startOffset)
// skip doing actual writing
innerOffset := startOffset % cw.ChunkSize chunkUsage.MarkWritten(innerOffset, innerOffset+stopOffset-startOffset)
}
func TestWriteChunkedFile(t *testing.T) { x := NewChunkedFileWriter(os.TempDir(), 20) defer x.Reset() y := NewChunkedFileWriter(os.TempDir(), 12) defer y.Reset()
batchSize := 4 buf := make([]byte, batchSize) for i := 0; i < 256; i++ { for x := 0; x < batchSize; x++ { buf[x] = byte(i) } x.WriteAt(buf, int64(i*batchSize)) y.WriteAt(buf, int64((255-i)*batchSize)) }
a := make([]byte, 1) b := make([]byte, 1) for i := 0; i < 256*batchSize; i++ { x.ReadDataAt(a, int64(i)) y.ReadDataAt(b, int64(256*batchSize-1-i)) assert.Equal(t, a[0], b[0], "same read") }
}
|