xref: /aosp_15_r20/system/media/tests/audio_effects_utils_tests.cpp (revision b9df5ad1c9ac98a7fefaac271a55f7ae3db05414)
1*b9df5ad1SAndroid Build Coastguard Worker /*
2*b9df5ad1SAndroid Build Coastguard Worker  * Copyright (C) 2023 The Android Open Source Project
3*b9df5ad1SAndroid Build Coastguard Worker  *
4*b9df5ad1SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*b9df5ad1SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*b9df5ad1SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*b9df5ad1SAndroid Build Coastguard Worker  *
8*b9df5ad1SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*b9df5ad1SAndroid Build Coastguard Worker  *
10*b9df5ad1SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*b9df5ad1SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*b9df5ad1SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*b9df5ad1SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*b9df5ad1SAndroid Build Coastguard Worker  * limitations under the License.
15*b9df5ad1SAndroid Build Coastguard Worker  */
16*b9df5ad1SAndroid Build Coastguard Worker 
17*b9df5ad1SAndroid Build Coastguard Worker #include <gtest/gtest.h>
18*b9df5ad1SAndroid Build Coastguard Worker #include <cstddef>
19*b9df5ad1SAndroid Build Coastguard Worker #include <cstdint>
20*b9df5ad1SAndroid Build Coastguard Worker #include <cstring>
21*b9df5ad1SAndroid Build Coastguard Worker #include <limits>
22*b9df5ad1SAndroid Build Coastguard Worker #include <locale>
23*b9df5ad1SAndroid Build Coastguard Worker 
24*b9df5ad1SAndroid Build Coastguard Worker #define LOG_TAG "EffectParamWrapper_Test"
25*b9df5ad1SAndroid Build Coastguard Worker #include <log/log.h>
26*b9df5ad1SAndroid Build Coastguard Worker #include <system/audio_effects/audio_effects_utils.h>
27*b9df5ad1SAndroid Build Coastguard Worker 
28*b9df5ad1SAndroid Build Coastguard Worker using namespace android;
29*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::EffectParamReader;
30*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::EffectParamWrapper;
31*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::EffectParamWriter;
32*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::operator==;
33*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::operator!=;
34*b9df5ad1SAndroid Build Coastguard Worker using android::effect::utils::ToString;
35*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,setAndGetMatches)36*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, setAndGetMatches) {
37*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.psize = 2, .vsize = 0x10};
38*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper = EffectParamWrapper(param);
39*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t target = wrapper.getEffectParam();
40*b9df5ad1SAndroid Build Coastguard Worker     const auto targetWrapper = EffectParamWrapper(target);
41*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(0 == std::memcmp(&param, &target, sizeof(effect_param_t)));
42*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(targetWrapper, wrapper);
43*b9df5ad1SAndroid Build Coastguard Worker }
44*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,validateCmdSize)45*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, validateCmdSize) {
46*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.psize = 1, .vsize = 4};
47*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper = EffectParamWrapper(param);
48*b9df5ad1SAndroid Build Coastguard Worker     size_t minCmdSize = sizeof(effect_param_t) +
49*b9df5ad1SAndroid Build Coastguard Worker                         wrapper.getPaddedParameterSize() +
50*b9df5ad1SAndroid Build Coastguard Worker                         wrapper.getValueSize();
51*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(wrapper.validateCmdSize(minCmdSize - 1));
52*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateCmdSize(minCmdSize));
53*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateCmdSize(minCmdSize + 1));
54*b9df5ad1SAndroid Build Coastguard Worker }
55*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,validateCmdSizeOverflow)56*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, validateCmdSizeOverflow) {
57*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.psize = std::numeric_limits<uint32_t>::max(),
58*b9df5ad1SAndroid Build Coastguard Worker                             .vsize = std::numeric_limits<uint32_t>::max()};
59*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper = EffectParamWrapper(param);
60*b9df5ad1SAndroid Build Coastguard Worker     uint64_t minCmdSize = (uint64_t)sizeof(effect_param_t) +
61*b9df5ad1SAndroid Build Coastguard Worker                           wrapper.getPaddedParameterSize() +
62*b9df5ad1SAndroid Build Coastguard Worker                           wrapper.getValueSize();
63*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(wrapper.validateCmdSize(minCmdSize - 1));
64*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateCmdSize(minCmdSize));
65*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateCmdSize(minCmdSize + 1));
66*b9df5ad1SAndroid Build Coastguard Worker }
67*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,validateParamValueSize)68*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, validateParamValueSize) {
69*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.psize = 1, .vsize = 4};
70*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper = EffectParamWrapper(param);
71*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateParamValueSize(param.psize, param.vsize));
72*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateParamValueSize(0, param.vsize));
73*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.validateParamValueSize(param.psize, 0));
74*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(wrapper.validateParamValueSize(param.psize + 1, 0));
75*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(wrapper.validateParamValueSize(0, param.vsize + 1));
76*b9df5ad1SAndroid Build Coastguard Worker }
77*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,padding)78*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, padding) {
79*b9df5ad1SAndroid Build Coastguard Worker     for (size_t i = 0; i < 0x100; i++) {
80*b9df5ad1SAndroid Build Coastguard Worker       EXPECT_EQ(
81*b9df5ad1SAndroid Build Coastguard Worker           sizeof(uint32_t) * ((i + sizeof(uint32_t) - 1) / sizeof(uint32_t)),
82*b9df5ad1SAndroid Build Coastguard Worker           EffectParamWrapper::padding(i))
83*b9df5ad1SAndroid Build Coastguard Worker           << i;
84*b9df5ad1SAndroid Build Coastguard Worker     }
85*b9df5ad1SAndroid Build Coastguard Worker }
86*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,getPaddedParameterSize)87*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, getPaddedParameterSize) {
88*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t psize1 = {.psize = 1};
89*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper1 = EffectParamWrapper(psize1);
90*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(4, wrapper1.getPaddedParameterSize());
91*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(4, wrapper1.padding(psize1.psize));
92*b9df5ad1SAndroid Build Coastguard Worker 
93*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t psize4 = {.psize = 4};
94*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper4 = EffectParamWrapper(psize4);
95*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(4, wrapper4.getPaddedParameterSize());
96*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(wrapper4.getPaddedParameterSize(), wrapper4.padding(psize4.psize));
97*b9df5ad1SAndroid Build Coastguard Worker 
98*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t psize6 = {.psize = 6};
99*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper6 = EffectParamWrapper(psize6);
100*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(8, wrapper6.getPaddedParameterSize());
101*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(wrapper6.getPaddedParameterSize(), wrapper6.padding(psize6.psize));
102*b9df5ad1SAndroid Build Coastguard Worker }
103*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,getPVSize)104*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, getPVSize) {
105*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t vsize1 = {.psize = 0xff, .vsize = 1};
106*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper1 = EffectParamWrapper(vsize1);
107*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize1.vsize, wrapper1.getValueSize());
108*b9df5ad1SAndroid Build Coastguard Worker 
109*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t vsize2 = {.psize = 0xbe, .vsize = 0xff};
110*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper2 = EffectParamWrapper(vsize2);
111*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize2.vsize, wrapper2.getValueSize());
112*b9df5ad1SAndroid Build Coastguard Worker 
113*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize1.psize, wrapper1.getParameterSize());
114*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize1.vsize, wrapper1.getValueSize());
115*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(sizeof(effect_param_t) + EffectParamWrapper::padding(vsize1.psize) + vsize1.vsize,
116*b9df5ad1SAndroid Build Coastguard Worker               wrapper1.getTotalSize());
117*b9df5ad1SAndroid Build Coastguard Worker 
118*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize2.psize, wrapper2.getParameterSize());
119*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(vsize2.vsize, wrapper2.getValueSize());
120*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(sizeof(effect_param_t) + EffectParamWrapper::padding(vsize2.psize) + vsize2.vsize,
121*b9df5ad1SAndroid Build Coastguard Worker               wrapper2.getTotalSize());
122*b9df5ad1SAndroid Build Coastguard Worker }
123*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWrapperTest,toString)124*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWrapperTest, toString) {
125*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.status = -1, .psize = 2, .vsize = 4};
126*b9df5ad1SAndroid Build Coastguard Worker     const auto wrapper = EffectParamWrapper(param);
127*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.toString().find("effect_param_t: ") != std::string::npos);
128*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.toString().find("status: -1") != std::string::npos);
129*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.toString().find("p: 2") != std::string::npos);
130*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(wrapper.toString().find("v: 4") != std::string::npos);
131*b9df5ad1SAndroid Build Coastguard Worker }
132*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterTest,writeReadFromData)133*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterTest, writeReadFromData) {
134*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint32_t dataLength = 8;
135*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t testData[dataLength] = {0x200,  0x0,    0xffffu, 0xbead,
136*b9df5ad1SAndroid Build Coastguard Worker                                                0xfefe, 0x5555, 0xeeee,  0x2};
137*b9df5ad1SAndroid Build Coastguard Worker     uint16_t targetData[dataLength] = {0};
138*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(testData)];
139*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
140*b9df5ad1SAndroid Build Coastguard Worker     param->psize = 0;
141*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = sizeof(testData);
142*b9df5ad1SAndroid Build Coastguard Worker     auto wrapper = EffectParamWriter(*param);
143*b9df5ad1SAndroid Build Coastguard Worker 
144*b9df5ad1SAndroid Build Coastguard Worker     // write testData into effect_param_t data buffer
145*b9df5ad1SAndroid Build Coastguard Worker     ASSERT_EQ(OK, wrapper.writeToData(&testData, sizeof(testData) /* len */,
146*b9df5ad1SAndroid Build Coastguard Worker                                 0 /* offset */, sizeof(testData) /* max */))
147*b9df5ad1SAndroid Build Coastguard Worker         << wrapper.toString();
148*b9df5ad1SAndroid Build Coastguard Worker 
149*b9df5ad1SAndroid Build Coastguard Worker     // read first half and compare
150*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK,
151*b9df5ad1SAndroid Build Coastguard Worker               wrapper.readFromData(
152*b9df5ad1SAndroid Build Coastguard Worker                   &targetData, dataLength * sizeof(uint16_t) >> 1 /* len */,
153*b9df5ad1SAndroid Build Coastguard Worker                   0 /* offset */, dataLength * sizeof(uint16_t) >> 1 /* max */))
154*b9df5ad1SAndroid Build Coastguard Worker         << wrapper.toString();
155*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&testData, &targetData,
156*b9df5ad1SAndroid Build Coastguard Worker                              dataLength * sizeof(uint16_t) >> 1));
157*b9df5ad1SAndroid Build Coastguard Worker 
158*b9df5ad1SAndroid Build Coastguard Worker     // read second half and compare
159*b9df5ad1SAndroid Build Coastguard Worker     std::memset(&targetData, 0, sizeof(testData));
160*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, wrapper.readFromData(
161*b9df5ad1SAndroid Build Coastguard Worker                       &targetData, dataLength * sizeof(uint16_t) >> 1 /* len */,
162*b9df5ad1SAndroid Build Coastguard Worker                       dataLength * sizeof(uint16_t) >> 1 /* offset */,
163*b9df5ad1SAndroid Build Coastguard Worker                       sizeof(testData) /* max */))
164*b9df5ad1SAndroid Build Coastguard Worker         << wrapper.toString();
165*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(testData + dataLength / 2, &targetData,
166*b9df5ad1SAndroid Build Coastguard Worker                              dataLength * sizeof(uint16_t) >> 1));
167*b9df5ad1SAndroid Build Coastguard Worker 
168*b9df5ad1SAndroid Build Coastguard Worker     // read all and compare
169*b9df5ad1SAndroid Build Coastguard Worker     std::memset(&targetData, 0, sizeof(testData));
170*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, wrapper.readFromData(&targetData, sizeof(testData), 0 /* offset */,
171*b9df5ad1SAndroid Build Coastguard Worker                                        sizeof(testData) /* max */))
172*b9df5ad1SAndroid Build Coastguard Worker         << wrapper.toString();
173*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&testData, &targetData, sizeof(testData)));
174*b9df5ad1SAndroid Build Coastguard Worker }
175*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterReaderTest,writeAndReadParameterOneByOne)176*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterReaderTest, writeAndReadParameterOneByOne) {
177*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t data[11] = {
178*b9df5ad1SAndroid Build Coastguard Worker         0x0f0f, 0x2020, 0xffff, 0xbead, 0x5e5e, 0x0 /* padding */,
179*b9df5ad1SAndroid Build Coastguard Worker         0xe5e5, 0xeeee, 0x1111, 0x8888, 0xabab};
180*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
181*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
182*b9df5ad1SAndroid Build Coastguard Worker     param->psize = 5 * sizeof(uint16_t);
183*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = 5 * sizeof(uint16_t);
184*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
185*b9df5ad1SAndroid Build Coastguard Worker     auto reader = EffectParamReader(*param);
186*b9df5ad1SAndroid Build Coastguard Worker 
187*b9df5ad1SAndroid Build Coastguard Worker     // write testData into effect_param_t data buffer
188*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0]));
189*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[1]));
190*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[2]));
191*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[3]));
192*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[4]));
193*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToParameter(&data[5])); // expect write error
194*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[6]));
195*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[7]));
196*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[8]));
197*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[9]));
198*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[10]));
199*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToValue(&data[10])); // expect write error
200*b9df5ad1SAndroid Build Coastguard Worker 
201*b9df5ad1SAndroid Build Coastguard Worker     // read and compare
202*b9df5ad1SAndroid Build Coastguard Worker     uint16_t getData[12] = {};
203*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[0]));
204*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[1]));
205*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[2]));
206*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[3]));
207*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[4]));
208*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromParameter(&getData[5])); // expect read error
209*b9df5ad1SAndroid Build Coastguard Worker 
210*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[6]));
211*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[7]));
212*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[8]));
213*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[9]));
214*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[10]));
215*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromValue(&getData[11])); // expect read error
216*b9df5ad1SAndroid Build Coastguard Worker 
217*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&buf[sizeof(effect_param_t)], &data, sizeof(data)));
218*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&getData, &data, sizeof(data)));
219*b9df5ad1SAndroid Build Coastguard Worker }
220*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterReaderTest,writeAndReadParameterN)221*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterReaderTest, writeAndReadParameterN) {
222*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t data[11] = {
223*b9df5ad1SAndroid Build Coastguard Worker         0x0f0f, 0x2020, 0xffff, 0x1111, 0xabab, 0x0 /* padding */,
224*b9df5ad1SAndroid Build Coastguard Worker         0xe5e5, 0xeeee, 0xbead, 0x8888, 0x5e5e};
225*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
226*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
227*b9df5ad1SAndroid Build Coastguard Worker     param->psize = 5 * sizeof(uint16_t);
228*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = 5 * sizeof(uint16_t);
229*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
230*b9df5ad1SAndroid Build Coastguard Worker     auto reader = EffectParamReader(*param);
231*b9df5ad1SAndroid Build Coastguard Worker 
232*b9df5ad1SAndroid Build Coastguard Worker     // write testData into effect_param_t data buffer
233*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0]));
234*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[1], 2));
235*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[3], 2));
236*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToParameter(&data[5])); // expect write error
237*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[6], 3));
238*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[9], 2));
239*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToValue(&data[10])); // expect write error
240*b9df5ad1SAndroid Build Coastguard Worker 
241*b9df5ad1SAndroid Build Coastguard Worker     // read and compare
242*b9df5ad1SAndroid Build Coastguard Worker     uint16_t getData[12] = {};
243*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[0], 2));
244*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[2]));
245*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[3], 2));
246*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromParameter(&getData[5])); // expect read error
247*b9df5ad1SAndroid Build Coastguard Worker 
248*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[6]));
249*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[7], 2));
250*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[9], 2));
251*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromValue(&getData[11])); // expect read error
252*b9df5ad1SAndroid Build Coastguard Worker 
253*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&buf[sizeof(effect_param_t)], &data, sizeof(data)));
254*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&getData, &data, sizeof(data)));
255*b9df5ad1SAndroid Build Coastguard Worker }
256*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterReaderTest,writeAndReadParameterBlock)257*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterReaderTest, writeAndReadParameterBlock) {
258*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t data[11] = {
259*b9df5ad1SAndroid Build Coastguard Worker         0xe5e5, 0xeeee, 0x1111, 0x8888, 0xabab, 0x0, /* padding */
260*b9df5ad1SAndroid Build Coastguard Worker         0x0f0f, 0x2020, 0xffff, 0xbead, 0x5e5e,
261*b9df5ad1SAndroid Build Coastguard Worker     };
262*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
263*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
264*b9df5ad1SAndroid Build Coastguard Worker     param->psize = 5 * sizeof(uint16_t);
265*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = 5 * sizeof(uint16_t);
266*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
267*b9df5ad1SAndroid Build Coastguard Worker     auto reader = EffectParamReader(*param);
268*b9df5ad1SAndroid Build Coastguard Worker 
269*b9df5ad1SAndroid Build Coastguard Worker     // write testData into effect_param_t data buffer
270*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0], 5));
271*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToParameter(&data[5])); // expect write error
272*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[6], 5));
273*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToValue(&data[10])); // expect write error
274*b9df5ad1SAndroid Build Coastguard Worker     writer.finishValueWrite();
275*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(5 * sizeof(uint16_t), writer.getValueSize());
276*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(sizeof(effect_param_t) +
277*b9df5ad1SAndroid Build Coastguard Worker                   6 * sizeof(uint16_t) /* padded parameter */ +
278*b9df5ad1SAndroid Build Coastguard Worker                   5 * sizeof(uint16_t),
279*b9df5ad1SAndroid Build Coastguard Worker               writer.getTotalSize())
280*b9df5ad1SAndroid Build Coastguard Worker         << writer.toString();
281*b9df5ad1SAndroid Build Coastguard Worker 
282*b9df5ad1SAndroid Build Coastguard Worker     // read and compare
283*b9df5ad1SAndroid Build Coastguard Worker     uint16_t getData[12] = {};
284*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[0], 5));
285*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromParameter(&getData[5])); // expect read error
286*b9df5ad1SAndroid Build Coastguard Worker 
287*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[6], 5));
288*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromValue(&getData[11])); // expect read error
289*b9df5ad1SAndroid Build Coastguard Worker 
290*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&buf[sizeof(effect_param_t)], &data, sizeof(data)));
291*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&getData, &data, sizeof(data)));
292*b9df5ad1SAndroid Build Coastguard Worker }
293*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterTest,setStatus)294*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterTest, setStatus) {
295*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t param = {.status = -1, .psize = 2, .vsize = 4};
296*b9df5ad1SAndroid Build Coastguard Worker     auto wrapper = EffectParamWriter(param);
297*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(-1, wrapper.getStatus()) << wrapper.toString();
298*b9df5ad1SAndroid Build Coastguard Worker     wrapper.setStatus(0);
299*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, wrapper.getStatus()) << wrapper.toString();
300*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(wrapper.getStatus(), param.status);
301*b9df5ad1SAndroid Build Coastguard Worker     wrapper.setStatus(0x10);
302*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0x10, wrapper.getStatus()) << wrapper.toString();
303*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(wrapper.getStatus(), param.status) << wrapper.toString();
304*b9df5ad1SAndroid Build Coastguard Worker }
305*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterReaderTest,writeAndReadParameterDiffSize)306*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterReaderTest, writeAndReadParameterDiffSize) {
307*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t data[11] = {
308*b9df5ad1SAndroid Build Coastguard Worker         0xbead, 0x5e5e, 0x0f0f, 0x2020, 0xffff, 0x0 /* padding */,
309*b9df5ad1SAndroid Build Coastguard Worker         0xe5e5, 0xeeee, 0x1111, 0x8888, 0xabab};
310*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
311*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
312*b9df5ad1SAndroid Build Coastguard Worker     param->psize = 5 * sizeof(uint16_t);
313*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = 5 * sizeof(uint16_t);
314*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
315*b9df5ad1SAndroid Build Coastguard Worker     auto reader = EffectParamReader(*param);
316*b9df5ad1SAndroid Build Coastguard Worker 
317*b9df5ad1SAndroid Build Coastguard Worker     // write testData into effect_param_t data buffer
318*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0]));
319*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter((uint32_t *)&data[1]));
320*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter((uint32_t *)&data[3]));
321*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToParameter(&data[5])); // expect write error
322*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue((uint32_t *)&data[6], 2));
323*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[10]));
324*b9df5ad1SAndroid Build Coastguard Worker     writer.finishValueWrite();
325*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(5 * sizeof(uint16_t), writer.getValueSize());
326*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(sizeof(effect_param_t) + sizeof(data), writer.getTotalSize())
327*b9df5ad1SAndroid Build Coastguard Worker         << writer.toString();
328*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.writeToValue(&data[10])); // expect write error
329*b9df5ad1SAndroid Build Coastguard Worker     writer.finishValueWrite();
330*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(5 * sizeof(uint16_t), writer.getValueSize());
331*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(sizeof(effect_param_t) + sizeof(data), writer.getTotalSize())
332*b9df5ad1SAndroid Build Coastguard Worker         << writer.toString();
333*b9df5ad1SAndroid Build Coastguard Worker 
334*b9df5ad1SAndroid Build Coastguard Worker     // read and compare
335*b9df5ad1SAndroid Build Coastguard Worker     uint16_t getData[12] = {};
336*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter((uint32_t *)&getData[0], 2));
337*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromParameter(&getData[4]));
338*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromParameter(&getData[5])); // expect read error
339*b9df5ad1SAndroid Build Coastguard Worker 
340*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue(&getData[6]));
341*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue((uint32_t *)&getData[7]));
342*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, reader.readFromValue((uint32_t *)&getData[9]));
343*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, reader.readFromValue(&getData[11])); // expect read error
344*b9df5ad1SAndroid Build Coastguard Worker 
345*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&buf[sizeof(effect_param_t)], &data, sizeof(data)));
346*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0, std::memcmp(&getData, &data, sizeof(data)));
347*b9df5ad1SAndroid Build Coastguard Worker }
348*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterTest,overwriteWithSameSize)349*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterTest, overwriteWithSameSize) {
350*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint32_t pSizeInShorts = 5, vSizeInShorts = 4;
351*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t
352*b9df5ad1SAndroid Build Coastguard Worker         data[EffectParamWrapper::padding(pSizeInShorts) + vSizeInShorts] = {
353*b9df5ad1SAndroid Build Coastguard Worker             // parameter
354*b9df5ad1SAndroid Build Coastguard Worker             0xe5e5, 0xeeee, 0x1111, 0x8888, 0xabab, 0x0 /* padding */,
355*b9df5ad1SAndroid Build Coastguard Worker             // value
356*b9df5ad1SAndroid Build Coastguard Worker             0x0f0f, 0x2020, 0xffff, 0xbead};
357*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
358*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
359*b9df5ad1SAndroid Build Coastguard Worker     param->psize = pSizeInShorts * sizeof(uint16_t); // padded to 6 * sizeof(uint16_t)
360*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = vSizeInShorts * sizeof(uint16_t);
361*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
362*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0], pSizeInShorts));
363*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[6], vSizeInShorts));
364*b9df5ad1SAndroid Build Coastguard Worker     writer.finishValueWrite();
365*b9df5ad1SAndroid Build Coastguard Worker 
366*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint32_t newPSizeInShorts = 3, newVSizeInShorts = 6;
367*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t
368*b9df5ad1SAndroid Build Coastguard Worker         newdata[EffectParamWrapper::padding(newPSizeInShorts) + newVSizeInShorts] = {
369*b9df5ad1SAndroid Build Coastguard Worker             // parameter
370*b9df5ad1SAndroid Build Coastguard Worker             0xffff, 0x2020, 0xbead, 0x0 /* padding */,
371*b9df5ad1SAndroid Build Coastguard Worker             // value
372*b9df5ad1SAndroid Build Coastguard Worker             0xabab, 0xeeee, 0x0f0f, 0x5e5e, 0x8888, 0xe5e5};
373*b9df5ad1SAndroid Build Coastguard Worker     char newbuf[sizeof(effect_param_t) + sizeof(newdata)] = {};
374*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *newparam = (effect_param_t *)(&newbuf);
375*b9df5ad1SAndroid Build Coastguard Worker     newparam->psize = newPSizeInShorts * sizeof(uint16_t); // padded to 4 * sizeof(uint16_t)
376*b9df5ad1SAndroid Build Coastguard Worker     newparam->vsize = newVSizeInShorts * sizeof(uint16_t);
377*b9df5ad1SAndroid Build Coastguard Worker     auto newwriter = EffectParamWriter(*newparam);
378*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, newwriter.writeToParameter(newdata, newPSizeInShorts));
379*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, newwriter.writeToValue(
380*b9df5ad1SAndroid Build Coastguard Worker                       &newdata[EffectParamWrapper::padding(newPSizeInShorts)],
381*b9df5ad1SAndroid Build Coastguard Worker                       newVSizeInShorts));
382*b9df5ad1SAndroid Build Coastguard Worker     newwriter.finishValueWrite();
383*b9df5ad1SAndroid Build Coastguard Worker 
384*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.overwrite(newwriter.getEffectParam()));
385*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(0,
386*b9df5ad1SAndroid Build Coastguard Worker               std::memcmp(&writer.getEffectParam(), &newwriter.getEffectParam(),
387*b9df5ad1SAndroid Build Coastguard Worker                           newwriter.getTotalSize()));
388*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(newwriter.getParameterSize(), writer.getParameterSize());
389*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(newwriter.getValueSize(), writer.getValueSize());
390*b9df5ad1SAndroid Build Coastguard Worker }
391*b9df5ad1SAndroid Build Coastguard Worker 
TEST(EffectParamWriterTest,overwriteWithLargerSize)392*b9df5ad1SAndroid Build Coastguard Worker TEST(EffectParamWriterTest, overwriteWithLargerSize) {
393*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint32_t pSizeInShorts = 5, vSizeInShorts = 4;
394*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t data[EffectParamWrapper::padding(pSizeInShorts) + vSizeInShorts] = {
395*b9df5ad1SAndroid Build Coastguard Worker         // parameter
396*b9df5ad1SAndroid Build Coastguard Worker         0xe5e5, 0xeeee, 0x1111, 0x8888, 0xabab, 0x0 /* padding */,
397*b9df5ad1SAndroid Build Coastguard Worker         // value
398*b9df5ad1SAndroid Build Coastguard Worker         0x0f0f, 0x2020, 0xffff, 0xbead};
399*b9df5ad1SAndroid Build Coastguard Worker     char buf[sizeof(effect_param_t) + sizeof(data)] = {};
400*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *param = (effect_param_t *)(&buf);
401*b9df5ad1SAndroid Build Coastguard Worker     param->psize = pSizeInShorts * sizeof(uint16_t); // padded to 6 * sizeof(uint16_t)
402*b9df5ad1SAndroid Build Coastguard Worker     param->vsize = vSizeInShorts * sizeof(uint16_t);
403*b9df5ad1SAndroid Build Coastguard Worker     auto writer = EffectParamWriter(*param);
404*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToParameter(&data[0], pSizeInShorts));
405*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, writer.writeToValue(&data[6], vSizeInShorts));
406*b9df5ad1SAndroid Build Coastguard Worker     writer.finishValueWrite();
407*b9df5ad1SAndroid Build Coastguard Worker 
408*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint32_t newPSizeInShorts = 3, newVSizeInShorts = 8;
409*b9df5ad1SAndroid Build Coastguard Worker     constexpr uint16_t
410*b9df5ad1SAndroid Build Coastguard Worker         newdata[EffectParamWrapper::padding(newPSizeInShorts) + newVSizeInShorts] = {
411*b9df5ad1SAndroid Build Coastguard Worker             // parameter
412*b9df5ad1SAndroid Build Coastguard Worker             0xffff, 0x2020, 0xbead, 0x0 /* padding */,
413*b9df5ad1SAndroid Build Coastguard Worker             // value
414*b9df5ad1SAndroid Build Coastguard Worker             0xabab, 0xeeee, 0x0f0f, 0x5e5e, 0x8888, 0xe5e5, 0x5f5f, 0x1234};
415*b9df5ad1SAndroid Build Coastguard Worker     char newbuf[sizeof(effect_param_t) + sizeof(newdata)] = {};
416*b9df5ad1SAndroid Build Coastguard Worker     effect_param_t *newparam = (effect_param_t *)(&newbuf);
417*b9df5ad1SAndroid Build Coastguard Worker     newparam->psize = newPSizeInShorts * sizeof(uint16_t); // padded to 4 * sizeof(uint16_t)
418*b9df5ad1SAndroid Build Coastguard Worker     newparam->vsize = newVSizeInShorts * sizeof(uint16_t);
419*b9df5ad1SAndroid Build Coastguard Worker     auto newwriter = EffectParamWriter(*newparam);
420*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, newwriter.writeToParameter(newdata, newPSizeInShorts));
421*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(OK, newwriter.writeToValue(
422*b9df5ad1SAndroid Build Coastguard Worker                       &newdata[EffectParamWrapper::padding(newPSizeInShorts)],
423*b9df5ad1SAndroid Build Coastguard Worker                       newVSizeInShorts));
424*b9df5ad1SAndroid Build Coastguard Worker     newwriter.finishValueWrite();
425*b9df5ad1SAndroid Build Coastguard Worker 
426*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_NE(OK, writer.overwrite(newwriter.getEffectParam()));
427*b9df5ad1SAndroid Build Coastguard Worker }
428*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,EqualityOperator)429*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, EqualityOperator) {
430*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid1 = {0x12345678, 0x1234, 0x5678, 0x90AB, {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01}};
431*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid2 = {0x12345678, 0x1234, 0x5678, 0x90AB, {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01}};
432*b9df5ad1SAndroid Build Coastguard Worker 
433*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(uuid1 == uuid2);
434*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(uuid1 != uuid2);
435*b9df5ad1SAndroid Build Coastguard Worker }
436*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,InequalityOperator)437*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, InequalityOperator) {
438*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid1 = {0x12345678, 0x1234, 0x5678, 0x90AB, {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01}};
439*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid2 = {0x87654321, 0x4321, 0x8765, 0xBA09, {0x01, 0x00, 0xEF, 0xBE, 0xAD, 0xDE}};
440*b9df5ad1SAndroid Build Coastguard Worker 
441*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(uuid1 != uuid2);
442*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(uuid1 == uuid2);
443*b9df5ad1SAndroid Build Coastguard Worker }
444*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,EqualityWithModifiedNode)445*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, EqualityWithModifiedNode) {
446*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid1 = {0x12345678, 0x1234, 0x5678, 0x90AB, {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01}};
447*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid2 = uuid1;
448*b9df5ad1SAndroid Build Coastguard Worker     uuid2.node[5] = 0x02;  // Modify one byte in the `node` array
449*b9df5ad1SAndroid Build Coastguard Worker 
450*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_FALSE(uuid1 == uuid2);
451*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_TRUE(uuid1 != uuid2);
452*b9df5ad1SAndroid Build Coastguard Worker }
453*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,ToString)454*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, ToString) {
455*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid = {0x12345678, 0x1234, 0x5678, 0x90AB, {0xDE, 0xAD, 0xBE, 0xEF, 0x00, 0x01}};
456*b9df5ad1SAndroid Build Coastguard Worker     std::string expected = "12345678-1234-5678-90ab-deadbeef0001";
457*b9df5ad1SAndroid Build Coastguard Worker 
458*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(ToString(uuid), expected);
459*b9df5ad1SAndroid Build Coastguard Worker }
460*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,ToStringUpperCase)461*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, ToStringUpperCase) {
462*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid = {0x87654321, 0x4321, 0x8765, 0xBA09, {0x01, 0x00, 0xEF, 0xBE, 0xAD, 0xDE}};
463*b9df5ad1SAndroid Build Coastguard Worker     std::string expected = "87654321-4321-8765-ba09-0100efbeadde";
464*b9df5ad1SAndroid Build Coastguard Worker 
465*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(ToString(uuid), expected);
466*b9df5ad1SAndroid Build Coastguard Worker }
467*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,ToStringAllZeros)468*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, ToStringAllZeros) {
469*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid = {0, 0, 0, 0, {0, 0, 0, 0, 0, 0}};
470*b9df5ad1SAndroid Build Coastguard Worker     std::string expected = "00000000-0000-0000-0000-000000000000";
471*b9df5ad1SAndroid Build Coastguard Worker 
472*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(ToString(uuid), expected);
473*b9df5ad1SAndroid Build Coastguard Worker }
474*b9df5ad1SAndroid Build Coastguard Worker 
TEST(AudioEffectsUtilsTest,ToStringBoundaryValues)475*b9df5ad1SAndroid Build Coastguard Worker TEST(AudioEffectsUtilsTest, ToStringBoundaryValues) {
476*b9df5ad1SAndroid Build Coastguard Worker     audio_uuid_t uuid = {0xFFFFFFFF, 0xFFFF, 0xFFFF, 0xFFFF, {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}};
477*b9df5ad1SAndroid Build Coastguard Worker     std::string expected = "ffffffff-ffff-ffff-ffff-ffffffffffff";
478*b9df5ad1SAndroid Build Coastguard Worker 
479*b9df5ad1SAndroid Build Coastguard Worker     EXPECT_EQ(ToString(uuid), expected);
480*b9df5ad1SAndroid Build Coastguard Worker }
481