Skip to content

Commit d45ac50

Browse files
author
maciejmakowski2003
committed
test: implemented resamplers process testa
1 parent 3b3a61a commit d45ac50

File tree

1 file changed

+93
-2
lines changed

1 file changed

+93
-2
lines changed

packages/react-native-audio-api/common/cpp/test/src/dsp/ResamplerTest.cpp

Lines changed: 93 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,101 @@ TEST_F(ResamplerTest, DownSamplerKernelSum) {
8989

9090
TEST_F(ResamplerTest, UpSamplerProcess) {
9191
auto upSampler = std::make_unique<TestableUpSampler>();
92-
//TODO: Implement process test
92+
auto kernel = upSampler->getKernel();
93+
94+
auto stateBuffer = std::make_shared<AudioArray>(KERNEL_SIZE + MAX_BLOCK_SIZE);
95+
stateBuffer->zero();
96+
97+
auto inputArray = std::make_shared<AudioArray>(4);
98+
(*inputArray)[0] = 1.0f;
99+
(*inputArray)[1] = 0.0f;
100+
(*inputArray)[2] = -1.0f;
101+
(*inputArray)[3] = 1.0f;
102+
103+
auto outputArray = std::make_shared<AudioArray>(8);
104+
105+
// update history buffer
106+
memmove(stateBuffer->getData(), stateBuffer->getData() + inputArray->getSize(), KERNEL_SIZE * sizeof(float));
107+
memcpy(stateBuffer->getData() + KERNEL_SIZE, inputArray->getData(), inputArray->getSize() * sizeof(float));
108+
109+
upSampler->process(inputArray, outputArray);
110+
111+
for (size_t i = 0; i < outputArray->getSize(); ++i) {
112+
auto idx = KERNEL_SIZE - KERNEL_SIZE / 2 + i / 2;
113+
114+
if (i % 2 == 0) {
115+
EXPECT_FLOAT_EQ(outputArray->getData()[i], stateBuffer->getData()[idx]);
116+
} else {
117+
float sum = 0.0f;
118+
119+
for (size_t k = 0; k < kernel->getSize(); ++k) {
120+
sum += stateBuffer->getData()[idx + k] * kernel->getData()[k];
121+
}
122+
123+
EXPECT_FLOAT_EQ(outputArray->getData()[i], sum);
124+
}
125+
}
93126
}
94127

95128
TEST_F(ResamplerTest, DownSamplerProcess) {
96129
auto downSampler = std::make_unique<TestableDownSampler>();
97-
//TODO: Implement process test
130+
auto kernel = downSampler->getKernel();
131+
132+
auto stateBuffer = std::make_shared<AudioArray>(KERNEL_SIZE + MAX_BLOCK_SIZE);
133+
stateBuffer->zero();
134+
135+
auto inputArray = std::make_shared<AudioArray>(8);
136+
(*inputArray)[0] = 1.0f;
137+
(*inputArray)[1] = 0.0f;
138+
(*inputArray)[2] = -1.0f;
139+
(*inputArray)[3] = 1.0f;
140+
(*inputArray)[4] = 0.5f;
141+
(*inputArray)[5] = -0.5f;
142+
(*inputArray)[6] = 0.25f;
143+
(*inputArray)[7] = -0.25f;
144+
145+
auto outputArray = std::make_shared<AudioArray>(4);
146+
147+
// update history buffer
148+
memmove(
149+
stateBuffer->getData(),
150+
stateBuffer->getData() + inputArray->getSize(),
151+
KERNEL_SIZE * sizeof(float));
152+
memcpy(
153+
stateBuffer->getData() + KERNEL_SIZE,
154+
inputArray->getData(),
155+
inputArray->getSize() * sizeof(float));
156+
157+
downSampler->process(inputArray, outputArray);
158+
159+
for (size_t i = 0; i < outputArray->getSize() / 8; ++i) {
160+
auto idx = KERNEL_SIZE + i * 2;
161+
float sum = 0.0f;
162+
163+
for (size_t k = 0; k < kernel->getSize(); ++k) {
164+
sum += stateBuffer->getData()[idx + k] * kernel->getData()[k];
165+
}
166+
167+
EXPECT_FLOAT_EQ(outputArray->getData()[i], sum);
168+
}
169+
}
170+
171+
TEST_F(ResamplerTest, UpDownSamplingProcessThrowsNoErrors) {
172+
auto upSampler = std::make_unique<TestableUpSampler>();
173+
auto downSampler = std::make_unique<TestableDownSampler>();
174+
175+
auto inputArray = std::make_shared<AudioArray>(4);
176+
(*inputArray)[0] = 1.0f;
177+
(*inputArray)[1] = 0.0f;
178+
(*inputArray)[2] = -1.0f;
179+
(*inputArray)[3] = 1.0f;
180+
181+
auto outputArray = std::make_shared<AudioArray>(8);
182+
183+
EXPECT_NO_THROW(upSampler->process(inputArray, outputArray));
184+
EXPECT_NO_THROW(downSampler->process(outputArray, inputArray));
185+
186+
for (size_t i = 0; i < inputArray->getSize(); ++i) {
187+
ASSERT_NE(inputArray->getData()[i], 0.0f);
188+
}
98189
}

0 commit comments

Comments
 (0)