Skip to content
Snippets Groups Projects
AlgorithmTest.cpp 4.51 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jan Trávníček's avatar
    Jan Trávníček committed
    #include "AlgorithmTest.h"
    
    #include <alib/algorithm>
    #include <alib/set>
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( AlgorithmTest, "bits" );
    CPPUNIT_TEST_SUITE_REGISTRATION( AlgorithmTest );
    
    void AlgorithmTest::setUp() {
    }
    
    void AlgorithmTest::tearDown() {
    }
    
    void AlgorithmTest::testExclude() {
    	{
    		int array1[] = {1, 2, 3};
    		int array2[] = {2, 3, 4};
    
    		std::cout << sizeof(array1) / sizeof(int);
    
    
    		CPPUNIT_ASSERT(ext::excludes(array1, array1 + sizeof(array1) / sizeof(int), array2, array2 + sizeof(array2) / sizeof(int)) == false);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	}
    
    	{
    		int array1[] = {1, 3, 5};
    		int array2[] = {2, 4, 6, 8};
    
    
    		CPPUNIT_ASSERT(ext::excludes(array1, array1 + sizeof(array1) / sizeof(int), array2, array2 + sizeof(array2) / sizeof(int)) == true);
    		CPPUNIT_ASSERT(ext::excludes(array2, array2 + sizeof(array2) / sizeof(int), array1, array1 + sizeof(array1) / sizeof(int)) == true);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	}
    
    	{
    		int array1[] = {1, 3, 5, 8};
    		int array2[] = {2, 4, 6, 8};
    
    
    		CPPUNIT_ASSERT(ext::excludes(array1, array1 + sizeof(array1) / sizeof(int), array2, array2 + sizeof(array2) / sizeof(int)) == false);
    		CPPUNIT_ASSERT(ext::excludes(array2, array2 + sizeof(array2) / sizeof(int), array1, array1 + sizeof(array1) / sizeof(int)) == false);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	}
    
    	{
    		int array1[] = {0};
    		int array2[] = {2, 4, 6, 8};
    
    
    		CPPUNIT_ASSERT(ext::excludes(array1, array1 + sizeof(array1) / sizeof(int), array2, array2 + sizeof(array2) / sizeof(int)) == true);
    		CPPUNIT_ASSERT(ext::excludes(array2, array2 + sizeof(array2) / sizeof(int), array1, array1 + sizeof(array1) / sizeof(int)) == true);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    
    		CPPUNIT_ASSERT(ext::excludes(array1, array1, array2, array2) == true);
    		CPPUNIT_ASSERT(ext::excludes(array2, array2, array1, array1) == true);
    
    void AlgorithmTest::testTransform() {
    
    	ext::set<int> in = {1, 2, 3, 4};
    	ext::set<long> ref = {2, 3, 4, 5};
    
    
    /*	std::function<long(const int&)> lamb = [](const int& elem) { return (long) elem + 1; };
    
    	ext::set<long> out = ext::transform<long>(in, lamb); //*/
    
    	ext::set<long> out = ext::transform<long>(in, [](const int& elem) { return (long) elem + 1; });
    
    
    	CPPUNIT_ASSERT(ref == out);
    }
    
    
    void AlgorithmTest::testFindRange ( ) {
    
    	{
    		std::string str = "abc<dee<fd<<>>>th>::rrr";
    
    		std::pair < std::string::iterator, std::string::iterator > range = ext::find_range ( str.begin ( ), str.end ( ), '<', '>' );
    
    		std::cerr << range.first - str.begin ( ) << std::endl;
    		std::cerr << range.second - str.begin ( ) << std::endl;
    
    		CPPUNIT_ASSERT ( range.first - str.begin ( ) == 3 );
    		CPPUNIT_ASSERT ( range.second - str.begin ( ) == 18 );
    
    		str.erase ( range.first, range.second );
    		std::cerr << str << std::endl;
    
    		CPPUNIT_ASSERT ( str == "abc::rrr" );
    	}
    	{
    		std::string str = "aaa::abc<dee<fd<<>>>th>";
    
    		std::pair < std::string::iterator, std::string::iterator > range = ext::find_range ( str.begin ( ), str.end ( ), '<', '>' );
    
    		std::cerr << range.first - str.begin ( ) << std::endl;
    		std::cerr << range.second - str.begin ( ) << std::endl;
    
    		CPPUNIT_ASSERT ( range.first - str.begin ( ) == 8 );
    		CPPUNIT_ASSERT ( range.second - str.begin ( ) == 23 );
    
    		str.erase ( range.first, range.second );
    		std::cerr << str << std::endl;
    
    		CPPUNIT_ASSERT ( str == "aaa::abc" );
    	}
    	{
    		std::string str = "<dee<fd<<>>>th>aaa";
    
    		std::pair < std::string::iterator, std::string::iterator > range = ext::find_range ( str.begin ( ), str.end ( ), '<', '>' );
    
    		std::cerr << range.first - str.begin ( ) << std::endl;
    		std::cerr << range.second - str.begin ( ) << std::endl;
    
    		CPPUNIT_ASSERT ( range.first - str.begin ( ) == 0 );
    		CPPUNIT_ASSERT ( range.second - str.begin ( ) == 15 );
    
    		str.erase ( range.first, range.second );
    		std::cerr << str << std::endl;
    
    		CPPUNIT_ASSERT ( str == "aaa" );
    	}
    	{
    		std::string str = "<dee<fd<<>>>th>";
    
    		std::pair < std::string::iterator, std::string::iterator > range = ext::find_range ( str.begin ( ), str.end ( ), '<', '>' );
    
    		std::cerr << range.first - str.begin ( ) << std::endl;
    		std::cerr << range.second - str.begin ( ) << std::endl;
    
    		CPPUNIT_ASSERT ( range.first - str.begin ( ) == 0 );
    		CPPUNIT_ASSERT ( range.second - str.begin ( ) == 15 );
    
    		str.erase ( range.first, range.second );
    		std::cerr << str << std::endl;
    
    		CPPUNIT_ASSERT ( str == "" );
    	}
    
    
    	{
    		std::string str = "<dee<fd<<>>>th";
    
    		std::pair < std::string::iterator, std::string::iterator > range = ext::find_range ( str.begin ( ), str.end ( ), '<', '>' );
    
    		std::cerr << range.first - str.begin ( ) << std::endl;
    		std::cerr << range.second - str.begin ( ) << std::endl;
    
    		CPPUNIT_ASSERT ( range.first - str.begin ( ) == 14 );
    		CPPUNIT_ASSERT ( range.second - str.begin ( ) == 14 );
    	}