package main

import (
	"errors"
	"math/big"
	"testing"
	"time"
)

func TestCountsAndNoData(t *testing.T) {
	if _, err := SLI(0, 0); !errors.Is(err, ErrNoData) {
		t.Fatal(err)
	}
	for _, p := range [][2]int64{{2, 1}, {-1, 10}, {1, 0}} {
		if _, err := SLI(p[0], p[1]); err == nil {
			t.Fatal(p)
		}
	}
}
func TestExactBudgetAndExhaustion(t *testing.T) {
	a, r, b, err := Budget(998000, 1000000, big.NewRat(999, 1000))
	if err != nil || a.Cmp(big.NewRat(1000, 1)) != 0 || r.Cmp(big.NewRat(-1000, 1)) != 0 || b.Cmp(big.NewRat(2, 1)) != 0 {
		t.Fatal(a, r, b, err)
	}
	if _, _, _, err = Budget(1, 1, big.NewRat(1, 1)); err == nil {
		t.Fatal("100 percent has no finite burn denominator")
	}
}
func TestTimeConversion(t *testing.T) {
	d, err := Downtime(365*24*time.Hour, 5)
	if err != nil || d != 315360*time.Millisecond {
		t.Fatal(d, err)
	}
	if _, err = Downtime(0, 3); err == nil {
		t.Fatal("zero window")
	}
}
