Skip to content

Commit bd95cc1

Browse files
authored
Migrated unit tests (#68)
1 parent ff3114f commit bd95cc1

File tree

66 files changed

+5465
-7606
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+5465
-7606
lines changed

modules/yup_audio_basics/buffers/yup_AudioChannelSet.cpp

Lines changed: 0 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,100 +1159,4 @@ int AudioChannelSet::getAmbisonicOrderForNumChannels (int numChannels, int maxOr
11591159
return -1;
11601160
}
11611161

1162-
//==============================================================================
1163-
//==============================================================================
1164-
#if YUP_UNIT_TESTS
1165-
1166-
class AudioChannelSetUnitTest final : public UnitTest
1167-
{
1168-
public:
1169-
AudioChannelSetUnitTest()
1170-
: UnitTest ("AudioChannelSetUnitTest", UnitTestCategories::audio)
1171-
{
1172-
}
1173-
1174-
void runTest() override
1175-
{
1176-
auto max = AudioChannelSet::maxChannelsOfNamedLayout;
1177-
1178-
beginTest ("maxChannelsOfNamedLayout is non-discrete");
1179-
expect (AudioChannelSet::channelSetsWithNumberOfChannels (max).size() >= 2);
1180-
1181-
beginTest ("channelSetsWithNumberOfChannels returns correct speaker count");
1182-
{
1183-
for (auto ch = 1; ch <= max; ++ch)
1184-
{
1185-
auto channelSets = AudioChannelSet::channelSetsWithNumberOfChannels (ch);
1186-
1187-
for (auto set : channelSets)
1188-
expect (set.size() == ch);
1189-
}
1190-
}
1191-
1192-
beginTest ("Ambisonics");
1193-
{
1194-
uint64 mask = 0;
1195-
1196-
mask |= (1ull << AudioChannelSet::ambisonicACN0);
1197-
checkAmbisonic (mask, 0, "0th Order Ambisonics");
1198-
1199-
mask |= (1ull << AudioChannelSet::ambisonicACN1) | (1ull << AudioChannelSet::ambisonicACN2) | (1ull << AudioChannelSet::ambisonicACN3);
1200-
checkAmbisonic (mask, 1, "1st Order Ambisonics");
1201-
1202-
mask |= (1ull << AudioChannelSet::ambisonicACN4) | (1ull << AudioChannelSet::ambisonicACN5) | (1ull << AudioChannelSet::ambisonicACN6)
1203-
| (1ull << AudioChannelSet::ambisonicACN7) | (1ull << AudioChannelSet::ambisonicACN8);
1204-
checkAmbisonic (mask, 2, "2nd Order Ambisonics");
1205-
1206-
mask |= (1ull << AudioChannelSet::ambisonicACN9) | (1ull << AudioChannelSet::ambisonicACN10) | (1ull << AudioChannelSet::ambisonicACN11)
1207-
| (1ull << AudioChannelSet::ambisonicACN12) | (1ull << AudioChannelSet::ambisonicACN13) | (1ull << AudioChannelSet::ambisonicACN14)
1208-
| (1ull << AudioChannelSet::ambisonicACN15);
1209-
checkAmbisonic (mask, 3, "3rd Order Ambisonics");
1210-
1211-
mask |= (1ull << AudioChannelSet::ambisonicACN16) | (1ull << AudioChannelSet::ambisonicACN17) | (1ull << AudioChannelSet::ambisonicACN18)
1212-
| (1ull << AudioChannelSet::ambisonicACN19) | (1ull << AudioChannelSet::ambisonicACN20) | (1ull << AudioChannelSet::ambisonicACN21)
1213-
| (1ull << AudioChannelSet::ambisonicACN22) | (1ull << AudioChannelSet::ambisonicACN23) | (1ull << AudioChannelSet::ambisonicACN24);
1214-
checkAmbisonic (mask, 4, "4th Order Ambisonics");
1215-
1216-
mask |= (1ull << AudioChannelSet::ambisonicACN25) | (1ull << AudioChannelSet::ambisonicACN26) | (1ull << AudioChannelSet::ambisonicACN27)
1217-
| (1ull << AudioChannelSet::ambisonicACN28) | (1ull << AudioChannelSet::ambisonicACN29) | (1ull << AudioChannelSet::ambisonicACN30)
1218-
| (1ull << AudioChannelSet::ambisonicACN31) | (1ull << AudioChannelSet::ambisonicACN32) | (1ull << AudioChannelSet::ambisonicACN33)
1219-
| (1ull << AudioChannelSet::ambisonicACN34) | (1ull << AudioChannelSet::ambisonicACN35);
1220-
checkAmbisonic (mask, 5, "5th Order Ambisonics");
1221-
}
1222-
}
1223-
1224-
private:
1225-
void checkAmbisonic (uint64 mask, int order, const char* layoutName)
1226-
{
1227-
auto expected = AudioChannelSet::ambisonic (order);
1228-
auto numChannels = expected.size();
1229-
1230-
expect (numChannels == BigInteger ((int64) mask).countNumberOfSetBits());
1231-
expect (channelSetFromMask (mask) == expected);
1232-
1233-
expect (order == expected.getAmbisonicOrder());
1234-
expect (expected.getDescription() == layoutName);
1235-
1236-
auto layouts = AudioChannelSet::channelSetsWithNumberOfChannels (numChannels);
1237-
expect (layouts.contains (expected));
1238-
1239-
for (auto layout : layouts)
1240-
expect (layout.getAmbisonicOrder() == (layout == expected ? order : -1));
1241-
}
1242-
1243-
static AudioChannelSet channelSetFromMask (uint64 mask)
1244-
{
1245-
Array<AudioChannelSet::ChannelType> channels;
1246-
for (int bit = 0; bit <= 62; ++bit)
1247-
if ((mask & (1ull << bit)) != 0)
1248-
channels.add (static_cast<AudioChannelSet::ChannelType> (bit));
1249-
1250-
return AudioChannelSet::channelSetWithChannels (channels);
1251-
}
1252-
};
1253-
1254-
static AudioChannelSetUnitTest audioChannelSetUnitTest;
1255-
1256-
#endif
1257-
12581162
} // namespace yup

