package main

import (
	"math"
	"testing"
)

func TestWindows(t *testing.T) {
	yes, l, s, e := page(scenario(1000, 20))
	if e != nil || !yes || math.Abs(l-20) > 1e-8 || math.Abs(s-20) > 1e-8 {
		t.Fatalf("%v %v %v %v", yes, l, s, e)
	}
	recovered := scenario(1000, 20)
	for i := 55; i < 60; i++ {
		recovered[i].Bad = 0
	}
	yes, _, _, e = page(recovered)
	if e != nil || yes {
		t.Fatal("recovered service paged")
	}
	spike := scenario(1000, 0)
	spike[59].Bad = 100
	yes, _, _, e = page(spike)
	if e != nil || yes {
		t.Fatal("isolated spike passed long window")
	}
}
func TestInvalid(t *testing.T) {
	for _, x := range [][]minute{nil, {{0, 0, true}}, {{1, 2, true}}, {{1, 0, false}}} {
		if _, e := burn(x, .999); e == nil {
			t.Fatalf("accepted %+v", x)
		}
	}
	if _, e := burn(scenario(1, 0), 1); e == nil {
		t.Fatal("accepted slo=1")
	}
}
