Skip to content

[bug] is full? #17

Closed
Closed
@Jcodelove

Description

@Jcodelove

when initialLen equal capacity

t.Run("TestResetQueue", func(t *testing.T) {
		type strInt struct {
			A int
		}
		queue := fifo.NewBlocking([]*strInt{{A: 1}, {A: 2}, {A: 3}, {A: 4}, {A: 5}}, fifo.WithCapacity(5))

		assert.Equal(t, queue.Offer(&strInt{A: 6}), fifo.ErrQueueIsFull)

		_, err := queue.Get()
		assert.Nil(t, err)
		_, err = queue.Get()
		assert.Nil(t, err)

		targets := queue.Clear()
		queue.Reset()
		for _, item := range targets {
			// is full, can't add back
			err = queue.Offer(item)
			assert.Equal(t, err, fifo.ErrQueueIsFull)
		}
	})

Cannot insert new elements after reset
because

// isFull returns true if the queue is full.
func (bq *Blocking[T]) isFull() bool {
	if bq.capacity == nil {
		return false
	}

	return len(bq.elements)-bq.elementsIndex >= *bq.capacity
}

5 - 0 >= 5

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions