From 2708c48e5f800226f121ab4feedc61e2a32ee126 Mon Sep 17 00:00:00 2001 From: Ali Najafizadeh Date: Thu, 13 Feb 2020 15:46:44 -0500 Subject: [PATCH 1/2] return Abort error to caller --- batch.go | 3 --- batch_test.go | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/batch.go b/batch.go index 14d70fc..f26d481 100644 --- a/batch.go +++ b/batch.go @@ -22,9 +22,6 @@ 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 } diff --git a/batch_test.go b/batch_test.go index fe6d446..b40396d 100644 --- a/batch_test.go +++ b/batch_test.go @@ -4,8 +4,8 @@ import ( "errors" "testing" - "github.com/pacedotdev/batch" "github.com/matryer/is" + "github.com/pacedotdev/batch" ) func Test(t *testing.T) { @@ -104,7 +104,7 @@ func TestAbort(t *testing.T) { }) return batch.Abort }) - is.NoErr(err) + is.Equal(err, batch.Abort) is.Equal(len(ranges), 1) is.Equal(ranges[0].start, 0) is.Equal(ranges[0].end, 9) From 782d77871c22658936cedb2ce0c623cbee9beafd Mon Sep 17 00:00:00 2001 From: Ali Najafizadeh Date: Thu, 13 Feb 2020 15:51:46 -0500 Subject: [PATCH 2/2] Add a functionality to return number of processed items --- batch.go | 6 +++--- batch_test.go | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/batch.go b/batch.go index f26d481..d3ce61b 100644 --- a/batch.go +++ b/batch.go @@ -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 @@ -23,9 +23,9 @@ func All(count, batchSize int, eachFn BatchFunc) error { } err := eachFn(i, end) if err != nil { - return err + return i, err } i = end + 1 } - return nil + return i, nil } diff --git a/batch_test.go b/batch_test.go index b40396d..0cb5651 100644 --- a/batch_test.go +++ b/batch_test.go @@ -15,7 +15,7 @@ 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, @@ -23,7 +23,7 @@ func Test(t *testing.T) { 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) @@ -54,7 +54,7 @@ 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, @@ -62,6 +62,7 @@ func TestHalfPages(t *testing.T) { 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) @@ -77,7 +78,7 @@ 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, @@ -85,6 +86,7 @@ func TestTinyPages(t *testing.T) { 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) @@ -97,7 +99,7 @@ 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, @@ -105,6 +107,7 @@ func TestAbort(t *testing.T) { return batch.Abort }) 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) @@ -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,