blob: 7adc9c33ded7950b81e5dcd6c8a10bba28b9cfe8 [file] [log] [blame]
Lais Andradefd0e14c2024-07-30 15:57:23 +01001/*
2 * Copyright (C) 2024 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <android_os_vibrator.h>
18#include <flag_macros.h>
19#include <gtest/gtest.h>
20#include <vibrator/ExternalVibrationUtils.h>
21
22#include "test_utils.h"
23
24#define FLAG_NS android::os::vibrator
25
26using namespace android;
27using namespace testing;
28
29using HapticScale = os::HapticScale;
30using HapticLevel = os::HapticLevel;
31
32static constexpr float TEST_TOLERANCE = 1e-2f;
33static constexpr size_t TEST_BUFFER_LENGTH = 4;
34static float TEST_BUFFER[TEST_BUFFER_LENGTH] = { 1, -1, 0.5f, -0.2f };
35
36class ExternalVibrationUtilsTest : public Test {
37public:
38 void SetUp() override {
39 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(mBuffer));
40 }
41
42protected:
43 void scaleBuffer(HapticLevel hapticLevel) {
Lais Andrade045376e2024-07-24 15:35:07 +010044 scaleBuffer(HapticScale(hapticLevel));
Lais Andradefd0e14c2024-07-30 15:57:23 +010045 }
46
47 void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor) {
48 scaleBuffer(hapticLevel, adaptiveScaleFactor, 0 /* limit */);
49 }
50
51 void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor, float limit) {
Lais Andrade045376e2024-07-24 15:35:07 +010052 scaleBuffer(HapticScale(hapticLevel, -1 /* scaleFactor */, adaptiveScaleFactor), limit);
53 }
54
55 void scaleBuffer(HapticScale hapticScale) {
56 scaleBuffer(hapticScale, 0 /* limit */);
Lais Andradefd0e14c2024-07-30 15:57:23 +010057 }
58
59 void scaleBuffer(HapticScale hapticScale, float limit) {
60 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(mBuffer));
61 os::scaleHapticData(&mBuffer[0], TEST_BUFFER_LENGTH, hapticScale, limit);
62 }
63
64 float mBuffer[TEST_BUFFER_LENGTH];
65};
66
Lais Andrade045376e2024-07-24 15:35:07 +010067TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleMute,
68 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
69 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
70 float expected[TEST_BUFFER_LENGTH];
71 std::fill(std::begin(expected), std::end(expected), 0);
72
73 scaleBuffer(HapticLevel::MUTE);
74 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
75}
76
77TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleMute,
78 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
79 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +010080 float expected[TEST_BUFFER_LENGTH];
81 std::fill(std::begin(expected), std::end(expected), 0);
82
83 scaleBuffer(HapticLevel::MUTE);
84 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
85}
86
87TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +010088 ExternalVibrationUtilsTest, TestScaleV2Mute,
89 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
90 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +010091 float expected[TEST_BUFFER_LENGTH];
92 std::fill(std::begin(expected), std::end(expected), 0);
93
94 scaleBuffer(HapticLevel::MUTE);
95 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
96}
97
Lais Andrade045376e2024-07-24 15:35:07 +010098TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleNone,
99 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
100 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
101 float expected[TEST_BUFFER_LENGTH];
102 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
103
104 scaleBuffer(HapticLevel::NONE);
105 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
106}
107
108TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleNone,
109 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
110 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100111 float expected[TEST_BUFFER_LENGTH];
112 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
113
114 scaleBuffer(HapticLevel::NONE);
115 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
116}
117
118TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +0100119 ExternalVibrationUtilsTest, TestScaleV2None,
120 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
121 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100122 float expected[TEST_BUFFER_LENGTH];
123 std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(expected));
124
125 scaleBuffer(HapticLevel::NONE);
126 EXPECT_FLOATS_NEARLY_EQ(expected, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
127}
128
Lais Andrade045376e2024-07-24 15:35:07 +0100129TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLegacyScaleToHapticLevel,
130 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
131 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100132 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.84f, -0.66f };
133 scaleBuffer(HapticLevel::VERY_HIGH);
134 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
135
136 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.7f, -0.44f };
137 scaleBuffer(HapticLevel::HIGH);
138 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
139
140 float expectedLow[TEST_BUFFER_LENGTH] = { 0.75f, -0.75f, 0.26f, -0.06f };
141 scaleBuffer(HapticLevel::LOW);
142 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
143
144 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.66f, -0.66f, 0.16f, -0.02f };
145 scaleBuffer(HapticLevel::VERY_LOW);
146 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
147}
148
Lais Andrade045376e2024-07-24 15:35:07 +0100149TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestFixedScaleToHapticLevel,
150 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
151 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100152 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.79f, -0.39f };
153 scaleBuffer(HapticLevel::VERY_HIGH);
154 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
155
156 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.62f, -0.27f };
157 scaleBuffer(HapticLevel::HIGH);
158 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
159
160 float expectedLow[TEST_BUFFER_LENGTH] = { 0.70f, -0.70f, 0.35f, -0.14f };
161 scaleBuffer(HapticLevel::LOW);
162 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
163
164 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.45f, -0.45f, 0.22f, -0.09f };
165 scaleBuffer(HapticLevel::VERY_LOW);
166 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
167}
168
169TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +0100170 ExternalVibrationUtilsTest, TestScaleV2ToHapticLevel,
171 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
172 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
173 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.8f, -0.38f };
174 scaleBuffer(HapticLevel::VERY_HIGH);
175 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
176
177 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.63f, -0.27f };
178 scaleBuffer(HapticLevel::HIGH);
179 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
180
181 float expectedLow[TEST_BUFFER_LENGTH] = { 0.71f, -0.71f, 0.35f, -0.14f };
182 scaleBuffer(HapticLevel::LOW);
183 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
184
185 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.51f, -0.51f, 0.25f, -0.1f };
186 scaleBuffer(HapticLevel::VERY_LOW);
187 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
188}
189
190TEST_F_WITH_FLAGS(
191 ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorIgnoresLevel,
192 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
193 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
194 constexpr float adaptiveScaleNone = 1.0f;
195
196 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 1, -0.55f };
197 scaleBuffer(HapticScale(HapticLevel::LOW, 3.0f /* scaleFactor */, adaptiveScaleNone));
198 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
199
200 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.66f, -0.29f };
201 scaleBuffer(HapticScale(HapticLevel::LOW, 1.5f /* scaleFactor */, adaptiveScaleNone));
202 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
203
204 float expectedLow[TEST_BUFFER_LENGTH] = { 0.8f, -0.8f, 0.4f, -0.16f };
205 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.8f /* scaleFactor */, adaptiveScaleNone));
206 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
207
208 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.4f, -0.4f, 0.2f, -0.08f };
209 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.4f /* scaleFactor */, adaptiveScaleNone));
210 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
211}
212
213TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterLegacyScale,
214 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
215 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100216 // Haptic level scale up then adaptive scale down
217 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.13f };
218 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
219 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
220
221 // Haptic level scale up then adaptive scale up
222 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 1.06f, -0.67f };
223 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
224 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
225
226 // Haptic level scale down then adaptive scale down
227 float expectedLow[TEST_BUFFER_LENGTH] = { 0.45f, -0.45f, 0.15f, -0.04f };
228 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
229 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
230
231 // Haptic level scale down then adaptive scale up
232 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.33f, -1.33f, 0.33f, -0.05f };
233 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
234 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
235}
236
Lais Andrade045376e2024-07-24 15:35:07 +0100237TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterFixedScale,
238 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
239 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100240 // Haptic level scale up then adaptive scale down
241 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.07f };
242 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
243 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
244
245 // Haptic level scale up then adaptive scale up
246 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.93f, -0.41f };
247 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
248 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
249
250 // Haptic level scale down then adaptive scale down
251 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
252 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
253 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
254
255 // Haptic level scale down then adaptive scale up
256 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.91f, -0.91f, 0.45f, -0.18f };
257 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
258 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
259}
260
261TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +0100262 ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterScaleV2,
263 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
264 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
265 // Haptic level scale up then adaptive scale down
266 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.15f, -0.07f };
267 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
268 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
269
270 // Haptic level scale up then adaptive scale up
271 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.95f, -0.41f };
272 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
273 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
274
275 // Haptic level scale down then adaptive scale down
276 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
277 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
278 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
279
280 // Haptic level scale down then adaptive scale up
281 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.02f, -1.02f, 0.51f, -0.2f };
282 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
283 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
284}
285
286TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterLegacyScale,
287 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
288 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100289 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
290 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.13f };
291 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
292 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
293
294 // Scaled = { 1, -1, 0.5f, -0.2f };
295 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.33f, -0.05f };
296 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
297 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
298}
299
Lais Andrade045376e2024-07-24 15:35:07 +0100300TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterFixedScale,
301 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
302 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100303 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
304 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
305 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
306 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
307
308 // Scaled = { 1, -1, 0.5f, -0.2f };
309 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.45f, -0.18f };
310 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
311 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
312}
Lais Andrade045376e2024-07-24 15:35:07 +0100313
314TEST_F_WITH_FLAGS(
315 ExternalVibrationUtilsTest, TestLimitAppliedAfterScaleV2,
316 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
317 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
318 // Scaled = { 0.2, -0.2, 0.15f, -0.07f };
319 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
320 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
321 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
322
323 // Scaled = { 1.02f, -1.02f, 0.51f, -0.2f }
324 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.51f, -0.2f };
325 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
326 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
327}