package wshub import "testing" func TestZoomPoints(t *testing.T) { cases := []struct { n int present bool want int }{ {0, false, 2400}, // absent → default budget {2400, true, 2400}, // explicit budget honoured {0, true, 1 << 30}, // 0 → every sample in range {-1, true, 1 << 30}, // negative → every sample in range {5, true, 2400}, // implausibly small → default budget } for _, c := range cases { if got := zoomPoints(c.n, c.present); got != c.want { t.Errorf("zoomPoints(%d,%v) = %d, want %d", c.n, c.present, got, c.want) } } } func TestZoomSliceReturnsFullResolution(t *testing.T) { h := NewHub() rb := newSigRing(1000) ts := make([]float64, 500) vs := make([]float64, 500) for i := range ts { ts[i] = float64(i) * 0.001 // 1 kHz vs[i] = float64(i) } rb.write(ts, vs) h.rings["s1:sig"] = rb // A budget larger than the range must return every sample untouched. res := h.zoomSlice(0.100, 0.199, []string{"s1:sig"}, 1<<30) sd, ok := res["s1:sig"] if !ok { t.Fatal("signal missing from zoom result") } if len(sd.T) != 100 { t.Fatalf("got %d points, want 100", len(sd.T)) } if sd.V[0] != 100 || sd.V[99] != 199 { t.Errorf("value range = %v..%v, want 100..199", sd.V[0], sd.V[99]) } // A small budget decimates but keeps the endpoints. dec := h.zoomSlice(0.100, 0.199, []string{"s1:sig"}, 20) if len(dec["s1:sig"].T) != 20 { t.Errorf("decimated to %d points, want 20", len(dec["s1:sig"].T)) } } func TestZoomSliceUnknownSignal(t *testing.T) { h := NewHub() if res := h.zoomSlice(0, 1, []string{"nope", ""}, 100); len(res) != 0 { t.Errorf("got %d entries, want 0", len(res)) } }