1*b9df5ad1SAndroid Build Coastguard Worker /*
2*b9df5ad1SAndroid Build Coastguard Worker * Copyright (C) 2017 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 <math.h>
18*b9df5ad1SAndroid Build Coastguard Worker #include <vector>
19*b9df5ad1SAndroid Build Coastguard Worker
20*b9df5ad1SAndroid Build Coastguard Worker #include <gtest/gtest.h>
21*b9df5ad1SAndroid Build Coastguard Worker
22*b9df5ad1SAndroid Build Coastguard Worker #include <audio_utils/channels.h>
23*b9df5ad1SAndroid Build Coastguard Worker
24*b9df5ad1SAndroid Build Coastguard Worker // TODO: Make a common include file for helper functions.
25*b9df5ad1SAndroid Build Coastguard Worker
26*b9df5ad1SAndroid Build Coastguard Worker template<typename T>
checkMonotone(const T * ary,size_t size)27*b9df5ad1SAndroid Build Coastguard Worker void checkMonotone(const T *ary, size_t size)
28*b9df5ad1SAndroid Build Coastguard Worker {
29*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 1; i < size; ++i) {
30*b9df5ad1SAndroid Build Coastguard Worker EXPECT_LT(ary[i-1], ary[i]);
31*b9df5ad1SAndroid Build Coastguard Worker }
32*b9df5ad1SAndroid Build Coastguard Worker }
33*b9df5ad1SAndroid Build Coastguard Worker
34*b9df5ad1SAndroid Build Coastguard Worker template<typename T>
checkUnsignedMonotoneOrZero(const T * ary,size_t size)35*b9df5ad1SAndroid Build Coastguard Worker void checkUnsignedMonotoneOrZero(const T *ary, size_t size)
36*b9df5ad1SAndroid Build Coastguard Worker {
37*b9df5ad1SAndroid Build Coastguard Worker if (size == 0) return;
38*b9df5ad1SAndroid Build Coastguard Worker
39*b9df5ad1SAndroid Build Coastguard Worker T least = ary[0];
40*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 1; i < size; ++i) {
41*b9df5ad1SAndroid Build Coastguard Worker if (ary[i]) {
42*b9df5ad1SAndroid Build Coastguard Worker EXPECT_LT(least, ary[i]);
43*b9df5ad1SAndroid Build Coastguard Worker least = ary[i];
44*b9df5ad1SAndroid Build Coastguard Worker }
45*b9df5ad1SAndroid Build Coastguard Worker }
46*b9df5ad1SAndroid Build Coastguard Worker }
47*b9df5ad1SAndroid Build Coastguard Worker
48*b9df5ad1SAndroid Build Coastguard Worker template<typename T>
expectEq(const T & c1,const T & c2)49*b9df5ad1SAndroid Build Coastguard Worker void expectEq(const T &c1, const T &c2) {
50*b9df5ad1SAndroid Build Coastguard Worker EXPECT_EQ(c1.size(), c2.size());
51*b9df5ad1SAndroid Build Coastguard Worker EXPECT_EQ(0, memcmp(c1.data(), c2.data(), sizeof(c1[0]) * std::min(c1.size(), c2.size())));
52*b9df5ad1SAndroid Build Coastguard Worker }
53*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,geometry_constexpr)54*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, geometry_constexpr) {
55*b9df5ad1SAndroid Build Coastguard Worker using namespace android::audio_utils::channels;
56*b9df5ad1SAndroid Build Coastguard Worker // fails to compile if not const.
57*b9df5ad1SAndroid Build Coastguard Worker constexpr size_t RIGHT_IDX = 1; // bit position of AUDIO_CHANNEL_OUT_FRONT_RIGHT;
58*b9df5ad1SAndroid Build Coastguard Worker static constexpr AUDIO_GEOMETRY_SIDE checkConstexprSide = sideFromChannelIdx(RIGHT_IDX);
59*b9df5ad1SAndroid Build Coastguard Worker static constexpr AUDIO_GEOMETRY_HEIGHT checkConstexprHeight = heightFromChannelIdx(RIGHT_IDX);
60*b9df5ad1SAndroid Build Coastguard Worker static constexpr AUDIO_GEOMETRY_DEPTH checkConstexprDepth = depthFromChannelIdx(RIGHT_IDX);
61*b9df5ad1SAndroid Build Coastguard Worker (void) checkConstexprSide;
62*b9df5ad1SAndroid Build Coastguard Worker (void) checkConstexprHeight;
63*b9df5ad1SAndroid Build Coastguard Worker (void) checkConstexprDepth;
64*b9df5ad1SAndroid Build Coastguard Worker
65*b9df5ad1SAndroid Build Coastguard Worker static constexpr ssize_t leftIdx = pairIdxFromChannelIdx(RIGHT_IDX);
66*b9df5ad1SAndroid Build Coastguard Worker ASSERT_EQ(0, leftIdx);
67*b9df5ad1SAndroid Build Coastguard Worker }
68*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,geometry_range)69*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, geometry_range) {
70*b9df5ad1SAndroid Build Coastguard Worker using namespace android::audio_utils::channels;
71*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < FCC_26 + 2 /* sic */; ++i) {
72*b9df5ad1SAndroid Build Coastguard Worker const AUDIO_GEOMETRY_SIDE side = sideFromChannelIdx(i);
73*b9df5ad1SAndroid Build Coastguard Worker const AUDIO_GEOMETRY_HEIGHT height = heightFromChannelIdx(i);
74*b9df5ad1SAndroid Build Coastguard Worker const AUDIO_GEOMETRY_DEPTH depth = depthFromChannelIdx(i);
75*b9df5ad1SAndroid Build Coastguard Worker ASSERT_TRUE(side == AUDIO_GEOMETRY_SIDE_LEFT
76*b9df5ad1SAndroid Build Coastguard Worker || side == AUDIO_GEOMETRY_SIDE_RIGHT
77*b9df5ad1SAndroid Build Coastguard Worker || side == AUDIO_GEOMETRY_SIDE_CENTER);
78*b9df5ad1SAndroid Build Coastguard Worker ASSERT_TRUE(height == AUDIO_GEOMETRY_HEIGHT_BOTTOM
79*b9df5ad1SAndroid Build Coastguard Worker || height == AUDIO_GEOMETRY_HEIGHT_MIDDLE
80*b9df5ad1SAndroid Build Coastguard Worker || height == AUDIO_GEOMETRY_HEIGHT_TOP);
81*b9df5ad1SAndroid Build Coastguard Worker ASSERT_TRUE(depth == AUDIO_GEOMETRY_DEPTH_FRONT
82*b9df5ad1SAndroid Build Coastguard Worker || depth == AUDIO_GEOMETRY_DEPTH_MIDDLE
83*b9df5ad1SAndroid Build Coastguard Worker || depth == AUDIO_GEOMETRY_DEPTH_BACK);
84*b9df5ad1SAndroid Build Coastguard Worker }
85*b9df5ad1SAndroid Build Coastguard Worker }
86*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,array_lr_pair_matching)87*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, array_lr_pair_matching) {
88*b9df5ad1SAndroid Build Coastguard Worker using namespace android::audio_utils::channels;
89*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < FCC_26; ++i) {
90*b9df5ad1SAndroid Build Coastguard Worker const AUDIO_GEOMETRY_SIDE side = sideFromChannelIdx(i);
91*b9df5ad1SAndroid Build Coastguard Worker const ssize_t pairIdx = pairIdxFromChannelIdx(i);
92*b9df5ad1SAndroid Build Coastguard Worker switch (side) {
93*b9df5ad1SAndroid Build Coastguard Worker case AUDIO_GEOMETRY_SIDE_LEFT:
94*b9df5ad1SAndroid Build Coastguard Worker case AUDIO_GEOMETRY_SIDE_RIGHT: {
95*b9df5ad1SAndroid Build Coastguard Worker ASSERT_GE(pairIdx, 0);
96*b9df5ad1SAndroid Build Coastguard Worker ASSERT_LT(pairIdx, FCC_26);
97*b9df5ad1SAndroid Build Coastguard Worker const AUDIO_GEOMETRY_SIDE pairSide = side == AUDIO_GEOMETRY_SIDE_LEFT
98*b9df5ad1SAndroid Build Coastguard Worker ? AUDIO_GEOMETRY_SIDE_RIGHT : AUDIO_GEOMETRY_SIDE_LEFT;
99*b9df5ad1SAndroid Build Coastguard Worker ASSERT_EQ(pairSide, sideFromChannelIdx(pairIdx));
100*b9df5ad1SAndroid Build Coastguard Worker } break;
101*b9df5ad1SAndroid Build Coastguard Worker case AUDIO_GEOMETRY_SIDE_CENTER:
102*b9df5ad1SAndroid Build Coastguard Worker ASSERT_EQ(-1, pairIdx);
103*b9df5ad1SAndroid Build Coastguard Worker break;
104*b9df5ad1SAndroid Build Coastguard Worker }
105*b9df5ad1SAndroid Build Coastguard Worker }
106*b9df5ad1SAndroid Build Coastguard Worker }
107*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,adjust_channels)108*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, adjust_channels) {
109*b9df5ad1SAndroid Build Coastguard Worker constexpr size_t size = 65536;
110*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16ref(size);
111*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16expand(size * 2);
112*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16ary(size);
113*b9df5ad1SAndroid Build Coastguard Worker
114*b9df5ad1SAndroid Build Coastguard Worker // reference buffer is monotonic.
115*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < u16ref.size(); ++i) {
116*b9df5ad1SAndroid Build Coastguard Worker u16ref[i] = i;
117*b9df5ad1SAndroid Build Coastguard Worker }
118*b9df5ad1SAndroid Build Coastguard Worker
119*b9df5ad1SAndroid Build Coastguard Worker // expand channels from stereo to quad.
120*b9df5ad1SAndroid Build Coastguard Worker adjust_channels(
121*b9df5ad1SAndroid Build Coastguard Worker u16ref.data() /*in_buff*/,
122*b9df5ad1SAndroid Build Coastguard Worker 2 /*in_channels*/,
123*b9df5ad1SAndroid Build Coastguard Worker u16expand.data() /*out_buff*/,
124*b9df5ad1SAndroid Build Coastguard Worker 4 /*out_channels*/,
125*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) /*sample_size_in_bytes*/,
126*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) * u16ref.size() /*num_in_bytes*/);
127*b9df5ad1SAndroid Build Coastguard Worker
128*b9df5ad1SAndroid Build Coastguard Worker // expanded buffer must increase (or be zero).
129*b9df5ad1SAndroid Build Coastguard Worker checkUnsignedMonotoneOrZero(u16expand.data(), u16expand.size());
130*b9df5ad1SAndroid Build Coastguard Worker
131*b9df5ad1SAndroid Build Coastguard Worker // contract channels back to stereo.
132*b9df5ad1SAndroid Build Coastguard Worker adjust_channels(
133*b9df5ad1SAndroid Build Coastguard Worker u16expand.data() /*in_buff*/,
134*b9df5ad1SAndroid Build Coastguard Worker 4 /*in_channels*/,
135*b9df5ad1SAndroid Build Coastguard Worker u16ary.data() /*out_buff*/,
136*b9df5ad1SAndroid Build Coastguard Worker 2 /*out_channels*/,
137*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16expand[0]) /*sample_size_in_bytes*/,
138*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16expand[0]) * u16expand.size() /*num_in_bytes*/);
139*b9df5ad1SAndroid Build Coastguard Worker
140*b9df5ad1SAndroid Build Coastguard Worker // contracted array must be identical to original.
141*b9df5ad1SAndroid Build Coastguard Worker expectEq(u16ary, u16ref);
142*b9df5ad1SAndroid Build Coastguard Worker }
143*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,adjust_selected_channels)144*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, adjust_selected_channels) {
145*b9df5ad1SAndroid Build Coastguard Worker constexpr size_t size = 65536;
146*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16ref(size);
147*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16contract(size / 2);
148*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16ary(size);
149*b9df5ad1SAndroid Build Coastguard Worker
150*b9df5ad1SAndroid Build Coastguard Worker // reference buffer is monotonic.
151*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < u16ref.size(); ++i) {
152*b9df5ad1SAndroid Build Coastguard Worker u16ref[i] = i;
153*b9df5ad1SAndroid Build Coastguard Worker }
154*b9df5ad1SAndroid Build Coastguard Worker
155*b9df5ad1SAndroid Build Coastguard Worker // contract from quad to stereo.
156*b9df5ad1SAndroid Build Coastguard Worker adjust_selected_channels(
157*b9df5ad1SAndroid Build Coastguard Worker u16ref.data() /*in_buff*/,
158*b9df5ad1SAndroid Build Coastguard Worker 4 /*in_channels*/,
159*b9df5ad1SAndroid Build Coastguard Worker u16contract.data() /*out_buff*/,
160*b9df5ad1SAndroid Build Coastguard Worker 2 /*out_channels*/,
161*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) /*sample_size_in_bytes*/,
162*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) * u16ref.size() /*num_in_bytes*/);
163*b9df5ad1SAndroid Build Coastguard Worker
164*b9df5ad1SAndroid Build Coastguard Worker // contracted buffer must increase.
165*b9df5ad1SAndroid Build Coastguard Worker checkMonotone(u16contract.data(), u16contract.size());
166*b9df5ad1SAndroid Build Coastguard Worker
167*b9df5ad1SAndroid Build Coastguard Worker // initialize channels 3 and 4 of final comparison array.
168*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < u16ary.size() / 4; ++i) {
169*b9df5ad1SAndroid Build Coastguard Worker u16ary[i * 4 + 2] = u16ref[i * 4 + 2];
170*b9df5ad1SAndroid Build Coastguard Worker u16ary[i * 4 + 3] = u16ref[i * 4 + 3];
171*b9df5ad1SAndroid Build Coastguard Worker }
172*b9df5ad1SAndroid Build Coastguard Worker
173*b9df5ad1SAndroid Build Coastguard Worker // expand stereo into channels 1 and 2 of quad comparison array.
174*b9df5ad1SAndroid Build Coastguard Worker adjust_selected_channels(
175*b9df5ad1SAndroid Build Coastguard Worker u16contract.data() /*in_buff*/,
176*b9df5ad1SAndroid Build Coastguard Worker 2 /*in_channels*/,
177*b9df5ad1SAndroid Build Coastguard Worker u16ary.data() /*out_buff*/,
178*b9df5ad1SAndroid Build Coastguard Worker 4 /*out_channels*/,
179*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16contract[0]) /*sample_size_in_bytes*/,
180*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16contract[0]) * u16contract.size() /*num_in_bytes*/);
181*b9df5ad1SAndroid Build Coastguard Worker
182*b9df5ad1SAndroid Build Coastguard Worker // comparison array must be identical to original.
183*b9df5ad1SAndroid Build Coastguard Worker expectEq(u16ary, u16ref);
184*b9df5ad1SAndroid Build Coastguard Worker }
185*b9df5ad1SAndroid Build Coastguard Worker
TEST(audio_utils_channels,adjust_channels_non_destructive)186*b9df5ad1SAndroid Build Coastguard Worker TEST(audio_utils_channels, adjust_channels_non_destructive) {
187*b9df5ad1SAndroid Build Coastguard Worker constexpr size_t size = 65536; /* arbitrary large multiple of 8 */
188*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16ref(size);
189*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16contracted(size);
190*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16expanded(size);
191*b9df5ad1SAndroid Build Coastguard Worker std::vector<uint16_t> u16inout(size);
192*b9df5ad1SAndroid Build Coastguard Worker
193*b9df5ad1SAndroid Build Coastguard Worker // Reference buffer increases monotonically.
194*b9df5ad1SAndroid Build Coastguard Worker // For second test, in/out buffer begins identical to ref.
195*b9df5ad1SAndroid Build Coastguard Worker for (size_t i = 0; i < u16ref.size(); ++i) {
196*b9df5ad1SAndroid Build Coastguard Worker u16ref[i] = i;
197*b9df5ad1SAndroid Build Coastguard Worker u16inout[i] = i;
198*b9df5ad1SAndroid Build Coastguard Worker }
199*b9df5ad1SAndroid Build Coastguard Worker
200*b9df5ad1SAndroid Build Coastguard Worker // *** First test: different in/out buffers ***
201*b9df5ad1SAndroid Build Coastguard Worker
202*b9df5ad1SAndroid Build Coastguard Worker // Contract from quad to stereo.
203*b9df5ad1SAndroid Build Coastguard Worker adjust_channels_non_destructive(
204*b9df5ad1SAndroid Build Coastguard Worker u16ref.data() /*in_buff*/,
205*b9df5ad1SAndroid Build Coastguard Worker 4 /*in_channels*/,
206*b9df5ad1SAndroid Build Coastguard Worker u16contracted.data() /*out_buff*/,
207*b9df5ad1SAndroid Build Coastguard Worker 2 /*out_channels*/,
208*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) /*sample_size_in_bytes*/,
209*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16ref[0]) * u16ref.size() /*num_in_bytes*/);
210*b9df5ad1SAndroid Build Coastguard Worker
211*b9df5ad1SAndroid Build Coastguard Worker // Each half of contracted buffer should increase monotonically.
212*b9df5ad1SAndroid Build Coastguard Worker checkMonotone(u16contracted.data(), u16contracted.size() / 2);
213*b9df5ad1SAndroid Build Coastguard Worker checkMonotone(&u16contracted[u16contracted.size() / 2], u16contracted.size() / 2);
214*b9df5ad1SAndroid Build Coastguard Worker
215*b9df5ad1SAndroid Build Coastguard Worker // Expand stereo to quad
216*b9df5ad1SAndroid Build Coastguard Worker adjust_channels_non_destructive(
217*b9df5ad1SAndroid Build Coastguard Worker u16contracted.data() /*in_buff*/,
218*b9df5ad1SAndroid Build Coastguard Worker 2 /*in_channels*/,
219*b9df5ad1SAndroid Build Coastguard Worker u16expanded.data() /*out_buff*/,
220*b9df5ad1SAndroid Build Coastguard Worker 4 /*out_channels*/,
221*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16contracted[0]) /*sample_size_in_bytes*/,
222*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16contracted[0]) * (u16contracted.size() / 2) /*num_in_bytes*/);
223*b9df5ad1SAndroid Build Coastguard Worker
224*b9df5ad1SAndroid Build Coastguard Worker // Comparison array must be identical to reference.
225*b9df5ad1SAndroid Build Coastguard Worker expectEq(u16expanded, u16ref);
226*b9df5ad1SAndroid Build Coastguard Worker
227*b9df5ad1SAndroid Build Coastguard Worker // *** Second test: in_buff == out_buff ***
228*b9df5ad1SAndroid Build Coastguard Worker
229*b9df5ad1SAndroid Build Coastguard Worker // Contract from eight channels to stereo.
230*b9df5ad1SAndroid Build Coastguard Worker adjust_channels_non_destructive(
231*b9df5ad1SAndroid Build Coastguard Worker u16inout.data() /*in_buff*/,
232*b9df5ad1SAndroid Build Coastguard Worker 8 /*in_channels*/,
233*b9df5ad1SAndroid Build Coastguard Worker u16inout.data() /*out_buff*/,
234*b9df5ad1SAndroid Build Coastguard Worker 2 /*out_channels*/,
235*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16inout[0]) /*sample_size_in_bytes*/,
236*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16inout[0]) * u16inout.size() /*num_in_bytes*/);
237*b9df5ad1SAndroid Build Coastguard Worker
238*b9df5ad1SAndroid Build Coastguard Worker // Each section [1/4][3/4] of contracted buffer should increase monotonically.
239*b9df5ad1SAndroid Build Coastguard Worker checkMonotone(u16inout.data(), u16inout.size() / 4);
240*b9df5ad1SAndroid Build Coastguard Worker checkMonotone(&u16inout[u16inout.size() / 4], (u16inout.size() * 3) / 4);
241*b9df5ad1SAndroid Build Coastguard Worker
242*b9df5ad1SAndroid Build Coastguard Worker // Expand stereo to eight channels.
243*b9df5ad1SAndroid Build Coastguard Worker adjust_channels_non_destructive(
244*b9df5ad1SAndroid Build Coastguard Worker u16inout.data() /*in_buff*/,
245*b9df5ad1SAndroid Build Coastguard Worker 2 /*in_channels*/,
246*b9df5ad1SAndroid Build Coastguard Worker u16inout.data() /*out_buff*/,
247*b9df5ad1SAndroid Build Coastguard Worker 8 /*out_channels*/,
248*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16inout[0]) /*sample_size_in_bytes*/,
249*b9df5ad1SAndroid Build Coastguard Worker sizeof(u16inout[0]) * (u16inout.size() / 4) /*num_in_bytes*/);
250*b9df5ad1SAndroid Build Coastguard Worker
251*b9df5ad1SAndroid Build Coastguard Worker // Comparison array must be identical to reference.
252*b9df5ad1SAndroid Build Coastguard Worker expectEq(u16inout, u16ref);
253*b9df5ad1SAndroid Build Coastguard Worker }
254