xref: /aosp_15_r20/frameworks/native/libs/vibrator/tests/ExternalVibrationUtilsTest.cpp (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1 /*
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 
26 using namespace android;
27 using namespace testing;
28 
29 using HapticScale = os::HapticScale;
30 using HapticLevel = os::HapticLevel;
31 
32 static constexpr float TEST_TOLERANCE = 1e-2f;
33 static constexpr size_t TEST_BUFFER_LENGTH = 4;
34 static float TEST_BUFFER[TEST_BUFFER_LENGTH] = { 1, -1, 0.5f, -0.2f };
35 
36 class ExternalVibrationUtilsTest : public Test {
37 public:
SetUp()38     void SetUp() override {
39         std::copy(std::begin(TEST_BUFFER), std::end(TEST_BUFFER), std::begin(mBuffer));
40     }
41 
42 protected:
scaleBuffer(HapticLevel hapticLevel)43     void scaleBuffer(HapticLevel hapticLevel) {
44         scaleBuffer(HapticScale(hapticLevel));
45     }
46 
scaleBuffer(HapticLevel hapticLevel,float adaptiveScaleFactor)47     void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor) {
48         scaleBuffer(hapticLevel, adaptiveScaleFactor, 0 /* limit */);
49     }
50 
scaleBuffer(HapticLevel hapticLevel,float adaptiveScaleFactor,float limit)51     void scaleBuffer(HapticLevel hapticLevel, float adaptiveScaleFactor, float limit) {
52         scaleBuffer(HapticScale(hapticLevel, -1 /* scaleFactor */, adaptiveScaleFactor), limit);
53     }
54 
scaleBuffer(HapticScale hapticScale)55     void scaleBuffer(HapticScale hapticScale) {
56         scaleBuffer(hapticScale, 0 /* limit */);
57     }
58 
scaleBuffer(HapticScale hapticScale,float limit)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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleMute,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))67 TEST_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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleMute,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))77 TEST_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))) {
80     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2Mute,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))87 TEST_F_WITH_FLAGS(
88         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))) {
91     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleNone,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))98 TEST_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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleNone,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))108 TEST_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))) {
111     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2None,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))118 TEST_F_WITH_FLAGS(
119         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))) {
122     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLegacyScaleToHapticLevel,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))129 TEST_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))) {
132     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestFixedScaleToHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))149 TEST_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))) {
152     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))169 TEST_F_WITH_FLAGS(
170         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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToScaleFactorUndefinedUsesHapticLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))190 TEST_F_WITH_FLAGS(
191         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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestScaleV2ToScaleFactorIgnoresLevel,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))200 TEST_F_WITH_FLAGS(
201         ExternalVibrationUtilsTest, TestScaleV2ToScaleFactorIgnoresLevel,
202         // 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))) {
204     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIsIgnoredLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))223 TEST_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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))231 TEST_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))) {
234     // 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 
240     // Haptic level scale up then adaptive scale down
241     float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.13f };
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, 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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIgnoredFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))261 TEST_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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))269 TEST_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))) {
272     // 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 
278     // Haptic level scale up then adaptive scale down
279     float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.16f, -0.07f };
280     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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorUndefinedIgnoredScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))299 TEST_F_WITH_FLAGS(
300         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))) {
303     float expectedVeryHigh[TEST_BUFFER_LENGTH] = {1, -1, 0.8f, -0.38f};
304     scaleBuffer(HapticLevel::VERY_HIGH, -1.0f /* adaptiveScaleFactor */);
305     EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
306 }
307 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestAdaptiveScaleFactorAppliedAfterScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))308 TEST_F_WITH_FLAGS(
309         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))) {
312     // Adaptive scale mutes vibration
313     float expectedMuted[TEST_BUFFER_LENGTH];
314     std::fill(std::begin(expectedMuted), std::end(expectedMuted), 0);
315     scaleBuffer(HapticLevel::VERY_HIGH, 0.0f /* adaptiveScaleFactor */);
316     EXPECT_FLOATS_NEARLY_EQ(expectedMuted, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
317 
318     // Haptic level scale up then adaptive scale down
319     float expectedVeryHigh[TEST_BUFFER_LENGTH] = { 0.2, -0.2, 0.15f, -0.07f };
320     scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */);
321     EXPECT_FLOATS_NEARLY_EQ(expectedVeryHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
322 
323     // Haptic level scale up then adaptive scale up
324     float expectedHigh[TEST_BUFFER_LENGTH] = { 1.5f, -1.5f, 0.95f, -0.41f };
325     scaleBuffer(HapticLevel::HIGH, 1.5f /* adaptiveScaleFactor */);
326     EXPECT_FLOATS_NEARLY_EQ(expectedHigh, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
327 
328     // Haptic level scale down then adaptive scale down
329     float expectedLow[TEST_BUFFER_LENGTH] = { 0.42f, -0.42f, 0.21f, -0.08f };
330     scaleBuffer(HapticLevel::LOW, 0.6f /* adaptiveScaleFactor */);
331     EXPECT_FLOATS_NEARLY_EQ(expectedLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
332 
333     // Haptic level scale down then adaptive scale up
334     float expectedVeryLow[TEST_BUFFER_LENGTH] = { 1.02f, -1.02f, 0.51f, -0.2f };
335     scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */);
336     EXPECT_FLOATS_NEARLY_EQ(expectedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
337 }
338 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterLegacyScale,REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling),ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))339 TEST_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))) {
342     // 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 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterFixedScale,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,fix_audio_coupled_haptics_scaling)),REQUIRES_FLAGS_DISABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))353 TEST_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))) {
356     // 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 }
366 
TEST_F_WITH_FLAGS(ExternalVibrationUtilsTest,TestLimitAppliedAfterScaleV2,REQUIRES_FLAGS_ENABLED (ACONFIG_FLAG (FLAG_NS,haptics_scale_v2_enabled)))367 TEST_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 };
373     scaleBuffer(HapticLevel::VERY_HIGH, 0.2f /* adaptiveScaleFactor */, 0.15f /* limit */);
374     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 };
378     scaleBuffer(HapticLevel::VERY_LOW, 2 /* adaptiveScaleFactor */, 0.7f /* limit */);
379     EXPECT_FLOATS_NEARLY_EQ(expectedClippedVeryLow, mBuffer, TEST_BUFFER_LENGTH, TEST_TOLERANCE);
380 }
381