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]); }
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); }
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); }
// ** 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; }
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; }