forked from Snider/Poindexter
87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
|
|
package poindexter
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"math"
|
|||
|
|
"testing"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
func TestWeightedScore(t *testing.T) {
|
|||
|
|
tests := []struct {
|
|||
|
|
name string
|
|||
|
|
factors []Factor
|
|||
|
|
want float64
|
|||
|
|
}{
|
|||
|
|
{"empty", nil, 0},
|
|||
|
|
{"single", []Factor{{Value: 5, Weight: 2}}, 10},
|
|||
|
|
{"multiple", []Factor{
|
|||
|
|
{Value: 3, Weight: 2}, // 6
|
|||
|
|
{Value: 1, Weight: -5}, // -5
|
|||
|
|
}, 1},
|
|||
|
|
{"lek_heuristic", []Factor{
|
|||
|
|
{Value: 2, Weight: 2}, // engagement × 2
|
|||
|
|
{Value: 1, Weight: 3}, // creative × 3
|
|||
|
|
{Value: 1, Weight: 1.5}, // first person × 1.5
|
|||
|
|
{Value: 3, Weight: -5}, // compliance × -5
|
|||
|
|
}, -6.5},
|
|||
|
|
}
|
|||
|
|
for _, tt := range tests {
|
|||
|
|
t.Run(tt.name, func(t *testing.T) {
|
|||
|
|
got := WeightedScore(tt.factors)
|
|||
|
|
if math.Abs(got-tt.want) > 1e-9 {
|
|||
|
|
t.Errorf("WeightedScore = %v, want %v", got, tt.want)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestRatio(t *testing.T) {
|
|||
|
|
tests := []struct {
|
|||
|
|
name string
|
|||
|
|
part, whole float64
|
|||
|
|
want float64
|
|||
|
|
}{
|
|||
|
|
{"half", 5, 10, 0.5},
|
|||
|
|
{"full", 10, 10, 1},
|
|||
|
|
{"zero_whole", 5, 0, 0},
|
|||
|
|
{"zero_part", 0, 10, 0},
|
|||
|
|
}
|
|||
|
|
for _, tt := range tests {
|
|||
|
|
t.Run(tt.name, func(t *testing.T) {
|
|||
|
|
got := Ratio(tt.part, tt.whole)
|
|||
|
|
if math.Abs(got-tt.want) > 1e-9 {
|
|||
|
|
t.Errorf("Ratio(%v, %v) = %v, want %v", tt.part, tt.whole, got, tt.want)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestDelta(t *testing.T) {
|
|||
|
|
if got := Delta(10, 15); got != 5 {
|
|||
|
|
t.Errorf("Delta(10, 15) = %v, want 5", got)
|
|||
|
|
}
|
|||
|
|
if got := Delta(15, 10); got != -5 {
|
|||
|
|
t.Errorf("Delta(15, 10) = %v, want -5", got)
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func TestDeltaPercent(t *testing.T) {
|
|||
|
|
tests := []struct {
|
|||
|
|
name string
|
|||
|
|
old, new_ float64
|
|||
|
|
want float64
|
|||
|
|
}{
|
|||
|
|
{"increase", 100, 150, 50},
|
|||
|
|
{"decrease", 100, 75, -25},
|
|||
|
|
{"zero_old", 0, 10, 0},
|
|||
|
|
{"no_change", 50, 50, 0},
|
|||
|
|
}
|
|||
|
|
for _, tt := range tests {
|
|||
|
|
t.Run(tt.name, func(t *testing.T) {
|
|||
|
|
got := DeltaPercent(tt.old, tt.new_)
|
|||
|
|
if math.Abs(got-tt.want) > 1e-9 {
|
|||
|
|
t.Errorf("DeltaPercent(%v, %v) = %v, want %v", tt.old, tt.new_, got, tt.want)
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
}
|
|||
|
|
}
|