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  }