aboutsummaryrefslogtreecommitdiff
path: root/test/sound/raw.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/sound/raw.h')
-rw-r--r--test/sound/raw.h235
1 files changed, 33 insertions, 202 deletions
diff --git a/test/sound/raw.h b/test/sound/raw.h
index e39f725847..33f000566b 100644
--- a/test/sound/raw.h
+++ b/test/sound/raw.h
@@ -66,16 +66,16 @@ public:
return s;
}
- void test_read_buffer_8_bit_signed_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
+private:
+ template<typename T>
+ void readBufferTestTemplate(const int sampleRate, const int time, const bool le, const bool isStereo) {
int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<int8>(sampleRate, time, &sine, false, false);
+ Audio::SeekableAudioStream *s = createSineStream<int8>(sampleRate, time, &sine, le, isStereo);
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
+ const int totalSamples = sampleRate * time * (isStereo ? 2 : 1);
+ int16 *buffer = new int16[totalSamples];
+ TS_ASSERT_EQUALS(s->readBuffer(buffer, totalSamples), totalSamples);
+ TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * totalSamples), 0);
TS_ASSERT_EQUALS(s->endOfData(), true);
delete[] sine;
@@ -83,140 +83,41 @@ public:
delete s;
}
- void test_read_buffer_8_bit_signed_stereo() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<int8>(sampleRate, time, &sine, false, true);
-
- int16 *buffer = new int16[sampleRate * time * 2];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time * 2), sampleRate * time * 2);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time * 2), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
+public:
+ void test_read_buffer_8_bit_signed_mono() {
+ readBufferTestTemplate<int8>(11025, 2, false, false);
+ }
- delete[] sine;
- delete[] buffer;
- delete s;
+ void test_read_buffer_8_bit_signed_stereo() {
+ readBufferTestTemplate<int8>(11025, 2, false, true);
}
void test_read_buffer_8_bit_unsigned_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<uint8>(sampleRate, time, &sine, false, false);
-
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<uint8>(11025, 2, false, false);
}
void test_read_buffer_16_bit_signed_be_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, time, &sine, false, false);
-
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<int16>(11025, 2, false, false);
}
void test_read_buffer_16_bit_signed_be_stereo() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, time, &sine, false, true);
-
- int16 *buffer = new int16[sampleRate * time * 2];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time * 2), sampleRate * time * 2);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time * 2), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<int16>(11025, 2, false, true);
}
void test_read_buffer_16_bit_unsigned_be_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<uint16>(sampleRate, time, &sine, false, false);
-
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<uint16>(11025, 2, false, false);
}
void test_read_buffer_16_bit_signed_le_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, time, &sine, true, false);
-
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<int16>(11025, 2, true, false);
}
void test_read_buffer_16_bit_unsigned_le_mono() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<uint16>(sampleRate, time, &sine, true, false);
-
- int16 *buffer = new int16[sampleRate * time];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time), sampleRate * time);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<uint16>(11025, 2, true, false);
}
void test_read_buffer_16_bit_unsigned_le_stereo() {
- const int sampleRate = 11025;
- const int time = 2;
-
- int16 *sine;
- Audio::SeekableAudioStream *s = createSineStream<uint16>(sampleRate, time, &sine, true, true);
-
- int16 *buffer = new int16[sampleRate * time * 2];
- TS_ASSERT_EQUALS(s->readBuffer(buffer, sampleRate * time * 2), sampleRate * time * 2);
- TS_ASSERT_EQUALS(memcmp(sine, buffer, sizeof(int16) * sampleRate * time * 2), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- delete[] sine;
- delete[] buffer;
- delete s;
+ readBufferTestTemplate<uint16>(11025, 2, true, true);
}
void test_partial_read() {
@@ -336,10 +237,8 @@ public:
delete s;
}
- void test_seek_mono() {
- const int sampleRate = 11025;
- const int time = 2;
- const bool isStereo = false;
+private:
+ void seekTest(const int sampleRate, const int time, const bool isStereo) {
const int totalFrames = sampleRate * time * (isStereo ? 2 : 1);
int readData = 0, offset = 0;
@@ -351,7 +250,7 @@ public:
// Seek to 500ms
const Audio::Timestamp a(0, 1, 2);
- offset = Audio::convertTimeToStreamPos(a, 11025, isStereo).totalNumberOfFrames();
+ offset = Audio::convertTimeToStreamPos(a, sampleRate, isStereo).totalNumberOfFrames();
readData = totalFrames - offset;
TS_ASSERT_EQUALS(s->seek(a), true);
@@ -362,7 +261,7 @@ public:
// Seek to 3/4 of a second
const Audio::Timestamp b(0, 3, 4);
- offset = Audio::convertTimeToStreamPos(b, 11025, isStereo).totalNumberOfFrames();
+ offset = Audio::convertTimeToStreamPos(b, sampleRate, isStereo).totalNumberOfFrames();
readData = totalFrames - offset;
TS_ASSERT_EQUALS(s->seek(b), true);
@@ -377,7 +276,7 @@ public:
// Seek to the mid of the stream
const Audio::Timestamp c(time * 1000 / 2, 1000);
- offset = Audio::convertTimeToStreamPos(c, 11025, isStereo).totalNumberOfFrames();
+ offset = Audio::convertTimeToStreamPos(c, sampleRate, isStereo).totalNumberOfFrames();
readData = totalFrames - offset;
TS_ASSERT_EQUALS(s->seek(c), true);
@@ -388,7 +287,7 @@ public:
// Seek to the 1/4th of the last second of the stream
const Audio::Timestamp d(time - 1, 1, 4);
- offset = Audio::convertTimeToStreamPos(d, 11025, isStereo).totalNumberOfFrames();
+ offset = Audio::convertTimeToStreamPos(d, sampleRate, isStereo).totalNumberOfFrames();
readData = totalFrames - offset;
TS_ASSERT_EQUALS(s->seek(d), true);
@@ -410,80 +309,12 @@ public:
delete[] buffer;
}
- // TODO: Apart from the "isStereo" bit this is exactly the same functionality
- // as test_seek_mono. We should consider merging those too. Maybe a template
- // would do and then call it from two different tests?
- void test_seek_stereo() {
- const int sampleRate = 11025;
- const int time = 2;
- const bool isStereo = true;
- const int totalFrames = sampleRate * time * (isStereo ? 2 : 1);
- int readData = 0, offset = 0;
-
- int16 *buffer = new int16[totalFrames];
- Audio::SeekableAudioStream *s = 0;
- int16 *sine = 0;
-
- s = createSineStream<int8>(sampleRate, time, &sine, false, isStereo);
-
- // Seek to 500ms
- const Audio::Timestamp a(0, 1, 2);
- offset = Audio::convertTimeToStreamPos(a, 11025, isStereo).totalNumberOfFrames();
- readData = totalFrames - offset;
-
- TS_ASSERT_EQUALS(s->seek(a), true);
- TS_ASSERT_EQUALS(s->endOfData(), false);
- TS_ASSERT_EQUALS(s->readBuffer(buffer, readData), readData);
- TS_ASSERT_EQUALS(memcmp(buffer, sine + offset, readData * sizeof(int16)), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- // Seek to 3/4 of a second
- const Audio::Timestamp b(0, 3, 4);
- offset = Audio::convertTimeToStreamPos(b, 11025, isStereo).totalNumberOfFrames();
- readData = totalFrames - offset;
-
- TS_ASSERT_EQUALS(s->seek(b), true);
- TS_ASSERT_EQUALS(s->endOfData(), false);
- TS_ASSERT_EQUALS(s->readBuffer(buffer, readData), readData);
- TS_ASSERT_EQUALS(memcmp(buffer, sine + offset, readData * sizeof(int16)), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- // Seek to the start of the stream
- TS_ASSERT_EQUALS(s->seek(0), true);
- TS_ASSERT_EQUALS(s->endOfData(), false);
-
- // Seek to the mid of the stream
- const Audio::Timestamp c(time * 1000 / 2, 1000);
- offset = Audio::convertTimeToStreamPos(c, 11025, isStereo).totalNumberOfFrames();
- readData = totalFrames - offset;
-
- TS_ASSERT_EQUALS(s->seek(c), true);
- TS_ASSERT_EQUALS(s->endOfData(), false);
- TS_ASSERT_EQUALS(s->readBuffer(buffer, readData), readData);
- TS_ASSERT_EQUALS(memcmp(buffer, sine + offset, readData * sizeof(int16)), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- // Seek to the 1/4th of the last second of the stream
- const Audio::Timestamp d(time - 1, 1, 4);
- offset = Audio::convertTimeToStreamPos(d, 11025, isStereo).totalNumberOfFrames();
- readData = totalFrames - offset;
-
- TS_ASSERT_EQUALS(s->seek(d), true);
- TS_ASSERT_EQUALS(s->endOfData(), false);
- TS_ASSERT_EQUALS(s->readBuffer(buffer, readData), readData);
- TS_ASSERT_EQUALS(memcmp(buffer, sine + offset, readData * sizeof(int16)), 0);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- // Try to seek after the end of the stream
- TS_ASSERT_EQUALS(s->seek(Audio::Timestamp(time * 1000, 1, 100000)), false);
- TS_ASSERT_EQUALS(s->endOfData(), true);
-
- // Try to seek exactly at the end of the stream
- TS_ASSERT_EQUALS(s->seek(Audio::Timestamp(time * 1000, 1000)), true);
- TS_ASSERT_EQUALS(s->endOfData(), true);
+public:
+ void test_seek_mono() {
+ seekTest(11025, 2, false);
+ }
- delete[] sine;
- delete s;
- delete[] buffer;
+ void test_seek_stereo() {
+ seekTest(11025, 2, true);
}
};