]> Sergey Matveev's repositories - btrtrc.git/blobdiff - file_test.go
gorond
[btrtrc.git] / file_test.go
index b66d198529fe46390a83b557c7251a58bf62362c..e0df62b41ade8b9c8bf4a1868b4009c3fe6d3030 100644 (file)
@@ -3,6 +3,7 @@ package torrent
 import (
        "testing"
 
+       "github.com/RoaringBitmap/roaring"
        "github.com/stretchr/testify/assert"
 )
 
@@ -20,3 +21,96 @@ func TestFileExclusivePieces(t *testing.T) {
                assert.EqualValues(t, _case.end, end)
        }
 }
+
+type testFileBytesLeft struct {
+       usualPieceSize  int64
+       firstPieceIndex int
+       endPieceIndex   int
+       fileOffset      int64
+       fileLength      int64
+       completedPieces roaring.Bitmap
+       expected        int64
+       name            string
+}
+
+func (me testFileBytesLeft) Run(t *testing.T) {
+       t.Run(me.name, func(t *testing.T) {
+               assert.EqualValues(t, me.expected, fileBytesLeft(me.usualPieceSize, me.firstPieceIndex, me.endPieceIndex, me.fileOffset, me.fileLength, &me.completedPieces))
+       })
+}
+
+func TestFileBytesLeft(t *testing.T) {
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 1,
+               endPieceIndex:   1,
+               fileOffset:      1,
+               fileLength:      0,
+               expected:        0,
+               name:            "ZeroLengthFile",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  2,
+               firstPieceIndex: 1,
+               endPieceIndex:   2,
+               fileOffset:      1,
+               fileLength:      1,
+               expected:        1,
+               name:            "EndOfSecondPiece",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 0,
+               endPieceIndex:   1,
+               fileOffset:      1,
+               fileLength:      1,
+               expected:        1,
+               name:            "FileInFirstPiece",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 0,
+               endPieceIndex:   1,
+               fileOffset:      1,
+               fileLength:      1,
+               expected:        1,
+               name:            "LandLocked",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 1,
+               endPieceIndex:   3,
+               fileOffset:      4,
+               fileLength:      4,
+               expected:        4,
+               name:            "TwoPieces",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 1,
+               endPieceIndex:   4,
+               fileOffset:      5,
+               fileLength:      7,
+               expected:        7,
+               name:            "ThreePieces",
+       }.Run(t)
+
+       testFileBytesLeft{
+               usualPieceSize:  3,
+               firstPieceIndex: 1,
+               endPieceIndex:   4,
+               fileOffset:      5,
+               fileLength:      7,
+               expected:        0,
+               completedPieces: func() (ret roaring.Bitmap) {
+                       ret.AddRange(0, 5)
+                       return
+               }(),
+               name: "ThreePiecesCompletedAll",
+       }.Run(t)
+}