// Copyright 2020 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package source

import (
	"testing"
)

func TestDeepCompletionIsHighScore(t *testing.T) {
	// Test that deepCompletionState.isHighScore properly tracks the top
	// N=MaxDeepCompletions scores.

	var s deepCompletionState

	if !s.isHighScore(1) {
		// No other scores yet, anything is a winner.
		t.Error("1 should be high score")
	}

	// Fill up with higher scores.
	for i := 0; i < MaxDeepCompletions; i++ {
		if !s.isHighScore(10) {
			t.Error("10 should be high score")
		}
	}

	// High scores should be filled with 10s so 2 is not a high score.
	if s.isHighScore(2) {
		t.Error("2 shouldn't be high score")
	}
}
