@@ -44,34 +44,16 @@ using namespace yup;
4444
4545namespace
4646{
47-
48- // MSVC strict-mode C++20 two-phase lookup fails to parse 4-argument template
49- // instantiations with dependent types inside template struct bodies (C2059).
50- // These 2-arg namespace-scope aliases sidestep that by reducing each problematic
51- // 4-arg Pointer<Format, Endian, Interleaving, Constness> to a 2-arg wrapper.
52- template <class Format , class Endian >
53- using ADNonInterleavedWritable = AudioData::Pointer<Format, Endian, AudioData::NonInterleaved, AudioData::NonConst>;
54-
55- template <class Format , class Endian >
56- using ADNonInterleavedConst = AudioData::Pointer<Format, Endian, AudioData::NonInterleaved, AudioData::Const>;
57-
5847template <class F1 , class E1 , class F2 , class E2 >
59- struct RoundTripConversionTest
48+ void testRoundTripConversion (Random& r)
6049{
61- using WritablePtr = ADNonInterleavedWritable<F1, E1 >;
62- using ConstPtr = ADNonInterleavedConst<F1, E1 >;
63- using F2WritablePtr = ADNonInterleavedWritable<F2, E2 >;
64- using F2ConstPtr = ADNonInterleavedConst<F2, E2 >;
65- using FwdConv = AudioData::ConverterInstance<ConstPtr, F2WritablePtr>;
66- using RevConv = AudioData::ConverterInstance<F2ConstPtr, WritablePtr>;
67-
68- static void run (Random& r, bool inPlace)
50+ auto testWithInPlace = [&] (bool inPlace)
6951 {
7052 const int numSamples = 2048 ;
7153 int32 original[numSamples], converted[numSamples], reversed[numSamples];
7254
7355 {
74- WritablePtr d (original);
56+ AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::NonConst> d (original);
7557 bool clippingFailed = false ;
7658
7759 for (int i = 0 ; i < numSamples / 2 ; ++i)
@@ -89,22 +71,26 @@ struct RoundTripConversionTest
8971 EXPECT_FALSE (clippingFailed);
9072 }
9173
92- std::unique_ptr<AudioData::Converter> conv (new FwdConv ());
74+ // convert data from the source to dest format..
75+ std::unique_ptr<AudioData::Converter> conv (new AudioData::ConverterInstance<AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const>,
76+ AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::NonConst>>());
9377 conv->convertSamples (inPlace ? reversed : converted, original, numSamples);
9478
95- conv.reset (new RevConv ());
79+ // ..and back again..
80+ conv.reset (new AudioData::ConverterInstance<AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::Const>,
81+ AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::NonConst>>());
9682 if (! inPlace)
9783 zeromem (reversed, sizeof (reversed));
9884
9985 conv->convertSamples (reversed, inPlace ? reversed : converted, numSamples);
10086
10187 {
10288 int biggestDiff = 0 ;
103- ConstPtr d1 (original);
104- ConstPtr d2 (reversed);
89+ AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const> d1 (original);
90+ AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const> d2 (reversed);
10591
106- const int errorMargin = 2 * ConstPtr ::get32BitResolution ()
107- + F2ConstPtr ::get32BitResolution ();
92+ const int errorMargin = 2 * AudioData::Pointer<F1, E1 , AudioData::NonInterleaved, AudioData::Const> ::get32BitResolution ()
93+ + AudioData::Pointer<F2, E2 , AudioData::NonInterleaved, AudioData::Const> ::get32BitResolution ();
10894
10995 for (int i = 0 ; i < numSamples; ++i)
11096 {
@@ -115,52 +101,36 @@ struct RoundTripConversionTest
115101
116102 EXPECT_LE (biggestDiff, errorMargin);
117103 }
118- }
119- };
104+ };
120105
121- // 3-arg wrappers that fix the same MSVC 4-arg issue in AllEndiannessTest.
122- template <class F1 , class E1 , class F2 >
123- using RoundTripBigEndian = RoundTripConversionTest<F1, E1 , F2, AudioData::BigEndian>;
124-
125- template <class F1 , class E1 , class F2 >
126- using RoundTripLittleEndian = RoundTripConversionTest<F1, E1 , F2, AudioData::LittleEndian>;
106+ testWithInPlace (false );
107+ testWithInPlace (true );
108+ }
127109
128110template <class F1 , class E1 , class FormatType >
129- struct AllEndiannessTest
111+ void testAllEndianness (Random& r)
130112{
131- using BigTest = RoundTripBigEndian<F1, E1 , FormatType>;
132- using LittleTest = RoundTripLittleEndian<F1, E1 , FormatType>;
133-
134- static void run (Random& r)
135- {
136- BigTest::run (r, false );
137- BigTest::run (r, true );
138- LittleTest::run (r, false );
139- LittleTest::run (r, true );
140- }
141- };
113+ testRoundTripConversion<F1, E1 , FormatType, AudioData::BigEndian> (r);
114+ testRoundTripConversion<F1, E1 , FormatType, AudioData::LittleEndian> (r);
115+ }
142116
143117template <class FormatType , class Endianness >
144- struct AllFormatsTest
118+ void testAllFormats (Random& r)
145119{
146- static void run (Random& r)
147- {
148- AllEndiannessTest<FormatType, Endianness, AudioData::Int8>::run (r);
149- AllEndiannessTest<FormatType, Endianness, AudioData::UInt8>::run (r);
150- AllEndiannessTest<FormatType, Endianness, AudioData::Int16>::run (r);
151- AllEndiannessTest<FormatType, Endianness, AudioData::Int24>::run (r);
152- AllEndiannessTest<FormatType, Endianness, AudioData::Int32>::run (r);
153- AllEndiannessTest<FormatType, Endianness, AudioData::Float32>::run (r);
154- }
155- };
120+ testAllEndianness<FormatType, Endianness, AudioData::Int8> (r);
121+ testAllEndianness<FormatType, Endianness, AudioData::UInt8> (r);
122+ testAllEndianness<FormatType, Endianness, AudioData::Int16> (r);
123+ testAllEndianness<FormatType, Endianness, AudioData::Int24> (r);
124+ testAllEndianness<FormatType, Endianness, AudioData::Int32> (r);
125+ testAllEndianness<FormatType, Endianness, AudioData::Float32> (r);
126+ }
156127
157128template <class FormatType >
158129void testFormatWithAllEndianness (Random& r)
159130{
160- AllFormatsTest <FormatType, AudioData::BigEndian>:: run (r);
161- AllFormatsTest <FormatType, AudioData::LittleEndian>:: run (r);
131+ testAllFormats <FormatType, AudioData::BigEndian> (r);
132+ testAllFormats <FormatType, AudioData::LittleEndian> (r);
162133}
163-
164134} // namespace
165135
166136// ==============================================================================
@@ -210,7 +180,7 @@ TEST (AudioDataConvertersTest, Float64Conversions)
210180TEST (AudioDataConvertersTest, PointerAdvance)
211181{
212182 float data[10 ] = { 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f };
213- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data);
183+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data);
214184
215185 EXPECT_FLOAT_EQ (ptr.getAsFloat (), 0 .0f );
216186 ++ptr;
@@ -222,7 +192,7 @@ TEST (AudioDataConvertersTest, PointerAdvance)
222192TEST (AudioDataConvertersTest, PointerDecrement)
223193{
224194 float data[10 ] = { 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f };
225- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data + 5 );
195+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data + 5 );
226196
227197 EXPECT_FLOAT_EQ (ptr.getAsFloat (), 0 .5f );
228198 --ptr;
@@ -232,7 +202,7 @@ TEST (AudioDataConvertersTest, PointerDecrement)
232202TEST (AudioDataConvertersTest, PointerJump)
233203{
234204 float data[10 ] = { 0 .0f , 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f , 0 .9f };
235- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data);
205+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data);
236206
237207 ptr += 5 ;
238208 EXPECT_FLOAT_EQ (ptr.getAsFloat (), 0 .5f );
@@ -244,7 +214,7 @@ TEST (AudioDataConvertersTest, PointerJump)
244214TEST (AudioDataConvertersTest, InterleavedPointer)
245215{
246216 float data[8 ] = { 0 .1f , 0 .2f , 0 .3f , 0 .4f , 0 .5f , 0 .6f , 0 .7f , 0 .8f };
247- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::Interleaved, AudioData::Const> (data, 2 );
217+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::Interleaved, AudioData::Const> ptr (data, 2 );
248218
249219 EXPECT_FLOAT_EQ (ptr.getAsFloat (), 0 .1f );
250220 ++ptr;
@@ -256,7 +226,7 @@ TEST (AudioDataConvertersTest, InterleavedPointer)
256226TEST (AudioDataConvertersTest, ClearSamples)
257227{
258228 float data[10 ] = { 1 .0f , 2 .0f , 3 .0f , 4 .0f , 5 .0f , 6 .0f , 7 .0f , 8 .0f , 9 .0f , 10 .0f };
259- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::NonConst> (data);
229+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::NonConst> ptr (data);
260230
261231 ptr.clearSamples (5 );
262232
@@ -269,7 +239,7 @@ TEST (AudioDataConvertersTest, ClearSamples)
269239TEST (AudioDataConvertersTest, FindMinAndMax)
270240{
271241 float data[10 ] = { 0 .1f , -0 .5f , 0 .8f , -0 .2f , 0 .4f , 0 .9f , -0 .7f , 0 .3f , -0 .1f , 0 .6f };
272- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data);
242+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data);
273243
274244 auto range = ptr.findMinAndMax (10 );
275245
@@ -280,7 +250,7 @@ TEST (AudioDataConvertersTest, FindMinAndMax)
280250TEST (AudioDataConvertersTest, FindMinAndMaxEmpty)
281251{
282252 float data[1 ] = { 0 .0f };
283- auto ptr = AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data);
253+ AudioData::Pointer<AudioData::Float32, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data);
284254
285255 auto range = ptr.findMinAndMax (0 );
286256
@@ -293,7 +263,7 @@ TEST (AudioDataConvertersTest, FindMinAndMaxInteger)
293263 for (int i = 0 ; i < 10 ; ++i)
294264 data[i] = static_cast <int16_t > ((i - 5 ) * 1000 );
295265
296- auto ptr = AudioData::Pointer<AudioData::Int16, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> (data);
266+ AudioData::Pointer<AudioData::Int16, AudioData::NativeEndian, AudioData::NonInterleaved, AudioData::Const> ptr (data);
297267
298268 float minVal, maxVal;
299269 ptr.findMinAndMax (10 , minVal, maxVal);
0 commit comments