X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=file_test.go;h=e0df62b41ade8b9c8bf4a1868b4009c3fe6d3030;hb=c28f3014fff23e0d14c4eaf962fcb0ce9d48cb8f;hp=b66d198529fe46390a83b557c7251a58bf62362c;hpb=63c73e18b3b3ed438fea5666192cff682f4377bc;p=btrtrc.git diff --git a/file_test.go b/file_test.go index b66d1985..e0df62b4 100644 --- a/file_test.go +++ b/file_test.go @@ -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) +}