@@ -89,10 +89,101 @@ TEST_F(ResamplerTest, DownSamplerKernelSum) {
8989
9090TEST_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
95128TEST_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