go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/sdk/collections/batch_iterator_test.go (about) 1 /* 2 3 Copyright (c) 2023 - Present. Will Charczuk. All rights reserved. 4 Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository. 5 6 */ 7 8 package collections 9 10 import ( 11 "fmt" 12 "testing" 13 14 . "go.charczuk.com/sdk/assert" 15 ) 16 17 func Test_BatchIterator(t *testing.T) { 18 bi := &BatchIterator[string]{BatchSize: 100} 19 ItsEqual(t, false, bi.HasNext()) 20 ItsEqual(t, 0, len(bi.Next())) 21 22 bi = &BatchIterator[string]{Items: generateBatchItems(10)} 23 ItsEqual(t, true, bi.HasNext()) 24 ItsEqual(t, 0, len(bi.Next())) 25 26 // handle edge case where somehow the cursor gets set beyond the 27 // last element of the items. 28 bi = &BatchIterator[string]{Items: generateBatchItems(10), Cursor: 15} 29 ItsEqual(t, false, bi.HasNext()) 30 ItsEqual(t, 0, len(bi.Next())) 31 32 bi = &BatchIterator[string]{Items: generateBatchItems(10), BatchSize: 100} 33 ItsEqual(t, true, bi.HasNext()) 34 ItsEqual(t, 10, len(bi.Next())) 35 ItsEqual(t, false, bi.HasNext()) 36 37 bi = &BatchIterator[string]{Items: generateBatchItems(100), BatchSize: 10} 38 for x := 0; x < 10; x++ { 39 ItsEqual(t, true, bi.HasNext()) 40 ItsEqual(t, 10, len(bi.Next()), fmt.Sprintf("failed on pass %d", x)) 41 } 42 ItsEqual(t, false, bi.HasNext()) 43 44 bi = &BatchIterator[string]{Items: generateBatchItems(105), BatchSize: 10} 45 for x := 0; x < 10; x++ { 46 ItsEqual(t, true, bi.HasNext()) 47 ItsEqual(t, 10, len(bi.Next()), fmt.Sprintf("failed on pass %d", x)) 48 } 49 ItsEqual(t, true, bi.HasNext()) 50 ItsEqual(t, 5, len(bi.Next())) 51 ItsEqual(t, false, bi.HasNext()) 52 } 53 54 func generateBatchItems(count int) (output []string) { 55 output = make([]string, count) 56 for x := 0; x < count; x++ { 57 output[x] = fmt.Sprint(x) 58 } 59 return output 60 }