package slowquery

import (
	"testing"

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

func TestSlowLogsHeap(t *testing.T) {
	h := newSlowLogsHeap("query_time", true, 2)
	h.Push(&SlowLog{QueryTime: 2})
	h.Push(&SlowLog{QueryTime: 1})
	h.Push(&SlowLog{QueryTime: 3})
	r := h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, float64(3), r[0].QueryTime)
	require.Equal(t, float64(2), r[1].QueryTime)

	h = newSlowLogsHeap("query_time", false, 2)
	h.Push(&SlowLog{QueryTime: 2})
	h.Push(&SlowLog{QueryTime: 1})
	h.Push(&SlowLog{QueryTime: 3})
	r = h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, float64(1), r[0].QueryTime)
	require.Equal(t, float64(2), r[1].QueryTime)

	h = newSlowLogsHeap("memory_max", true, 2)
	h.Push(&SlowLog{MemMax: 2})
	h.Push(&SlowLog{MemMax: 1})
	h.Push(&SlowLog{MemMax: 3})
	r = h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, uint64(3), r[0].MemMax)
	require.Equal(t, uint64(2), r[1].MemMax)

	h = newSlowLogsHeap("memory_max", false, 2)
	h.Push(&SlowLog{MemMax: 2})
	h.Push(&SlowLog{MemMax: 1})
	h.Push(&SlowLog{MemMax: 3})
	r = h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, uint64(1), r[0].MemMax)
	require.Equal(t, uint64(2), r[1].MemMax)

	h = newSlowLogsHeap("total_keys", true, 2)
	h.Push(&SlowLog{TotalKeys: 2})
	h.Push(&SlowLog{TotalKeys: 1})
	h.Push(&SlowLog{TotalKeys: 3})
	r = h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, uint64(3), r[0].TotalKeys)
	require.Equal(t, uint64(2), r[1].TotalKeys)

	h = newSlowLogsHeap("total_keys", false, 2)
	h.Push(&SlowLog{TotalKeys: 2})
	h.Push(&SlowLog{TotalKeys: 1})
	h.Push(&SlowLog{TotalKeys: 3})
	r = h.Slice()
	require.Len(t, r, 2)
	require.Equal(t, uint64(1), r[0].TotalKeys)
	require.Equal(t, uint64(2), r[1].TotalKeys)
}
