Exemple #1
0
void test()
{
    // instantiate IntegerSet

    IntegerSet a;
    unit_assert(a.empty());

    a.insert(1);
    unit_assert(!a.empty());

    a.insert(2);
    a.insert(IntegerSet::Interval(0,2));
    a.insert(0,2);
    a.insert(4);

    // verify virtual container contents: 0, 1, 2, 4

    if (os_)
    {            
        copy(a.begin(), a.end(), ostream_iterator<int>(*os_," ")); 
        *os_ << endl;
    }

    vector<int> b; 
    copy(a.begin(), a.end(), back_inserter(b));

    unit_assert(b.size() == 4);
    unit_assert(b[0] == 0);
    unit_assert(b[1] == 1);
    unit_assert(b[2] == 2);
    unit_assert(b[3] == 4);

    // insert [2,4], and verify contents: 0, 1, 2, 3, 4

    a.insert(2,4);

    if (os_)
    {            
        copy(a.begin(), a.end(), ostream_iterator<int>(*os_," ")); 
        *os_ << endl;
    }

    b.clear();
    copy(a.begin(), a.end(), back_inserter(b));

    unit_assert(b.size() == 5);
    for (int i=0; i<5; i++)
        unit_assert(i == b[i]);
}
Exemple #2
0
void testParse2()
{
    IntegerSet a;

    a.parse(" [-3,2] 5  8-9 10- ");  // insert(-3,2); insert(5); insert(8,9); insert(10,INT_MAX);

    unit_assert(a.intervalCount() == 3);
    unit_assert(a.size() == 9ul + numeric_limits<int>::max()-10+1);

    vector<int> b;
    IntegerSet::const_iterator it = a.begin();
    for (int i=0; i<11; ++i, ++it) // don't copy to the end() unless you have lots of time and space ;)
        b.push_back(*it);

    unit_assert(b.size() == 11);
    unit_assert(b[0] == -3);
    unit_assert(b[1] == -2);
    unit_assert(b[2] == -1);
    unit_assert(b[3] == 0);
    unit_assert(b[4] == 1);
    unit_assert(b[5] == 2);
    unit_assert(b[6] == 5);
    unit_assert(b[7] == 8);
    unit_assert(b[8] == 9);
    unit_assert(b[9] == 10);
    unit_assert(b[10] == 11);
}
Exemple #3
0
void testParse()
{
    IntegerSet a;

    a.parse(" [-3,2] [5,5] [8,9] booger ");  // insert(-3,2); insert(5); insert(8,9);

    unit_assert(a.intervalCount() == 3);
    unit_assert(a.size() == 9);

    vector<int> b;
    copy(a.begin(), a.end(), back_inserter(b));
    unit_assert(b.size() == 9);
    unit_assert(b[0] == -3);
    unit_assert(b[1] == -2);
    unit_assert(b[2] == -1);
    unit_assert(b[3] == 0);
    unit_assert(b[4] == 1);
    unit_assert(b[5] == 2);
    unit_assert(b[6] == 5);
    unit_assert(b[7] == 8);
    unit_assert(b[8] == 9);
}
Exemple #4
0
// ** Films::formatGenres
std::string Films::formatGenres( const IntegerSet& genres )
{
    const char* genreName[] = {
        "",
        "Экшн",
        "Приключения",
        "Мультфильм",
        "Детский",
        "Комедия",
        "Криминал",
        "Документальный",
        "Драма",
        "Фентези",
        "Нуар",
        "Ужасы",
        "Музыкальный",
        "Таинственный",
        "Романтический",
        "Научная фантастика",
        "Триллер",
        "Военный",
        "Вестерн",
        "IMAX",
    };

    std::string result;
    for( IntegerSet::const_iterator i = genres.begin(), end = genres.end(); i != end; ++i ) {
        if( result != "" ) {
            result += ", ";
        }
        
        result += genreName[*i];
    }

    return result;
}
Exemple #5
0
SetRelations Relationship (IntegerSet &one, IntegerSet &two)
{
	SetRelations result;

/*        cout << " {";
        std::copy (one.begin(), one.end(),
                std::ostream_iterator<int>(cout, " "));
        cout << "}";

       cout << " {";
        std::copy (two.begin(), two.end(),
                std::ostream_iterator<int>(cout, " "));
        cout << "}";
*/
    if (one == two)
    	result = IDENTITY;
    else if (std::includes (two.begin(), two.end(), one.begin(), one.end()))
    	result = SUBSET; // one is a subset of two
    else if (std::includes (one.begin(), one.end(), two.begin(), two.end()))
    	result = SUPERSET; // two is a subset of one
    else
    {
        IntegerSet common;
        std::set_intersection (one.begin(), one.end(),
            two.begin(), two.end(),
            std::inserter (common, common.end()));
        if (common.size() == 0)
        	result = DISJOINT;
        else
        	result = OVERLAPPING;
    }

//    cout << "result=" << result << endl;

    return result;
}