package main

import (
	"math"
	"testing"
)

func TestOmittedQueueing(t *testing.T) {
	cost := []int{100, 1, 1}
	a, _ := Latencies(cost, 10, true)
	b, _ := Latencies(cost, 10, false)
	if a[1] != 91 || b[1] != 1 {
		t.Fatal(a, b)
	}
}
func TestInvalidInputs(t *testing.T) {
	if _, e := Latencies([]int{-1}, 10, true); e == nil {
		t.Fatal("negative service")
	}
	if _, e := Percentile(nil, .99); e == nil {
		t.Fatal("empty percentile")
	}
	if _, e := Percentile([]int{1}, math.NaN()); e == nil {
		t.Fatal("NaN")
	}
	if _, e := Replicas(1, 0, 0); e == nil {
		t.Fatal("zero capacity")
	}
}
func TestPercentileDoesNotMutate(t *testing.T) {
	a := []int{9, 1, 2}
	p, err := Percentile(a, .5)
	if err != nil || p != 2 || a[0] != 9 {
		t.Fatal(p, a, err)
	}
}
func TestFailoverCapacity(t *testing.T) {
	n, err := Replicas(2401, 600, 1)
	if err != nil || n != 6 {
		t.Fatal(n, err)
	}
}
