package cat

import "testing"

func TestNeedRecentre(t *testing.T) {
	pan := panView{centre: 14.100, width: 0.200}
	// A spot the display is already showing comfortably: leave the window alone,
	// which is the whole point of the option being off.
	if needRecentre(pan, 14.110, 0.200, false) {
		t.Fatal("moved a display that was already on the spot")
	}
	// Narrowing for a CW spot 40 kHz away: 25 kHz around the old centre would not
	// reach it, so the centre must follow.
	if !needRecentre(pan, 14.060, 0.025, false) {
		t.Fatal("spot would have been left outside the new window")
	}
	// Near the very edge of the new window — visible in the arithmetic, useless
	// in practice.
	if !needRecentre(pan, 14.199, 0.200, false) {
		t.Fatal("spot pinned to the edge counts as outside")
	}
	// The operator asked for it.
	if !needRecentre(pan, 14.110, 0.200, true) {
		t.Fatal("forced centring ignored")
	}
	// No pan status yet: assume the display is elsewhere.
	if !needRecentre(panView{}, 14.110, 0.200, false) {
		t.Fatal("unknown centre must re-centre")
	}
	// Nothing to centre on.
	if needRecentre(pan, 0, 0.200, true) {
		t.Fatal("centred on nothing")
	}
}
