[Scummvm-cvs-logs] SF.net SVN: scummvm:[47934] scummvm/trunk/test/sound/audiostream.h

lordhoto at users.sourceforge.net lordhoto at users.sourceforge.net
Sat Feb 6 17:41:54 CET 2010


Revision: 47934
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47934&view=rev
Author:   lordhoto
Date:     2010-02-06 16:41:53 +0000 (Sat, 06 Feb 2010)

Log Message:
-----------
Add (currently failing :-/) unit tests for LoopingAudioStream.

Modified Paths:
--------------
    scummvm/trunk/test/sound/audiostream.h

Modified: scummvm/trunk/test/sound/audiostream.h
===================================================================
--- scummvm/trunk/test/sound/audiostream.h	2010-02-06 16:41:27 UTC (rev 47933)
+++ scummvm/trunk/test/sound/audiostream.h	2010-02-06 16:41:53 UTC (rev 47934)
@@ -2,6 +2,8 @@
 
 #include "sound/audiostream.h"
 
+#include "helper.h"
+
 class AudioStreamTestSuite : public CxxTest::TestSuite
 {
 public:
@@ -31,5 +33,62 @@
 		const Audio::Timestamp e = Audio::convertTimeToStreamPos(Audio::Timestamp(1, 1, 4), 11025, false);
 		TS_ASSERT_EQUALS(e.totalNumberOfFrames(), 5 * 11025 / 4);
 	}
+
+private:
+	void testLoopingAudioStreamFixedIter(const int sampleRate, const bool isStereo) {
+		const int secondLength = sampleRate * (isStereo ? 2 : 1);
+
+		int16 *sine = 0;
+		Audio::SeekableAudioStream *s = createSineStream<int16>(sampleRate, 1, &sine, false, isStereo);
+		Audio::LoopingAudioStream *loop = new Audio::LoopingAudioStream(s, 4);
+
+		int16 *buffer = new int16[secondLength * 2];
+
+		// Check parameters
+		TS_ASSERT_EQUALS(loop->isStereo(), isStereo);
+		TS_ASSERT_EQUALS(loop->getRate(), sampleRate);
+		TS_ASSERT_EQUALS(loop->endOfData(), false);
+		TS_ASSERT_EQUALS(loop->getCompleteIterations(), (uint)0);
+
+		// Read one second
+		TS_ASSERT_EQUALS(loop->readBuffer(buffer, secondLength), secondLength);
+		TS_ASSERT_EQUALS(memcmp(buffer, sine, secondLength * sizeof(int16)), 0);
+
+		TS_ASSERT_EQUALS(loop->getCompleteIterations(), (uint)1);
+		TS_ASSERT_EQUALS(loop->endOfData(), false);
+
+		// Read two seconds
+		TS_ASSERT_EQUALS(loop->readBuffer(buffer, secondLength * 2), secondLength * 2);
+		TS_ASSERT_EQUALS(memcmp(buffer, sine, secondLength * sizeof(int16)), 0);
+		TS_ASSERT_EQUALS(memcmp(buffer + secondLength, sine, secondLength * sizeof(int16)), 0);
+
+		TS_ASSERT_EQUALS(loop->getCompleteIterations(), (uint)3);
+		TS_ASSERT_EQUALS(loop->endOfData(), false);
+
+		// Read the last second
+		TS_ASSERT_EQUALS(loop->readBuffer(buffer, secondLength), secondLength);
+		TS_ASSERT_EQUALS(memcmp(buffer, sine, secondLength * sizeof(int16)), 0);
+
+		TS_ASSERT_EQUALS(loop->getCompleteIterations(), (uint)4);
+		TS_ASSERT_EQUALS(loop->endOfData(), true);
+
+		// Try to read beyond the end of the stream
+		TS_ASSERT_EQUALS(loop->readBuffer(buffer, secondLength), 0);
+		TS_ASSERT_EQUALS(loop->getCompleteIterations(), (uint)4);
+		TS_ASSERT_EQUALS(loop->endOfData(), true);
+
+		delete[] buffer;
+		delete loop;
+		delete[] sine;
+	}
+
+public:
+	void test_looping_audio_stream_mono_fixed_iter() {
+		testLoopingAudioStreamFixedIter(22050, false);
+	}
+
+	void test_looping_audio_stream_stereo_fixed_iter() {
+		testLoopingAudioStreamFixedIter(22050, true);
+	}
 };
 


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list