1f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol/*
2f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Copyright (C) 2016 The Android Open Source Project
3f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol *
4f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Licensed under the Apache License, Version 2.0 (the "License");
5f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * you may not use this file except in compliance with the License.
6f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * You may obtain a copy of the License at
7f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol *
8f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol *      http://www.apache.org/licenses/LICENSE-2.0
9f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol *
10f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * Unless required by applicable law or agreed to in writing, software
11f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * distributed under the License is distributed on an "AS IS" BASIS,
12f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * See the License for the specific language governing permissions and
14f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol * limitations under the License.
15f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol */
16f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
17f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol#include "gtest/gtest.h"
18f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
194446be9be8f90e66d3cb4d30393862fc725230daAndrew Rossignol#include "chre/core/sensor_request.h"
20f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
21f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::Nanoseconds;
22f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::SensorMode;
23f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignolusing chre::SensorRequest;
2478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignolusing chre::SensorType;
252b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chungusing chre::kMaxIntervalLatencyNs;
2678a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol
2778a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew RossignolTEST(SensorType, LosslessSensorHandleToSensorTypeAndBack) {
2878a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  // Verify that converting a sensor to a handle and from a handle back to a
2978a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  // sensor is a lossless conversion. The specific value of the handle is
3078a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  // unimportant, as long as it can be consistently converted back and forth.
3178a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  SensorType sensorType = SensorType::Pressure;
3278a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  uint32_t sensorHandle = getSensorHandleFromSensorType(sensorType);
3378a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
3478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  EXPECT_EQ(sensorType, SensorType::Pressure);
3578a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol
3678a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  sensorType = SensorType::Proximity;
3778a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  sensorHandle = getSensorHandleFromSensorType(sensorType);
3878a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  sensorType = chre::getSensorTypeFromSensorHandle(sensorHandle);
3978a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  EXPECT_EQ(sensorType, SensorType::Proximity);
4078a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol}
4178a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol
4278a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew RossignolTEST(SensorType, SensorHandleToSensorTypeUnknownHandles) {
4378a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  EXPECT_EQ(chre::getSensorTypeFromSensorHandle(0), SensorType::Unknown);
4478a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol  EXPECT_EQ(chre::getSensorTypeFromSensorHandle(10000), SensorType::Unknown);
4578a4909cf27b3f1c4f9b8b46ebc8c0f16400dfa5Andrew Rossignol}
46f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
47f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, DefaultMinimalPriority) {
48f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest request;
492d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_EQ(request.getInterval(), Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
502d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_EQ(request.getLatency(), Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
51f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(request.getMode(), SensorMode::Off);
52f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
53f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
54f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, ActiveContinuousIsHigherPriorityThanActiveOneShot) {
55f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest activeContinuous(SensorMode::ActiveContinuous,
56f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                 Nanoseconds(0), Nanoseconds(0));
57f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest activeOneShot(SensorMode::ActiveOneShot,
58f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                              Nanoseconds(0), Nanoseconds(0));
592d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
602d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(activeContinuous));
612d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(activeOneShot));
62f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
63f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
64f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
65f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
66f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
67f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, ActiveOneShotIsHigherPriorityThanPassiveContinuous) {
68f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest activeOneShot(SensorMode::ActiveOneShot,
69f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                              Nanoseconds(0), Nanoseconds(0));
70f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
71f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                  Nanoseconds(0), Nanoseconds(0));
722d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
732d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(activeOneShot));
742d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(passiveContinuous));
75f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
76f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
77f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveOneShot);
78f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
79f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
80f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
81f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, PassiveContinuousIsHigherPriorityThanPassiveOneShot) {
82f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest passiveContinuous(SensorMode::PassiveContinuous,
83f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                  Nanoseconds(0), Nanoseconds(0));
84f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
85f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                               Nanoseconds(0), Nanoseconds(0));
862d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
872d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(passiveContinuous));
882d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(passiveOneShot));
89f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
90f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
91f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveContinuous);
92f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
93f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
94f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, PassiveOneShotIsHigherPriorityThanOff) {
95f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest passiveOneShot(SensorMode::PassiveOneShot,
96f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                               Nanoseconds(0), Nanoseconds(0));
97f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest off(SensorMode::Off, Nanoseconds(0), Nanoseconds(0));
982d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
992d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(passiveOneShot));
1002d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(off));
101f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(0));
102f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
103f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::PassiveOneShot);
104f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
105f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
106f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, LowerLatencyIsHigherPriorityThanHigherLatency) {
107f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest lowLatencyRequest(SensorMode::ActiveContinuous,
108f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                  Nanoseconds(10), Nanoseconds(10));
109f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest highLatencyRequest(SensorMode::ActiveOneShot,
110f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(10), Nanoseconds(100));
1112d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1122d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(lowLatencyRequest));
1132d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(highLatencyRequest));
114f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
115f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
116f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
117f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
118f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
119f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, HigherFrequencyIsHigherPriorityThanLowerFrequency) {
120f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest lowFreqRequest(SensorMode::ActiveOneShot,
121f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                               Nanoseconds(100), Nanoseconds(10));
122f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest highFreqRequest(SensorMode::ActiveContinuous,
123f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                Nanoseconds(10), Nanoseconds(10));
1242d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1252d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(lowFreqRequest));
1262d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(highFreqRequest));
127f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
128f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(10));
129f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
130f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
131f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
132f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyDefaultFrequency) {
133f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
134f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
135f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(0));
1362d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1372d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
138f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(),
139f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol            Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT));
140f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
141f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
142f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
143f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
144f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonDefaultAndDefaultFrequency) {
145f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest defaultFreqRequest(SensorMode::ActiveContinuous,
146f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT),
147f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(0));
148f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest nonDefaultFreqRequest(SensorMode::ActiveContinuous,
149f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(20000000), Nanoseconds(0));
1502d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1512d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(defaultFreqRequest));
1522d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultFreqRequest));
153f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(20000000));
154f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
155f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
156f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
157f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
158f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyAsapLatency) {
159f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
160f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(10),
161f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
1622d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1632d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
164f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
165f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(),
166f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol            Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
167f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
168f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
169f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
170f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonAsapAndAsapLatency) {
171f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest asapLatencyRequest(SensorMode::ActiveContinuous,
172f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(10),
173f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                   Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
174f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest nonAsapLatencyRequest(SensorMode::ActiveContinuous,
175f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(10),
176f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(2000));
1772d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1782d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(asapLatencyRequest));
1792d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_FALSE(mergedRequest.mergeWith(nonAsapLatencyRequest));
180f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
181f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(),
182f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol            Nanoseconds(CHRE_SENSOR_LATENCY_ASAP));
183f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
184f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
185f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
186f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, OnlyDefaultLatency) {
187f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
188f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(10),
189f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
1902d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
1912d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
192f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
193f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(),
194f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol            Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
195f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
196f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
197f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol
198f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew RossignolTEST(SensorRequest, NonDefaultAndDefaultLatency) {
199f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest defaultLatencyRequest(SensorMode::ActiveContinuous,
200f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(10),
201f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                      Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT));
202f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  SensorRequest nonDefaultLatencyRequest(SensorMode::ActiveContinuous,
203f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                         Nanoseconds(10),
204f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol                                         Nanoseconds(2000));
2052d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  SensorRequest mergedRequest;
2062d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(defaultLatencyRequest));
2072d93f2a877a9c68a2ef249ba996188188d8469acAndrew Rossignol  EXPECT_TRUE(mergedRequest.mergeWith(nonDefaultLatencyRequest));
208f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
209f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
210f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
211f546f4c27e66dc4ea868e660cebac9ba0c31fad9Andrew Rossignol}
212474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung
213474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan ChungTEST(SensorRequest, MergeWithOff) {
214474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  SensorRequest request(SensorMode::ActiveContinuous,
215474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung                        Nanoseconds(10),
216474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung                        Nanoseconds(100));
217474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  SensorRequest otherRequest(SensorMode::Off,
218474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung                             Nanoseconds(1),
219474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung                             Nanoseconds(1));
220474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  EXPECT_FALSE(request.mergeWith(otherRequest));
221474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous);
222474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  EXPECT_EQ(request.getInterval(), Nanoseconds(10));
223474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung  EXPECT_EQ(request.getLatency(), Nanoseconds(100));
224474dd3f44effc5df316911af9643fc98fce0ca16Meng-hsuan Chung}
2252b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung
2262b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, MaxNonDefaultIntervalAndLatency) {
2272b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest request(SensorMode::ActiveContinuous,
2282b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                        Nanoseconds(CHRE_SENSOR_INTERVAL_DEFAULT - 1),
2292b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                        Nanoseconds(CHRE_SENSOR_LATENCY_DEFAULT - 1));
2302b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(request.getMode(), SensorMode::ActiveContinuous);
2312b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(request.getInterval(), Nanoseconds(kMaxIntervalLatencyNs));
2322b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(request.getLatency(), Nanoseconds(kMaxIntervalLatencyNs));
2332b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung}
2342b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung
2352b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, HighRateLowLatencyAndLowRateHighLatency) {
2362b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest Request0(SensorMode::ActiveContinuous,
2372b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                         Nanoseconds(100), Nanoseconds(0));
2382b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest Request1(SensorMode::ActiveContinuous,
2392b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                         Nanoseconds(10), Nanoseconds(2000));
2402b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest mergedRequest;
2412b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_TRUE(mergedRequest.mergeWith(Request0));
2422b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(100));
2432b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(0));
2442b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
2452b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung
2462b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_TRUE(mergedRequest.mergeWith(Request1));
2472b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
2482b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90));
2492b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
2502b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung}
2512b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung
2522b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan ChungTEST(SensorRequest, LowRateHighLatencyAndHighRateLowLatency) {
2532b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest Request0(SensorMode::ActiveContinuous,
2542b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                         Nanoseconds(100), Nanoseconds(0));
2552b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest Request1(SensorMode::ActiveContinuous,
2562b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung                         Nanoseconds(10), Nanoseconds(2000));
2572b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  SensorRequest mergedRequest;
2582b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_TRUE(mergedRequest.mergeWith(Request1));
2592b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
2602b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(2000));
2612b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
2622b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung
2632b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_TRUE(mergedRequest.mergeWith(Request0));
2642b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getInterval(), Nanoseconds(10));
2652b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getLatency(), Nanoseconds(90));
2662b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung  EXPECT_EQ(mergedRequest.getMode(), SensorMode::ActiveContinuous);
2672b8f386e109c5470fbe8da4d3242e75c70993a1eMeng-hsuan Chung}
268