• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The ChromiumOS Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <gtest/gtest.h>
6 
7 #include "include/gestures.h"
8 #include "include/timestamp_filter_interpreter.h"
9 #include "include/unittest_util.h"
10 #include "include/util.h"
11 
12 namespace gestures {
13 
14 class TimestampFilterInterpreterTest : public ::testing::Test {};
15 
16 class TimestampFilterInterpreterTestInterpreter : public Interpreter {
17  public:
TimestampFilterInterpreterTestInterpreter()18   TimestampFilterInterpreterTestInterpreter()
19       : Interpreter(NULL, NULL, false) {}
20 };
21 
make_hwstate_times(stime_t timestamp,stime_t msc_timestamp)22 static HardwareState make_hwstate_times(stime_t timestamp,
23                                         stime_t msc_timestamp) {
24   return { timestamp, 0, 1, 1, NULL, 0, 0, 0, 0, 0, msc_timestamp };
25 }
26 
TEST(TimestampFilterInterpreterTest,SimpleTest)27 TEST(TimestampFilterInterpreterTest, SimpleTest) {
28   TimestampFilterInterpreterTestInterpreter* base_interpreter =
29       new TimestampFilterInterpreterTestInterpreter;
30   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
31   TestInterpreterWrapper wrapper(&interpreter);
32 
33   HardwareState hs[] = {
34     make_hwstate_times(1.000, 0.000),
35     make_hwstate_times(1.010, 0.012),
36     make_hwstate_times(1.020, 0.018),
37     make_hwstate_times(1.030, 0.031),
38   };
39 
40   stime_t expected_timestamps[] = { 1.000, 1.012, 1.018, 1.031 };
41 
42   for (size_t i = 0; i < arraysize(hs); i++) {
43     wrapper.SyncInterpret(&hs[i], NULL);
44     EXPECT_EQ(hs[i].timestamp, expected_timestamps[i]);
45   }
46 }
47 
TEST(TimestampFilterInterpreterTest,NoMscTimestampTest)48 TEST(TimestampFilterInterpreterTest, NoMscTimestampTest) {
49   TimestampFilterInterpreterTestInterpreter* base_interpreter =
50       new TimestampFilterInterpreterTestInterpreter;
51   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
52   TestInterpreterWrapper wrapper(&interpreter);
53 
54   HardwareState hs[] = {
55     make_hwstate_times(1.000, 0.000),
56     make_hwstate_times(1.010, 0.000),
57     make_hwstate_times(1.020, 0.000),
58     make_hwstate_times(1.030, 0.000),
59   };
60 
61   for (size_t i = 0; i < arraysize(hs); i++) {
62     stime_t expected_timestamp = hs[i].timestamp;
63     wrapper.SyncInterpret(&hs[i], NULL);
64     EXPECT_EQ(hs[i].timestamp, expected_timestamp);
65   }
66 }
67 
TEST(TimestampFilterInterpreterTest,MscTimestampResetTest)68 TEST(TimestampFilterInterpreterTest, MscTimestampResetTest) {
69   TimestampFilterInterpreterTestInterpreter* base_interpreter =
70       new TimestampFilterInterpreterTestInterpreter;
71   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
72   TestInterpreterWrapper wrapper(&interpreter);
73 
74   HardwareState hs[] = {
75     make_hwstate_times(1.000, 0.000),
76     make_hwstate_times(1.010, 0.012),
77     make_hwstate_times(1.020, 0.018),
78     make_hwstate_times(1.030, 0.031),
79     make_hwstate_times(3.000, 0.000),  // msc_timestamp reset to 0
80     make_hwstate_times(3.010, 0.008),
81     make_hwstate_times(3.020, 0.020),
82     make_hwstate_times(3.030, 0.035),
83   };
84 
85   stime_t expected_timestamps[] = {
86     1.000, 1.012, 1.018, 1.031,
87     3.000, 3.008, 3.020, 3.035
88   };
89 
90   for (size_t i = 0; i < arraysize(hs); i++) {
91     wrapper.SyncInterpret(&hs[i], NULL);
92     EXPECT_EQ(hs[i].timestamp, expected_timestamps[i]);
93   }
94 }
95 
TEST(TimestampFilterInterpreterTest,FakeTimestampTest)96 TEST(TimestampFilterInterpreterTest, FakeTimestampTest) {
97   TimestampFilterInterpreterTestInterpreter* base_interpreter =
98       new TimestampFilterInterpreterTestInterpreter;
99   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
100   TestInterpreterWrapper wrapper(&interpreter);
101 
102   interpreter.fake_timestamp_delta_.val_ = 0.010;
103 
104   HardwareState hs[] = {
105     make_hwstate_times(1.000, 0.002),
106     make_hwstate_times(1.002, 6.553),
107     make_hwstate_times(1.008, 0.001),
108     make_hwstate_times(1.031, 0.001),
109   };
110 
111   stime_t expected_timestamps[] = { 1.000, 1.010, 1.020, 1.030 };
112 
113   for (size_t i = 0; i < arraysize(hs); i++) {
114     wrapper.SyncInterpret(&hs[i], NULL);
115     EXPECT_TRUE(DoubleEq(hs[i].timestamp, expected_timestamps[i]));
116   }
117 }
118 
TEST(TimestampFilterInterpreterTest,FakeTimestampJumpForwardTest)119 TEST(TimestampFilterInterpreterTest, FakeTimestampJumpForwardTest) {
120   TimestampFilterInterpreterTestInterpreter* base_interpreter =
121       new TimestampFilterInterpreterTestInterpreter;
122   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
123   TestInterpreterWrapper wrapper(&interpreter);
124 
125   interpreter.fake_timestamp_delta_.val_ = 0.010;
126 
127   HardwareState hs[] = {
128     make_hwstate_times(1.000, 0.002),
129     make_hwstate_times(1.002, 6.553),
130     make_hwstate_times(1.008, 0.001),
131     make_hwstate_times(1.031, 0.001),
132     make_hwstate_times(2.000, 6.552),
133     make_hwstate_times(2.002, 6.553),
134     make_hwstate_times(2.008, 0.002),
135     make_hwstate_times(2.031, 0.001),
136   };
137 
138   stime_t expected_timestamps[] = {
139     1.000, 1.010, 1.020, 1.030,
140     2.000, 2.010, 2.020, 2.030
141   };
142 
143   for (size_t i = 0; i < arraysize(hs); i++) {
144     wrapper.SyncInterpret(&hs[i], NULL);
145     EXPECT_TRUE(DoubleEq(hs[i].timestamp, expected_timestamps[i]));
146   }
147 }
148 
TEST(TimestampFilterInterpreterTest,FakeTimestampFallBackwardTest)149 TEST(TimestampFilterInterpreterTest, FakeTimestampFallBackwardTest) {
150   TimestampFilterInterpreterTestInterpreter* base_interpreter =
151       new TimestampFilterInterpreterTestInterpreter;
152   TimestampFilterInterpreter interpreter(NULL, base_interpreter, NULL);
153   TestInterpreterWrapper wrapper(&interpreter);
154 
155   interpreter.fake_timestamp_delta_.val_ = 0.010;
156   interpreter.fake_timestamp_max_divergence_ = 0.030;
157 
158   HardwareState hs[] = {
159     make_hwstate_times(1.000, 0.002),
160     make_hwstate_times(1.001, 6.553),
161     make_hwstate_times(1.002, 0.001),
162     make_hwstate_times(1.003, 0.001),
163     make_hwstate_times(1.004, 6.552),
164     make_hwstate_times(1.005, 6.553),
165     make_hwstate_times(1.006, 0.002),
166     make_hwstate_times(1.007, 6.552),
167   };
168 
169   stime_t expected_timestamps[] = {
170     1.000, 1.010, 1.020, 1.030,
171     1.004, 1.014, 1.024, 1.034,
172   };
173 
174   for (size_t i = 0; i < arraysize(hs); i++) {
175     wrapper.SyncInterpret(&hs[i], NULL);
176     EXPECT_TRUE(DoubleEq(hs[i].timestamp, expected_timestamps[i]));
177   }
178 }
179 }  // namespace gestures
180