package cuckoo

import (
	"math"
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestMaxEvictions(t *testing.T) {
	assert := assert.New(t)

	for i := 16; i < 116; i++ {
		table := New[int, bool](Capacity(i / 2))
		expectedEvictions := 3 * math.Floor(math.Log2(float64(i)))

		assert.Equal(table.maxEvictions(), int(expectedEvictions))
	}
}

func TestLoad(t *testing.T) {
	assert := assert.New(t)
	table := New[int, bool](Capacity(8))

	for i := range 16 {
		err := table.Put(i, true)
		assert.NoError(err)
		assert.Equal(float64(table.Size())/float64(table.TotalCapacity()), table.load())
	}
}
