Skip to content

Commit 81ee4dc

Browse files
committed
HD-4220: linearize and reconstruct testing
1 parent 12234f8 commit 81ee4dc

File tree

2 files changed

+88
-72
lines changed

2 files changed

+88
-72
lines changed

backend_test.go

Lines changed: 87 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -800,95 +800,111 @@ func TestEncodeM(t *testing.T) {
800800
_ = backend.Close()
801801
}
802802

803-
func TestTwoLinearizeMatrix(t *testing.T) {
803+
func TestLinearizeMatrixAndReconstruct(t *testing.T) {
804804
backend, err := InitBackend(Params{Name: "isa_l_rs_vand", K: 2, M: 1, W: 8, HD: 5})
805805
require.NoError(t, err)
806806
defer func() {
807807
_ = backend.Close()
808808
}()
809-
currentChunkSize := 512
810-
dataSize := currentChunkSize*2 + 10
811-
startIncl := dataSize - 3
812-
endIncl := dataSize - 1
813809

814-
data := make([]byte, dataSize)
815-
for i := range dataSize {
816-
data[i] = byte('A' + i%26)
810+
testParams := []struct {
811+
chunkSize int
812+
dataSize int
813+
startIncl int
814+
endIncl int
815+
useOldFormat bool
816+
}{
817+
{
818+
chunkSize: 512,
819+
dataSize: 512*2 + 10,
820+
startIncl: 512*2 - 3,
821+
endIncl: 512*2 - 1,
822+
},
823+
{
824+
chunkSize: DefaultChunkSize,
825+
dataSize: 105623,
826+
startIncl: 59441,
827+
endIncl: 64149,
828+
},
829+
{
830+
chunkSize: 512,
831+
dataSize: 512*2 + 10,
832+
startIncl: 512*2 - 3,
833+
endIncl: 512*2 - 1,
834+
useOldFormat: true,
835+
},
836+
{
837+
chunkSize: DefaultChunkSize,
838+
dataSize: 105623,
839+
startIncl: 59441,
840+
endIncl: 64149,
841+
useOldFormat: true,
842+
},
817843
}
818-
bm := NewBufferMatrix(currentChunkSize, len(data), backend.K)
819-
_, err = io.Copy(bm, bytes.NewReader(data))
820-
require.NoError(t, err)
821-
bm.Finish()
822-
encoded, err := backend.EncodeMatrixWithBufferMatrix(bm, currentChunkSize)
823-
require.NoError(t, err)
824-
defer encoded.Free()
825-
826-
rangeM := backend.GetRangeMatrix(startIncl, endIncl, currentChunkSize, len(encoded.Data[0]))
827-
require.NotNil(t, rangeM)
828844

829-
/* Decode the matrix as if it was requested and
830-
checks that the result matches the payload on the requested range. */
831-
frags := make([][]byte, 0)
832-
for i := 0; i < rangeM.FragCount; i++ {
833-
fragIdx := (rangeM.FragFirstIncl + i) % backend.K
834-
buffer := encoded.Data[fragIdx][rangeM.InFragRangeStartIncl:rangeM.InFragRangeEndExcl]
835-
frags = append(frags, buffer)
836-
}
845+
for _, param := range testParams {
846+
p := param
847+
testName := fmt.Sprintf("TestLinearizeMatrixAndReconstruct(oldformat=%v)-%d-%d-%d-%d",
848+
p.useOldFormat, p.chunkSize, p.dataSize, p.startIncl, p.endIncl,
849+
)
850+
t.Run(testName, func(t *testing.T) {
851+
currentChunkSize := p.chunkSize
852+
dataSize := p.dataSize
853+
startIncl := p.startIncl
854+
endIncl := p.endIncl
855+
856+
data := make([]byte, dataSize)
857+
for i := range dataSize {
858+
data[i] = byte('A' + i%26)
859+
}
860+
bm := NewBufferMatrix(currentChunkSize, len(data), backend.K)
861+
if p.useOldFormat {
862+
bm.UseOldFormat()
863+
}
864+
_, err = io.Copy(bm, bytes.NewReader(data))
865+
require.NoError(t, err)
866+
bm.Finish()
867+
encoded, err := backend.EncodeMatrixWithBufferMatrix(bm, currentChunkSize)
868+
require.NoError(t, err)
869+
defer encoded.Free()
837870

838-
decoded, err := backend.LinearizeMatrix(frags, currentChunkSize)
839-
require.NoError(t, err)
840-
defer decoded.Free()
871+
rangeM := backend.GetRangeMatrix(startIncl, endIncl, currentChunkSize, len(encoded.Data[0]))
872+
require.NotNil(t, rangeM)
841873

842-
expected := data[startIncl:endIncl]
874+
/* Decode the matrix as if it was requested and
875+
checks that the result matches the payload on the requested range. */
876+
frags := make([][]byte, 0)
877+
for i := 0; i < rangeM.FragCount; i++ {
878+
fragIdx := (rangeM.FragFirstIncl + i) % backend.K
879+
buffer := encoded.Data[fragIdx][rangeM.InFragRangeStartIncl:rangeM.InFragRangeEndExcl]
880+
frags = append(frags, buffer)
881+
}
843882

844-
linearizedRangeEndExcl := rangeM.LinearizedRangeStartIncl + (endIncl - startIncl)
845-
found := decoded.Data[rangeM.LinearizedRangeStartIncl:linearizedRangeEndExcl]
883+
decoded, err := backend.LinearizeMatrix(frags, currentChunkSize)
884+
require.NoError(t, err)
885+
defer decoded.Free()
846886

847-
require.True(t, bytes.Equal(expected, found))
848-
}
887+
expected := data[startIncl:endIncl]
849888

850-
func TestOneLinearizeMatrix(t *testing.T) {
851-
backend, err := InitBackend(Params{Name: "isa_l_rs_vand", K: 4, M: 2, W: 8, HD: 5})
852-
require.NoError(t, err)
853-
defer func() {
854-
_ = backend.Close()
855-
}()
856-
dataSize := 105623
857-
startIncl := 59441
858-
endIncl := 64149
859-
data := make([]byte, dataSize)
860-
for i := range dataSize {
861-
data[i] = byte('A' + i%26)
862-
}
863-
bm := NewBufferMatrix(DefaultChunkSize, len(data), backend.K)
864-
_, err = io.Copy(bm, bytes.NewReader(data))
865-
require.NoError(t, err)
866-
bm.Finish()
867-
encoded, err := backend.EncodeMatrixWithBufferMatrix(bm, DefaultChunkSize)
868-
require.NoError(t, err)
869-
defer encoded.Free()
889+
linearizedRangeEndExcl := rangeM.LinearizedRangeStartIncl + (endIncl - startIncl)
890+
found := decoded.Data[rangeM.LinearizedRangeStartIncl:linearizedRangeEndExcl]
870891

871-
rangeM := backend.GetRangeMatrix(startIncl, endIncl, DefaultChunkSize, len(encoded.Data[0]))
872-
require.NotNil(t, rangeM)
892+
require.True(t, bytes.Equal(expected, found))
873893

874-
/* Decode the matrix as if it was requested and
875-
checks that the result matches the payload on the requested range. */
876-
frags := make([][]byte, 0)
877-
for i := 0; i < rangeM.FragCount; i++ {
878-
fragIdx := (rangeM.FragFirstIncl + i) % backend.K
879-
buffer := encoded.Data[fragIdx][rangeM.InFragRangeStartIncl:rangeM.InFragRangeEndExcl]
880-
frags = append(frags, buffer)
881-
}
894+
frags2 := make([][]byte, 0)
895+
for i := 0; i < backend.K+backend.M; i++ {
896+
frags2 = append(frags2, encoded.Data[i][rangeM.InFragRangeStartIncl:rangeM.InFragRangeEndExcl])
897+
}
882898

883-
decoded, err := backend.LinearizeMatrix(frags, DefaultChunkSize)
884-
require.NoError(t, err)
885-
defer decoded.Free()
899+
// now do the same test, but this time, insted of linearizing, we are going to reconstruct the stripes
900+
reconstructed, err := backend.ReconstructMatrix(frags2[1:], 0, currentChunkSize)
886901

887-
expected := data[startIncl : endIncl+1]
902+
require.NoError(t, err)
903+
defer reconstructed.Free()
888904

889-
linearizedRangeEndExcl := rangeM.LinearizedRangeStartIncl + (endIncl - startIncl) + 1
890-
found := decoded.Data[rangeM.LinearizedRangeStartIncl:linearizedRangeEndExcl]
891-
require.True(t, bytes.Equal(expected, found))
905+
require.True(t, bytes.Equal(frags2[0], reconstructed.Data))
906+
})
907+
}
892908
}
893909

894910
func TestLinearizeMatrix(t *testing.T) {

buffer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ func (b *BufferMatrix) UseNewFormat() {
122122
b.newStyle = true
123123
}
124124

125-
func (b *BufferMatrix) UseOldormat() {
125+
func (b *BufferMatrix) UseOldFormat() {
126126
if b.curBlock != 0 || b.leftInBlock != -1 || b.finished {
127127
panic("UseNewOffset must be called before any Write")
128128
}

0 commit comments

Comments
 (0)