1/*
2 *  Copyright 2014 The WebRTC Project Authors. All rights reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 */
10
11#include <math.h>
12
13#include "webrtc/base/gunit.h"
14#include "webrtc/base/exp_filter.h"
15
16namespace rtc {
17
18TEST(ExpFilterTest, FirstTimeOutputEqualInput) {
19  // No max value defined.
20  ExpFilter filter = ExpFilter(0.9f);
21  filter.Apply(100.0f, 10.0f);
22
23  // First time, first argument no effect.
24  double value = 10.0f;
25  EXPECT_FLOAT_EQ(value, filter.filtered());
26}
27
28TEST(ExpFilterTest, SecondTime) {
29  double value;
30
31  ExpFilter filter = ExpFilter(0.9f);
32  filter.Apply(100.0f, 10.0f);
33
34  // First time, first argument no effect.
35  value = 10.0f;
36
37  filter.Apply(10.0f, 20.0f);
38  double alpha = pow(0.9f, 10.0f);
39  value = alpha * value + (1.0f - alpha) * 20.0f;
40  EXPECT_FLOAT_EQ(value, filter.filtered());
41}
42
43TEST(ExpFilterTest, Reset) {
44  ExpFilter filter = ExpFilter(0.9f);
45  filter.Apply(100.0f, 10.0f);
46
47  filter.Reset(0.8f);
48  filter.Apply(100.0f, 1.0f);
49
50  // Become first time after a reset.
51  double value = 1.0f;
52  EXPECT_FLOAT_EQ(value, filter.filtered());
53}
54
55TEST(ExpfilterTest, OutputLimitedByMax) {
56  double value;
57
58  // Max value defined.
59  ExpFilter filter = ExpFilter(0.9f, 1.0f);
60  filter.Apply(100.0f, 10.0f);
61
62  // Limited to max value.
63  value = 1.0f;
64  EXPECT_EQ(value, filter.filtered());
65
66  filter.Apply(1.0f, 0.0f);
67  value = 0.9f * value;
68  EXPECT_FLOAT_EQ(value, filter.filtered());
69}
70
71}  // namespace rtc
72