modules/yup_audio_basics/buffers/yup_AudioDataConverters.cpp

Lines changed: 0 additions & 182 deletions
Original file line numberDiff line numberDiff line change
@@ -501,188 +501,6 @@ void AudioDataConverters::deinterleaveSamples (const float* source, float** dest
501501
numSamples);
502502
}
503503

504-
//==============================================================================
505-
//==============================================================================
506-
#if YUP_UNIT_TESTS
507-
508-
class AudioConversionTests final : public UnitTest
509-
{
510-
public:
511-
AudioConversionTests()
512-
: UnitTest ("Audio data conversion", UnitTestCategories::audio)
513-
{
514-
}
515-
516-
template <class F1, class E1, class F2, class E2>
517-
struct Test5
518-
{
519-
static void test (UnitTest& unitTest, Random& r)
520-
{
521-
test (unitTest, false, r);
522-
test (unitTest, true, r);
523-
}
524-
525-
YUP_BEGIN_IGNORE_WARNINGS_MSVC (6262)
526-
527-
static void test (UnitTest& unitTest, bool inPlace, Random& r)
528-
{
529-
const int numSamples = 2048;
530-
int32 original[(size_t) numSamples],
531-
converted[(size_t) numSamples],
532-
reversed[(size_t) numSamples];
533-
534-
{
535-
AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::NonConst> d (original);
536-
bool clippingFailed = false;
537-
538-
for (int i = 0; i < numSamples / 2; ++i)
539-
{
540-
d.setAsFloat (r.nextFloat() * 2.2f - 1.1f);
541-
542-
if (! d.isFloatingPoint())
543-
clippingFailed = d.getAsFloat() > 1.0f || d.getAsFloat() < -1.0f || clippingFailed;
544-
545-
++d;
546-
d.setAsInt32 (r.nextInt());
547-
++d;
548-
}
549-
550-
unitTest.expect (! clippingFailed);
551-
}
552-
553-
// convert data from the source to dest format..
554-
std::unique_ptr<AudioData::Converter> conv (new AudioData::ConverterInstance<AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const>,
555-
AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::NonConst>>());
556-
conv->convertSamples (inPlace ? reversed : converted, original, numSamples);
557-
558-
// ..and back again..
559-
conv.reset (new AudioData::ConverterInstance<AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::Const>,
560-
AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::NonConst>>());
561-
if (! inPlace)
562-
zeromem (reversed, sizeof (reversed));
563-
564-
conv->convertSamples (reversed, inPlace ? reversed : converted, numSamples);
565-
566-
{
567-
int biggestDiff = 0;
568-
AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const> d1 (original);
569-
AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const> d2 (reversed);
570-
571-
const int errorMargin = 2 * AudioData::Pointer<F1, E1, AudioData::NonInterleaved, AudioData::Const>::get32BitResolution()
572-
+ AudioData::Pointer<F2, E2, AudioData::NonInterleaved, AudioData::Const>::get32BitResolution();
573-
574-
for (int i = 0; i < numSamples; ++i)
575-
{
576-
biggestDiff = jmax (biggestDiff, std::abs (d1.getAsInt32() - d2.getAsInt32()));
577-
++d1;
578-
++d2;
579-
}
580-
581-
unitTest.expect (biggestDiff <= errorMargin);
582-
}
583-
}
584-
585-
YUP_END_IGNORE_WARNINGS_MSVC
586-
};
587-
588-
template <class F1, class E1, class FormatType>
589-
struct Test3
590-
{
591-
static void test (UnitTest& unitTest, Random& r)
592-
{
593-
Test5<F1, E1, FormatType, AudioData::BigEndian>::test (unitTest, r);
594-
Test5<F1, E1, FormatType, AudioData::LittleEndian>::test (unitTest, r);
595-
}
596-
};
597-
598-
template <class FormatType, class Endianness>
599-
struct Test2
600-
{
601-
static void test (UnitTest& unitTest, Random& r)
602-
{
603-
Test3<FormatType, Endianness, AudioData::Int8>::test (unitTest, r);
604-
Test3<FormatType, Endianness, AudioData::UInt8>::test (unitTest, r);
605-
Test3<FormatType, Endianness, AudioData::Int16>::test (unitTest, r);
606-
Test3<FormatType, Endianness, AudioData::Int24>::test (unitTest, r);
607-
Test3<FormatType, Endianness, AudioData::Int32>::test (unitTest, r);
608-
Test3<FormatType, Endianness, AudioData::Float32>::test (unitTest, r);
609-
}
610-
};
611-
612-
template <class FormatType>
613-
struct Test1
614-
{
615-
static void test (UnitTest& unitTest, Random& r)
616-
{
617-
Test2<FormatType, AudioData::BigEndian>::test (unitTest, r);
618-
Test2<FormatType, AudioData::LittleEndian>::test (unitTest, r);
619-
}
620-
};
621-
622-
void runTest() override
623-
{
624-
auto r = getRandom();
625-
beginTest ("Round-trip conversion: Int8");
626-
Test1<AudioData::Int8>::test (*this, r);
627-
beginTest ("Round-trip conversion: Int16");
628-
Test1<AudioData::Int16>::test (*this, r);
629-
beginTest ("Round-trip conversion: Int24");
630-
Test1<AudioData::Int24>::test (*this, r);
631-
beginTest ("Round-trip conversion: Int32");
632-
Test1<AudioData::Int32>::test (*this, r);
633-
beginTest ("Round-trip conversion: Float32");
634-
Test1<AudioData::Float32>::test (*this, r);
635-
636-
using Format = AudioData::Format<AudioData::Float32, AudioData::NativeEndian>;
637-
638-
beginTest ("Interleaving");
639-
{
640-
constexpr auto numChannels = 4;
641-
constexpr auto numSamples = 512;
642-
643-
AudioBuffer<float> sourceBuffer { numChannels, numSamples },
644-
destBuffer { 1, numChannels * numSamples };
645-
646-
for (int ch = 0; ch < numChannels; ++ch)
647-
for (int i = 0; i < numSamples; ++i)
648-
sourceBuffer.setSample (ch, i, r.nextFloat());
649-
650-
AudioData::interleaveSamples (AudioData::NonInterleavedSource<Format> { sourceBuffer.getArrayOfReadPointers(), numChannels },
651-
AudioData::InterleavedDest<Format> { destBuffer.getWritePointer (0), numChannels },
652-
numSamples);
653-
654-
for (int ch = 0; ch < numChannels; ++ch)
655-
for (int i = 0; i < numSamples; ++i)
656-
expectEquals (destBuffer.getSample (0, ch + (i * numChannels)), sourceBuffer.getSample (ch, i));
657-
}
658-
659-
beginTest ("Deinterleaving");
660-
{
661-
constexpr auto numChannels = 4;
662-
constexpr auto numSamples = 512;
663-
664-
AudioBuffer<float> sourceBuffer { 1, numChannels * numSamples },
665-
destBuffer { numChannels, numSamples };
666-
667-
for (int ch = 0; ch < numChannels; ++ch)
668-
for (int i = 0; i < numSamples; ++i)
669-
sourceBuffer.setSample (0, ch + (i * numChannels), r.nextFloat());
670-
671-
AudioData::deinterleaveSamples (AudioData::InterleavedSource<Format> { sourceBuffer.getReadPointer (0), numChannels },
672-
AudioData::NonInterleavedDest<Format> { destBuffer.getArrayOfWritePointers(), numChannels },
673-
numSamples);
674-
675-
for (int ch = 0; ch < numChannels; ++ch)
676-
for (int i = 0; i < numSamples; ++i)
677-
expectEquals (sourceBuffer.getSample (0, ch + (i * numChannels)), destBuffer.getSample (ch, i));
678-
}
679-
}
680-
};
681-
682-
static AudioConversionTests audioConversionUnitTests;
683-
684-
#endif
685-
686504
YUP_END_IGNORE_DEPRECATION_WARNINGS
687505

688506
} // namespace yup

0 commit comments

Comments
 (0)