blob: 9369f80da34dae9972c0674d1f6b501da916eb21 [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(
Lais Andradeee09df52024-08-09 17:53:14 +0100191 ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorUndefinedUsesHapticLevel,
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 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.8f, -0.38f};
196 scaleBuffer(HapticScale(HapticLevel::VERY_HIGH, -1.0f /* scaleFactor */, adaptiveScaleNone));
197 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
198}
199
200TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +0100201 ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorIgnoresLevel,
Lais Andradeee09df52024-08-09 17:53:14 +0100202 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
203 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andrade045376e2024-07-24 15:35:07 +0100204 constexpr float adaptiveScaleNone = 1.0f;
205
206 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 1, -1, 1, -0.55f };
207 scaleBuffer(HapticScale(HapticLevel::LOW, 3.0f /* scaleFactor */, adaptiveScaleNone));
208 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
209
210 float expectedHigh[TEST_BUFFER_LENGTH] = { 1, -1, 0.66f, -0.29f };
211 scaleBuffer(HapticScale(HapticLevel::LOW, 1.5f /* scaleFactor */, adaptiveScaleNone));
212 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
213
214 float expectedLow[TEST_BUFFER_LENGTH] = { 0.8f, -0.8f, 0.4f, -0.16f };
215 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.8f /* scaleFactor */, adaptiveScaleNone));
216 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
217
218 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.4f, -0.4f, 0.2f, -0.08f };
219 scaleBuffer(HapticScale(HapticLevel::HIGH, 0.4f /* scaleFactor */, adaptiveScaleNone));
220 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
221}
222
Lais Andradeee09df52024-08-09 17:53:14 +0100223TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIsIgnoredLegacyScale,
224 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
225 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
226 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.79f, -0.39f};
227 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
228 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
229}
230
Lais Andrade045376e2024-07-24 15:35:07 +0100231TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterLegacyScale,
232 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
233 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradeee09df52024-08-09 17:53:14 +0100234 // Adaptive scale mutes vibration
235 float expectedMuted[TEST_BUFFER_LENGTH];
236 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
237 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
238 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
239
Lais Andradefd0e14c2024-07-30 15:57:23 +0100240 // Haptic level scale up then adaptive scale down
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000241 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.13f };
Lais Andradefd0e14c2024-07-30 15:57:23 +0100242 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, 1.06f, -0.67f };
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.45f, -0.45f, 0.15f, -0.04f };
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] = { 1.33f, -1.33f, 0.33f, -0.05f };
257 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
258 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
259}
260
Lais Andradeee09df52024-08-09 17:53:14 +0100261TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIgnoredFixedScale,
262 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
263 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
264 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.79f, -0.39f};
265 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
266 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
267}
268
Lais Andrade045376e2024-07-24 15:35:07 +0100269TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterFixedScale,
270 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
271 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradeee09df52024-08-09 17:53:14 +0100272 // Adaptive scale mutes vibration
273 float expectedMuted[TEST_BUFFER_LENGTH];
274 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
275 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
276 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
277
Lais Andradefd0e14c2024-07-30 15:57:23 +0100278 // Haptic level scale up then adaptive scale down
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000279 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.07f };
Lais Andradefd0e14c2024-07-30 15:57:23 +0100280 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
281 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
282
283 // Haptic level scale up then adaptive scale up
284 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.93f, -0.41f };
285 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
286 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
287
288 // Haptic level scale down then adaptive scale down
289 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
290 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
291 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
292
293 // Haptic level scale down then adaptive scale up
294 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 0.91f, -0.91f, 0.45f, -0.18f };
295 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
296 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
297}
298
299TEST_F_WITH_FLAGS(
Lais Andradeee09df52024-08-09 17:53:14 +0100300 ExternalVibrationUtilsTest, TestAdaptiveScaleFactorUndefinedIgnoredScaleV2,
301 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
302 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000303 float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.8f, -0.38f};
304 scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
Lais Andradeee09df52024-08-09 17:53:14 +0100305 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
306}
307
308TEST_F_WITH_FLAGS(
Lais Andrade045376e2024-07-24 15:35:07 +0100309 ExternalVibrationUtilsTest, TestAdaptiveScaleFactorAppliedAfterScaleV2,
310 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
311 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradeee09df52024-08-09 17:53:14 +0100312 // Adaptive scale mutes vibration
313 float expectedMuted[TEST_BUFFER_LENGTH];
314 std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000315 scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
Lais Andradeee09df52024-08-09 17:53:14 +0100316 EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
317
Lais Andrade045376e2024-07-24 15:35:07 +0100318 // Haptic level scale up then adaptive scale down
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000319 float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.15f, -0.07f };
320 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
Lais Andrade045376e2024-07-24 15:35:07 +0100321 EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
322
323 // Haptic level scale up then adaptive scale up
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000324 float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.95f, -0.41f };
325 scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
Lais Andrade045376e2024-07-24 15:35:07 +0100326 EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
327
328 // Haptic level scale down then adaptive scale down
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000329 float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
330 scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
Lais Andrade045376e2024-07-24 15:35:07 +0100331 EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
332
333 // Haptic level scale down then adaptive scale up
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000334 float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.02f, -1.02f, 0.51f, -0.2f };
335 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
Lais Andrade045376e2024-07-24 15:35:07 +0100336 EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
337}
338
339TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterLegacyScale,
340 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling),
341 ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100342 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
343 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.13f };
344 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
345 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
346
347 // Scaled = { 1, -1, 0.5f, -0.2f };
348 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.33f, -0.05f };
349 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
350 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
351}
352
Lais Andrade045376e2024-07-24 15:35:07 +0100353TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest, TestLimitAppliedAfterFixedScale,
354 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, fix_audio_coupled_haptics_scaling)),
355 REQUIRES_FLAGS_DISABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
Lais Andradefd0e14c2024-07-30 15:57:23 +0100356 // Scaled = { 0.2, -0.2, 0.16f, -0.13f };
357 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
358 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
359 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
360
361 // Scaled = { 1, -1, 0.5f, -0.2f };
362 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.45f, -0.18f };
363 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
364 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
365}
Lais Andrade045376e2024-07-24 15:35:07 +0100366
367TEST_F_WITH_FLAGS(
368 ExternalVibrationUtilsTest, TestLimitAppliedAfterScaleV2,
369 // Value of fix_audio_coupled_haptics_scaling is not important, should work with either
370 REQUIRES_FLAGS_ENABLED(ACONFIG_FLAG(FLAG_NS, haptics_scale_v2_enabled))) {
371 // Scaled = { 0.2, -0.2, 0.15f, -0.07f };
372 float expectedClippedVeryHigh[TEST_BUFFER_LENGTH] = { 0.15f, -0.15f, 0.15f, -0.07f };
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000373 scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
Lais Andrade045376e2024-07-24 15:35:07 +0100374 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
375
376 // Scaled = { 1.02f, -1.02f, 0.51f, -0.2f }
377 float expectedClippedVeryLow[TEST_BUFFER_LENGTH] = { 0.7f, -0.7f, 0.51f, -0.2f };
Liana Kazanova (xWF)73485b82024-09-11 18:25:57 +0000378 scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
Lais Andrade045376e2024-07-24 15:35:07 +0100379 EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
380}