@@ -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
894910func TestLinearizeMatrix (t * testing.T ) {
0 commit comments