Skip to content
Snippets Groups Projects
IteratorTest.cpp 1.72 KiB
Newer Older
#include "IteratorTest.h"
#include <alib/set>
#include <alib/vector>
#include <alib/pair>
#include <sstream>
#include <alib/istream>
#include <alib/string>
#include <alib/iterator>

CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( IteratorTest, "bits" );
CPPUNIT_TEST_SUITE_REGISTRATION( IteratorTest );

void IteratorTest::setUp() {
}

void IteratorTest::tearDown() {
}

void IteratorTest::testIterator() {
	std::vector < int * > data;

	data.push_back ( new int ( 1 ) );
	data.push_back ( new int ( 2 ) );
	data.push_back ( new int ( 3 ) );
	data.push_back ( new int ( 4 ) );
	data.push_back ( new int ( 5 ) );

	std::vector < int > ref { 1, 2, 3, 4, 5 };

	bool res = std::equal ( ext::dereferencer ( data.begin ( ) ), ext::dereferencer ( data.end ( ) ), ref.begin ( ), ref.end ( ) );
	CPPUNIT_ASSERT ( res );

	for ( int * elem : data ) {
		delete elem;
	}
}

void IteratorTest::testReverser() {
	std::vector < int > data;

	data.push_back ( 1 );
	data.push_back ( 2 );
	data.push_back ( 3 );
	data.push_back ( 4 );
	data.push_back ( 5 );

	std::vector < int > data2;

	data2.push_back ( 5 );
	data2.push_back ( 4 );
	data2.push_back ( 3 );
	data2.push_back ( 2 );
	data2.push_back ( 1 );

	std::vector < int > trans;

	for ( int elem : ext::make_reverse ( data ) ) {
		trans.push_back ( elem );
	}

	CPPUNIT_ASSERT ( data2 == trans );

	const std::vector < int > & dataRef = data;
	trans.clear ( );

	for ( int elem : ext::make_reverse ( dataRef ) ) {
		trans.push_back ( elem );
	}

	CPPUNIT_ASSERT ( data2 == trans );
}

void IteratorTest::testCallbackIterator ( ) {
	int expected;
	ext::callback_iterator < int > out = ext::make_callback_iterator < int > ( [ & ] ( int value ) -> void { CPPUNIT_ASSERT ( value == expected ); } );

	expected = 10;
	* out = 10;
}