8 func TestSpaceWalkAbort(t *testing.T) {
10 s.Observe("a", LabelValues{"a", "b"}, 1)
11 s.Observe("a", LabelValues{"c", "d"}, 2)
12 s.Observe("a", LabelValues{"e", "f"}, 4)
13 s.Observe("a", LabelValues{"g", "h"}, 8)
14 s.Observe("b", LabelValues{"a", "b"}, 16)
15 s.Observe("b", LabelValues{"c", "d"}, 32)
16 s.Observe("b", LabelValues{"e", "f"}, 64)
17 s.Observe("b", LabelValues{"g", "h"}, 128)
20 s.Walk(func(name string, lvs LabelValues, obs []float64) bool {
24 if want, have := 1, count; want != have {
25 t.Errorf("want %d, have %d", want, have)
29 func TestSpaceWalkSums(t *testing.T) {
31 s.Observe("metric_one", LabelValues{}, 1)
32 s.Observe("metric_one", LabelValues{}, 2)
33 s.Observe("metric_one", LabelValues{"a", "1", "b", "2"}, 4)
34 s.Observe("metric_one", LabelValues{"a", "1", "b", "2"}, 8)
35 s.Observe("metric_one", LabelValues{}, 16)
36 s.Observe("metric_one", LabelValues{"a", "1", "b", "3"}, 32)
37 s.Observe("metric_two", LabelValues{}, 64)
38 s.Observe("metric_two", LabelValues{}, 128)
39 s.Observe("metric_two", LabelValues{"a", "1", "b", "2"}, 256)
41 have := map[string]float64{}
42 s.Walk(func(name string, lvs LabelValues, obs []float64) bool {
43 //t.Logf("%s %v => %v", name, lvs, obs)
44 have[name+" ["+strings.Join(lvs, "")+"]"] += sum(obs)
48 want := map[string]float64{
49 "metric_one []": 1 + 2 + 16,
50 "metric_one [a1b2]": 4 + 8,
51 "metric_one [a1b3]": 32,
52 "metric_two []": 64 + 128,
53 "metric_two [a1b2]": 256,
55 for keystr, wantsum := range want {
56 if havesum := have[keystr]; wantsum != havesum {
57 t.Errorf("%q: want %.1f, have %.1f", keystr, wantsum, havesum)
62 for keystr, havesum := range have {
63 t.Errorf("%q: unexpected observations recorded: %.1f", keystr, havesum)
67 func TestSpaceWalkSkipsEmptyDimensions(t *testing.T) {
69 s.Observe("foo", LabelValues{"bar", "1", "baz", "2"}, 123)
72 s.Walk(func(name string, lvs LabelValues, obs []float64) bool {
76 if want, have := 1, count; want != have {
77 t.Errorf("want %d, have %d", want, have)
81 func sum(a []float64) (v float64) {