Files

90 lines
2.0 KiB
Go

package main
import (
"encoding/binary"
"io"
"math"
"os"
"testing"
)
func TestDownsampleUsesMicZero(t *testing.T) {
raw := make([]byte, 3*16)
for i, v := range []int16{300, 600, 900} {
binary.LittleEndian.PutUint16(raw[i*16:], uint16(v))
binary.LittleEndian.PutUint16(raw[i*16+2:], 1234)
}
got := downsample(raw)
if len(got) != 1 || got[0] != 600 {
t.Fatalf("got %v", got)
}
}
func TestFeaturesAndDistance(t *testing.T) {
a := make([]int16, frameSamples)
for i := range a {
a[i] = int16(4000 * math.Sin(2*math.Pi*440*float64(i)/rate))
}
f := features(a)
if len(f) != 20 {
t.Fatal(len(f))
}
d := distance([][]float64{f, f}, [][]float64{f, f})
if math.Abs(d) > 1e-9 {
t.Fatal(d)
}
if !math.IsInf(distance(nil, [][]float64{f}), 1) {
t.Fatal("empty distance")
}
}
func TestTemplateValidation(t *testing.T) {
p := t.TempDir() + "/template.json"
if _, e := loadTemplates(p); e == nil {
t.Fatal("missing template accepted")
}
}
func TestLiveReaderEOFStaysEOF(t *testing.T) {
in, out, err := os.Pipe()
if err != nil {
t.Fatal(err)
}
defer in.Close()
out.Close()
r := newLiveReaderWithCommands(in, pcmBlock, nil)
for i := 0; i < 2; i++ {
if _, err := r.next(); err != io.EOF {
t.Fatalf("read %d: %v", i, err)
}
}
}
func TestLiveReaderSpotterFlags(t *testing.T) {
in, out, err := os.Pipe()
if err != nil {
t.Fatal(err)
}
defer in.Close()
defer out.Close()
packet := make([]byte, spotterBlock)
binary.LittleEndian.PutUint16(packet, 123)
packet[pcmBlock] = 1
if _, err := out.Write(packet); err != nil {
t.Fatal(err)
}
packet[pcmBlock] = 2
if _, err := out.Write(packet); err != nil {
t.Fatal(err)
}
out.Close()
reader := newLiveReaderWithCommands(in, spotterBlock, nil)
frame, err := reader.next()
if err != nil || !frame.wake || frame.muted || len(frame.pcm) != hop || frame.pcm[0] != 123 {
t.Fatalf("wake packet: %+v, %v", frame, err)
}
frame, err = reader.next()
if err != nil || frame.wake || !frame.muted {
t.Fatalf("muted packet: %+v, %v", frame, err)
}
}