aria2/test/SequenceTest.cc
Tatsuhiro Tsujikawa c9e3d51054 2007-11-20 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Preallocate non-requested file which is adjacent forward to 
requested
	file('requested' files means the files given in --select-file 
option)
	if they share a same piece.
	This fixes long pause in the file system which doesn't support 
sparse
	files like FAT32 while downloading.
	* src/MultiFileAllocationIterator.{h, cc}
	* test/MultiFileAllocationIteratorTest.cc
	* src/FileEntry.{h, cc}

	Removed unused _option.
	* src/MultiDiskAdaptor.h
	* test/MultiDiskAdaptorTest.cc
	* src/DefaultPieceStorage.cc

	Set the default value of --seed-ratio to 1.0.
	If 0.0 is given, then seeding continues regardless of share 
ratio.
	* src/version_usage.cc
	* src/option_processing.cc
	* src/BtSetup.cc
	* doc/aria2c.1.txt
	* doc/aria2c.1

	Fixed: Selective download is not working in BitTorrent
	* src/RequestGroup.cc

	Introduced Sequence class. Use this instead of 
Util::unfoldRange()
	* src/PieceStorage.h
	* test/MockPieceStorage.h
	* src/UnknownLengthPieceStorage.h
	* src/DefaultPieceStorage.{h, cc}
	* src/Metalink2RequestGroup.cc
	* src/RequestGroup.cc
	* src/Sequence.h
	* test/SequenceTest.cc
	* src/IntSequence.h
	* src/message.h
	* src/Util.{h, cc}
	* test/UtilTest.cc

	Added new function 'parse' to catch exception thrown by 
subclass's
	parseArg
	* src/OptionHandler.h
	* src/OptionParser.cc
	* src/NameMatchOptionHandler.h
	* src/OptionHandlerImpl.h
	* test/OptionHandlerTest.cc

	Added IntegerRangeOptionHandler. Used for --listen-port and
	--select-file. Now --listen-port accepts range of port.
	* src/OptionHandlerFactory.cc
	* src/version_usage.cc
	* src/OptionHandlerImpl.h
	* src/option_processing.cc
	* src/BtSetup.cc
	* src/PeerListenCommand.{h, cc}
	* doc/aria2c.1.txt
	* doc/aria2c.1
	
	Implemented operator< for Exception class to provide easy way to 
print
	exception stack trace.
	* src/Exception.{h, cc}
	* src/main.cc
	* src/option_processing.cc
2007-11-21 16:14:40 +00:00

80 lines
2.1 KiB
C++

#include "Sequence.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
class SequenceTest:public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(SequenceTest);
CPPUNIT_TEST(testParseAndNext);
CPPUNIT_TEST(testParseAndNext2);
CPPUNIT_TEST(testFlush);
CPPUNIT_TEST_SUITE_END();
public:
void testParseAndNext();
void testParseAndNext2();
void testFlush();
};
CPPUNIT_TEST_SUITE_REGISTRATION(SequenceTest);
typedef Sequence<int32_t> IntSequence;
void SequenceTest::testParseAndNext()
{
IntSequence::Value params[] = {
IntSequence::Value(1, 2),
IntSequence::Value(3, 9),
IntSequence::Value(10, 11),
};
IntSequence seq(IntSequence::Values(&params[0], &params[3]));
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)1, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)3, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)4, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)5, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)6, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)7, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)8, seq.next());
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)10, seq.next());
CPPUNIT_ASSERT(!seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)0, seq.next());
}
void SequenceTest::testParseAndNext2()
{
IntSequence::Value params[] = {
IntSequence::Value(1, 2),
};
IntSequence seq(IntSequence::Values(&params[0], &params[1]));
CPPUNIT_ASSERT(seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)1, seq.next());
CPPUNIT_ASSERT(!seq.hasNext());
CPPUNIT_ASSERT_EQUAL((int32_t)0, seq.next());
}
void SequenceTest::testFlush()
{
IntSequence::Value params[] = {
IntSequence::Value(1, 2),
IntSequence::Value(3, 9),
IntSequence::Value(10, 11),
};
IntSequence seq(IntSequence::Values(&params[0], &params[3]));
deque<int32_t> r = seq.flush();
int32_t answers[] = { 1, 3, 4, 5, 6, 7, 8, 10 };
CPPUNIT_ASSERT(equal(r.begin(), r.end(), &answers[0]));
}