mirror of
https://github.com/gonum/gonum.git
synced 2025-10-15 11:40:45 +08:00
131 lines
2.8 KiB
Go
131 lines
2.8 KiB
Go
package sliceops
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
const (
|
|
SmallBenchmark = 10
|
|
MediumBenchmark = 1000
|
|
LargeBenchmark = 100000
|
|
)
|
|
|
|
func TestMin(t *testing.T) {
|
|
s := []float64{}
|
|
val, ind := Min(s)
|
|
if val != 0 {
|
|
t.Errorf("Val not returned as default when slice length is zero")
|
|
}
|
|
if ind != -1 {
|
|
t.Errorf("Ind not returned as -1 for empty slice")
|
|
}
|
|
s = []float64{3, 4, 1, 7, 5}
|
|
val, ind = Min(s)
|
|
if val != 1 {
|
|
t.Errorf("Wrong value returned")
|
|
}
|
|
if ind != 2 {
|
|
t.Errorf("Wrong index returned")
|
|
}
|
|
}
|
|
|
|
func TestMax(t *testing.T) {
|
|
s := []float64{}
|
|
val, ind := Max(s)
|
|
if val != 0 {
|
|
t.Errorf("Val not returned as default when slice length is zero")
|
|
}
|
|
if ind != -1 {
|
|
t.Errorf("Ind not returned as -1 for empty slice")
|
|
}
|
|
s = []float64{3, 4, 1, 7, 5}
|
|
val, ind = Max(s)
|
|
if val != 7 {
|
|
t.Errorf("Wrong value returned")
|
|
}
|
|
if ind != 3 {
|
|
t.Errorf("Wrong index returned")
|
|
}
|
|
}
|
|
|
|
func TestSum(t *testing.T) {
|
|
s := []float64{}
|
|
val := Sum(s)
|
|
if val != 0 {
|
|
t.Errorf("Val not returned as default when slice length is zero")
|
|
}
|
|
s = []float64{3, 4, 1, 7, 5}
|
|
val = Sum(s)
|
|
if val != 20 {
|
|
t.Errorf("Wrong sum returned")
|
|
}
|
|
}
|
|
|
|
func TestProd(t *testing.T) {
|
|
s := []float64{}
|
|
val := Prod(s)
|
|
if val != 1 {
|
|
t.Errorf("Val not returned as default when slice length is zero")
|
|
}
|
|
s = []float64{3, 4, 1, 7, 5}
|
|
val = Prod(s)
|
|
if val != 420 {
|
|
t.Errorf("Wrong prod returned. Expected %v returned %v", 420, val)
|
|
}
|
|
}
|
|
|
|
func TestHasEqLen(t *testing.T) {
|
|
s1 := []float64{1, 2, 3, 4}
|
|
s2 := []float64{1, 2, 3, 4}
|
|
s3 := []float64{1, 2, 3}
|
|
if !HasEqLen(s1, s2) {
|
|
t.Errorf("Equal lengths returned as unequal")
|
|
}
|
|
if HasEqLen(s1, s3) {
|
|
t.Errorf("Unequal lengths returned as equal")
|
|
}
|
|
if !HasEqLen(s1) {
|
|
t.Errorf("Single slice returned as unequal")
|
|
}
|
|
if !HasEqLen() {
|
|
t.Errorf("No slices returned as unequal")
|
|
}
|
|
}
|
|
|
|
func TestEq(t *testing.T) {
|
|
s1 := []float64{1, 2, 3, 4}
|
|
s2 := []float64{1, 2, 3, 4 + 1E-14}
|
|
if !Eq(s1, s2, 1E-13) {
|
|
t.Errorf("Equal slices returned as unequal")
|
|
}
|
|
if Eq(s1, s2, 1E-15) {
|
|
t.Errorf("Unequal slices returned as equal")
|
|
}
|
|
}
|
|
|
|
func TestCumSum(t *testing.T) {
|
|
s := []float64{3, 4, 1, 7, 5}
|
|
val := CumSum(nil, s)
|
|
truth := []float64{3, 7, 8, 15, 20}
|
|
if !Eq(val, truth, 1E-15) {
|
|
t.Errorf("Wrong cumsum returned with nil receiver. Expected %v, returned %v", truth, val)
|
|
}
|
|
val = CumSum(val, s)
|
|
if !Eq(val, truth, 1E-15) {
|
|
t.Errorf("Wrong cumsum returned with non-nil receiver. Expected %v, returned %v", truth, val)
|
|
}
|
|
}
|
|
|
|
func TestCumProd(t *testing.T) {
|
|
s := []float64{3, 4, 1, 7, 5}
|
|
val := CumProd(nil, s)
|
|
truth := []float64{3, 12, 12, 84, 420}
|
|
if !Eq(val, truth, 1E-15) {
|
|
t.Errorf("Wrong cumprod returned with nil receiver. Expected %v, returned %v", truth, val)
|
|
}
|
|
val = CumProd(val, s)
|
|
if !Eq(val, truth, 1E-15) {
|
|
t.Errorf("Wrong cumprod returned with non-nil receiver. Expected %v, returned %v", truth, val)
|
|
}
|
|
}
|