diff options
| author | Paul Buetow <paul@buetow.org> | 2026-02-23 22:55:08 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-02-23 22:55:08 +0200 |
| commit | 44d0558be543e1e31a5178736181305d5d1ac2ba (patch) | |
| tree | f6fd69ad8db7c6f3e27b005413a563cbc0a78115 /internal/statsengine/timeseries_test.go | |
| parent | dceaa618a4ae533352e80327c74b5a1c92adca75 (diff) | |
task 305: add ring time series with wrap-around and gap tests
Diffstat (limited to 'internal/statsengine/timeseries_test.go')
| -rw-r--r-- | internal/statsengine/timeseries_test.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/internal/statsengine/timeseries_test.go b/internal/statsengine/timeseries_test.go new file mode 100644 index 0000000..bb11157 --- /dev/null +++ b/internal/statsengine/timeseries_test.go @@ -0,0 +1,65 @@ +package statsengine + +import ( + "reflect" + "testing" + "time" +) + +func TestRingTimeSeriesAveragesWithinSlot(t *testing.T) { + r := newRingTimeSeriesWithConfig(time.Second, 4) + base := time.Unix(0, 0) + + r.Add(10, base) + r.Add(20, base.Add(400*time.Millisecond)) + + got := r.Values() + want := []float64{0, 0, 0, 15} + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected values: got %v want %v", got, want) + } +} + +func TestRingTimeSeriesWrapAround(t *testing.T) { + r := newRingTimeSeriesWithConfig(time.Second, 4) + base := time.Unix(0, 0) + + for i := 0; i < 6; i++ { + r.Add(float64(i+1), base.Add(time.Duration(i)*time.Second)) + } + + got := r.Values() + want := []float64{3, 4, 5, 6} + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected wrap-around values: got %v want %v", got, want) + } +} + +func TestRingTimeSeriesGapHandling(t *testing.T) { + r := newRingTimeSeriesWithConfig(time.Second, 4) + base := time.Unix(0, 0) + + r.Add(10, base) + r.Add(40, base.Add(3*time.Second)) + + got := r.Values() + want := []float64{10, 0, 0, 40} + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected gap values: got %v want %v", got, want) + } +} + +func TestRingTimeSeriesIgnoresTooOldSamples(t *testing.T) { + r := newRingTimeSeriesWithConfig(time.Second, 4) + base := time.Unix(0, 0) + + r.Add(1, base) + r.Add(5, base.Add(5*time.Second)) + r.Add(99, base) + + got := r.Values() + want := []float64{0, 0, 0, 5} + if !reflect.DeepEqual(got, want) { + t.Fatalf("unexpected values with old sample: got %v want %v", got, want) + } +} |
