mirror of
https://github.com/ncruces/go-sqlite3.git
synced 2026-01-12 14:09:13 +00:00
86 lines
1.5 KiB
Go
86 lines
1.5 KiB
Go
package stats
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
)
|
|
|
|
func Test_welford(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var s1, s2 welford
|
|
s1.enqueue(1)
|
|
s1.dequeue(1)
|
|
|
|
s1.enqueue(4)
|
|
s1.enqueue(7)
|
|
s1.enqueue(13)
|
|
s1.enqueue(16)
|
|
if got := s1.mean(); got != 10 {
|
|
t.Errorf("got %v, want 10", got)
|
|
}
|
|
if got := s1.var_samp(); got != 30 {
|
|
t.Errorf("got %v, want 30", got)
|
|
}
|
|
if got := s1.var_pop(); got != 22.5 {
|
|
t.Errorf("got %v, want 22.5", got)
|
|
}
|
|
if got := s1.stddev_samp(); got != math.Sqrt(30) {
|
|
t.Errorf("got %v, want √30", got)
|
|
}
|
|
if got := s1.stddev_pop(); got != math.Sqrt(22.5) {
|
|
t.Errorf("got %v, want √22.5", got)
|
|
}
|
|
|
|
s1.dequeue(4)
|
|
s2.enqueue(7)
|
|
s2.enqueue(13)
|
|
s2.enqueue(16)
|
|
if s1.var_pop() != s2.var_pop() {
|
|
t.Errorf("got %v, want %v", s1, s2)
|
|
}
|
|
}
|
|
|
|
func Test_covar(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var c1, c2 welford2
|
|
c1.enqueue(1, 1)
|
|
c1.dequeue(1, 1)
|
|
|
|
c1.enqueue(3, 70)
|
|
c1.enqueue(5, 80)
|
|
c1.enqueue(2, 60)
|
|
c1.enqueue(7, 90)
|
|
c1.enqueue(4, 75)
|
|
|
|
if got := c1.covar_samp(); got != 21.25 {
|
|
t.Errorf("got %v, want 21.25", got)
|
|
}
|
|
if got := c1.covar_pop(); got != 17 {
|
|
t.Errorf("got %v, want 17", got)
|
|
}
|
|
|
|
c1.dequeue(3, 70)
|
|
c2.enqueue(5, 80)
|
|
c2.enqueue(2, 60)
|
|
c2.enqueue(7, 90)
|
|
c2.enqueue(4, 75)
|
|
if c1.covar_pop() != c2.covar_pop() {
|
|
t.Errorf("got %v, want %v", c1.covar_pop(), c2.covar_pop())
|
|
}
|
|
}
|
|
|
|
func Test_correlation(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var c welford2
|
|
c.enqueue(1, 3)
|
|
c.enqueue(2, 2)
|
|
c.enqueue(3, 1)
|
|
|
|
if got := c.correlation(); got != -1 {
|
|
t.Errorf("got %v, want -1", got)
|
|
}
|
|
}
|