| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package counter |
| |
| import ( |
| "testing" |
| "time" |
| ) |
| |
| func TestTimeSeries(t *testing.T) { |
| now := time.Unix(1, 0) |
| ts := newTimeSeries(now, 5*time.Second, time.Second) |
| |
| // Time 1 |
| ts.advanceTime(now) |
| ts.set(123) |
| if expected, got := int64(123), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| ts.set(234) |
| if expected, got := int64(234), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(234), ts.min(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(234), ts.max(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| // Time 2 |
| now = now.Add(time.Second) |
| ts.advanceTime(now) |
| ts.set(345) |
| if expected, got := int64(345), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(0), ts.tailValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(234), ts.min(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(345), ts.max(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| // Time 4 |
| now = now.Add(2 * time.Second) |
| ts.advanceTime(now) |
| ts.set(111) |
| if expected, got := int64(111), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(0), ts.tailValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(111), ts.min(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(345), ts.max(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| // Time 7 |
| now = now.Add(3 * time.Second) |
| ts.advanceTime(now) |
| if expected, got := int64(111), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(345), ts.tailValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(111), ts.min(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(345), ts.max(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| // Time 8 |
| now = now.Add(time.Second) |
| ts.advanceTime(now) |
| if expected, got := int64(111), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(345), ts.tailValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(111), ts.min(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(111), ts.max(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| // Time 27 |
| now = now.Add(20 * time.Second) |
| ts.advanceTime(now) |
| if expected, got := int64(111), ts.headValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| if expected, got := int64(111), ts.tailValue(); got != expected { |
| t.Errorf("unexpected value. Got %v, want %v", got, expected) |
| } |
| } |
| |
| func TestTimeSeriesRate(t *testing.T) { |
| now := time.Unix(1, 0) |
| ts := newTimeSeries(now, 60*time.Second, time.Second) |
| // Increment by 5 every 4 seconds. The rate is 1.25. |
| for i := 0; i < 10; i++ { |
| now = now.Add(4 * time.Second) |
| ts.advanceTime(now) |
| ts.incr(5) |
| } |
| if expected, got := float64(1.25), ts.rate(); got != expected { |
| t.Errorf("Unexpected value. Got %v, want %v", got, expected) |
| } |
| |
| } |