1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#include "audio/AudioSettings.h"
#include "audio/SampleBuffer.h"
#include "unit/TestRunner.h"
static SampleBuffer _newMockSampleBuffer(void)
{
return newSampleBuffer(1, 1);
}
static int _testNewSampleBuffer(void)
{
SampleBuffer s = _newMockSampleBuffer();
assertIntEquals(1, s->numChannels);
assertUnsignedLongEquals(1l, s->blocksize);
freeSampleBuffer(s);
return 0;
}
static int _testNewSampleBufferMultichannel(void)
{
SampleBuffer s = newSampleBuffer(8, 128);
unsigned int i, j;
assertNotNull(s);
assertIntEquals(8, s->numChannels);
// Actually write a bunch of samples to expose memory corruption
for (i = 0; i < s->blocksize; ++i) {
for (j = 0; j < s->numChannels; ++j) {
s->samples[j][i] = 0.5f;
}
}
freeSampleBuffer(s);
return 0;
}
static int _testClearSampleBuffer(void)
{
SampleBuffer s = _newMockSampleBuffer();
s->samples[0][0] = 123;
sampleBufferClear(s);
assertDoubleEquals(0.0, s->samples[0][0], TEST_DEFAULT_TOLERANCE);
freeSampleBuffer(s);
return 0;
}
static int _testCopyAndMapChannelsSampleBuffers(void)
{
SampleBuffer s1 = _newMockSampleBuffer();
SampleBuffer s2 = _newMockSampleBuffer();
s1->samples[0][0] = 123.0;
assert(sampleBufferCopyAndMapChannels(s2, s1));
assertDoubleEquals(123.0, s2->samples[0][0], TEST_DEFAULT_TOLERANCE);
freeSampleBuffer(s1);
freeSampleBuffer(s2);
return 0;
}
static int _testCopyAndMapChannelsSampleBuffersDifferentBlocksizes(void)
{
SampleBuffer s1 = newSampleBuffer(1, DEFAULT_BLOCKSIZE);
SampleBuffer s2 = _newMockSampleBuffer();
s1->samples[0][0] = 123.0;
assertFalse(sampleBufferCopyAndMapChannels(s2, s1));
// Contents should not change; copying with different sizes is invalid
assertDoubleEquals(123.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE);
freeSampleBuffer(s1);
freeSampleBuffer(s2);
return 0;
}
static int _testCopyAndMapChannelsSampleBuffersDifferentChannelsBigger(void)
{
SampleBuffer s1 = newSampleBuffer(4, 1);
SampleBuffer s2 = newSampleBuffer(2, 1);
s2->samples[0][0] = 1.0;
s2->samples[1][0] = 2.0;
assert(sampleBufferCopyAndMapChannels(s1, s2));
assertDoubleEquals(1.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE);
assertDoubleEquals(2.0, s1->samples[1][0], TEST_DEFAULT_TOLERANCE);
assertDoubleEquals(1.0, s1->samples[2][0], TEST_DEFAULT_TOLERANCE);
assertDoubleEquals(2.0, s1->samples[3][0], TEST_DEFAULT_TOLERANCE);
freeSampleBuffer(s1);
freeSampleBuffer(s2);
return 0;
}
static int _testCopyAndMapChannelsSampleBuffersDifferentChannelsSmaller(void)
{
SampleBuffer s1 = newSampleBuffer(1, 1);
SampleBuffer s2 = newSampleBuffer(4, 1);
unsigned int i;
for (i = 0; i < s1->numChannels; i++) {
s1->samples[i][0] = 1.0;
}
for (i = 0; i < s2->numChannels; i++) {
s2->samples[i][0] = 2.0;
}
assert(sampleBufferCopyAndMapChannels(s1, s2));
assertDoubleEquals(2.0, s1->samples[0][0], TEST_DEFAULT_TOLERANCE);
freeSampleBuffer(s1);
freeSampleBuffer(s2);
return 0;
}
static int _testFreeNullSampleBuffer(void)
{
freeSampleBuffer(NULL);
return 0;
}
TestSuite addSampleBufferTests(void);
TestSuite addSampleBufferTests(void)
{
TestSuite testSuite = newTestSuite("SampleBuffer", NULL, NULL);
addTest(testSuite, "NewObject", _testNewSampleBuffer);
addTest(testSuite, "NewSampleBufferMultichannel", _testNewSampleBufferMultichannel);
addTest(testSuite, "ClearSampleBuffer", _testClearSampleBuffer);
addTest(testSuite, "CopyAndMapChannelsSampleBuffers", _testCopyAndMapChannelsSampleBuffers);
addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentSizes", _testCopyAndMapChannelsSampleBuffersDifferentBlocksizes);
addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentChannelsBigger", _testCopyAndMapChannelsSampleBuffersDifferentChannelsBigger);
addTest(testSuite, "CopyAndMapChannelsSampleBuffersDifferentChannelsSmaller", _testCopyAndMapChannelsSampleBuffersDifferentChannelsSmaller);
addTest(testSuite, "FreeNullSampleBuffer", _testFreeNullSampleBuffer);
return testSuite;
}
|