Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 3 additions & 6 deletions batch.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var Abort = errors.New("done")

// All calls eachFn for all items
// Returns any error from eachFn except for Abort it returns nil.
func All(count, batchSize int, eachFn BatchFunc) error {
func All(count, batchSize int, eachFn BatchFunc) (int, error) {
i := 0
for i < count {
end := i + batchSize - 1
Expand All @@ -22,13 +22,10 @@ func All(count, batchSize int, eachFn BatchFunc) error {
end = count - 1
}
err := eachFn(i, end)
if err == Abort {
return nil
}
if err != nil {
return err
return i, err
}
i = end + 1
}
return nil
return i, nil
}
19 changes: 11 additions & 8 deletions batch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"errors"
"testing"

"github.com/pacedotdev/batch"
"github.com/matryer/is"
"github.com/pacedotdev/batch"
)

func Test(t *testing.T) {
Expand All @@ -15,15 +15,15 @@ func Test(t *testing.T) {
start, end int
}
var ranges []r
err := batch.All(100, 10, func(start, end int) error {
n, err := batch.All(100, 10, func(start, end int) error {
ranges = append(ranges, r{
start: start,
end: end,
})
return nil
})
is.NoErr(err)

is.Equal(n, 100)
is.Equal(len(ranges), 10)
is.Equal(ranges[0].start, 0)
is.Equal(ranges[0].end, 9)
Expand Down Expand Up @@ -54,14 +54,15 @@ func TestHalfPages(t *testing.T) {
start, end int
}
var ranges []r
err := batch.All(15, 10, func(start, end int) error {
n, err := batch.All(15, 10, func(start, end int) error {
ranges = append(ranges, r{
start: start,
end: end,
})
return nil
})
is.NoErr(err)
is.Equal(n, 15)
is.Equal(len(ranges), 2)
is.Equal(ranges[0].start, 0)
is.Equal(ranges[0].end, 9)
Expand All @@ -77,14 +78,15 @@ func TestTinyPages(t *testing.T) {
start, end int
}
var ranges []r
err := batch.All(1, 10, func(start, end int) error {
n, err := batch.All(1, 10, func(start, end int) error {
ranges = append(ranges, r{
start: start,
end: end,
})
return nil
})
is.NoErr(err)
is.Equal(n, 1)
is.Equal(len(ranges), 1)
is.Equal(ranges[0].start, 0)
is.Equal(ranges[0].end, 0)
Expand All @@ -97,14 +99,15 @@ func TestAbort(t *testing.T) {
start, end int
}
var ranges []r
err := batch.All(20, 10, func(start, end int) error {
n, err := batch.All(20, 10, func(start, end int) error {
ranges = append(ranges, r{
start: start,
end: end,
})
return batch.Abort
})
is.NoErr(err)
is.Equal(err, batch.Abort)
is.Equal(n, 0)
is.Equal(len(ranges), 1)
is.Equal(ranges[0].start, 0)
is.Equal(ranges[0].end, 9)
Expand All @@ -118,7 +121,7 @@ func TestErr(t *testing.T) {
}
var ranges []r
errTest := errors.New("something went wrong")
err := batch.All(20, 10, func(start, end int) error {
_, err := batch.All(20, 10, func(start, end int) error {
ranges = append(ranges, r{
start: start,
end: end,
Expand Down