go-ebur128/libebur128_test.go
DataHoarder ffc70c6395
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Initial commit
2022-03-08 11:31:08 +01:00

139 lines
2.5 KiB
Go

package libebur128
import (
"errors"
"fmt"
"io/ioutil"
"os"
"testing"
"unsafe"
)
func TestFloat(t *testing.T) {
t.Parallel()
state := NewState(2, 44100, LoudnessGlobalMomentary|SamplePeak)
if state == nil {
t.Error(errors.New("could not create state"))
return
}
defer state.Close()
f, err := os.Open("sample/test_f32.raw")
if err != nil {
t.Error(err)
return
}
data, err := ioutil.ReadAll(f)
if err != nil {
t.Error(err)
return
}
const blockSize = 1024
floatData := unsafe.Slice((*float32)(unsafe.Pointer(&data[0])), len(data)/4)
for len(floatData) >= blockSize {
if err = state.AddFloat(floatData[:blockSize]); err != nil {
t.Error(err)
return
}
floatData = floatData[blockSize:]
}
if len(floatData) > 0 {
if err = state.AddFloat(floatData); err != nil {
t.Error(err)
return
}
}
var loudness float64
var peak []float64
if loudness, err = state.GetLoudnessGlobal(); err != nil {
t.Error(err)
return
}
if peak, err = state.GetSamplePeak(); err != nil {
t.Error(err)
return
}
var maxPeak float64
for _, p := range peak {
if p > maxPeak {
maxPeak = p
}
}
result := fmt.Sprintf("%f dB, %f", loudness, maxPeak)
expected := "-14.927264 dB, 0.666256"
if result != expected {
t.Errorf("expected %s, got %s", expected, result)
}
}
func TestShort(t *testing.T) {
t.Parallel()
state := NewState(2, 44100, LoudnessGlobalMomentary|SamplePeak)
if state == nil {
t.Error(errors.New("could not create state"))
return
}
defer state.Close()
f, err := os.Open("sample/test_s16.raw")
if err != nil {
t.Error(err)
return
}
data, err := ioutil.ReadAll(f)
if err != nil {
t.Error(err)
return
}
const blockSize = 1024
intData := unsafe.Slice((*int16)(unsafe.Pointer(&data[0])), len(data)/2)
for len(intData) >= blockSize {
if err = state.AddShort(intData[:blockSize]); err != nil {
t.Error(err)
return
}
intData = intData[blockSize:]
}
if len(intData) > 0 {
if err = state.AddShort(intData); err != nil {
t.Error(err)
return
}
}
var loudness float64
var peak []float64
if loudness, err = state.GetLoudnessGlobal(); err != nil {
t.Error(err)
return
}
if peak, err = state.GetSamplePeak(); err != nil {
t.Error(err)
return
}
var maxPeak float64
for _, p := range peak {
if p > maxPeak {
maxPeak = p
}
}
result := fmt.Sprintf("%f dB, %f", loudness, maxPeak)
expected := "-14.927263 dB, 0.666260"
if result != expected {
t.Errorf("expected %s, got %s", expected, result)
}
}