int main() { using ranges::begin; using ranges::end; using ranges::size; std::pair<int, int> const a[] = {{0, 0}, {0, 1}, {1, 2}, {1, 3}, {3, 4}, {3, 5}}; static_assert(size(a) == 6, ""); std::pair<int, int> out[size(a)] = {}; auto res = ranges::copy_backward(begin(a), end(a), end(out)); CHECK(res.first == end(a)); CHECK(res.second == begin(out)); CHECK(std::equal(a, a + size(a), out)); std::fill_n(out, size(out), std::make_pair(0, 0)); CHECK(!std::equal(a, a + size(a), out)); res = ranges::copy_backward(a, end(out)); CHECK(res.first == end(a)); CHECK(res.second == begin(out)); CHECK(std::equal(a, a + size(a), out)); std::fill_n(out, size(out), std::make_pair(0, 0)); auto res2 = ranges::copy_backward(ranges::move(a), end(out)); CHECK(res2.first.get_unsafe() == end(a)); CHECK(res2.second == begin(out)); CHECK(std::equal(a, a + size(a), out)); test_repeat_view(); test_initializer_list(); return test_result(); }
int main() { using ranges::begin; using ranges::end; using ranges::size; std::pair<int, int> const a[] = {{0, 0}, {0, 1}, {1, 2}, {1, 3}, {3, 4}, {3, 5}}; static_assert(size(a) == 6, ""); std::pair<int, int> out[size(a)] = {}; auto res = ranges::copy(begin(a), end(a), out); CHECK(res.first == end(a)); CHECK(res.second == out + size(out)); CHECK(&res.first == &res.in()); CHECK(&res.second == &res.out()); CHECK(std::equal(a, a + size(a), out)); std::fill_n(out, size(out), std::make_pair(0, 0)); CHECK(!std::equal(a, a + size(a), out)); res = ranges::copy(a, out); CHECK(res.first == a + size(a)); CHECK(res.second == out + size(out)); CHECK(std::equal(a, a + size(a), out)); std::fill_n(out, size(out), std::make_pair(0, 0)); using ranges::view::delimit; { char const *sz = "hello world"; char buf[50]; auto str = delimit(sz, '\0'); auto res3 = ranges::copy(str, buf); *res3.second = '\0'; CHECK(res3.first == std::next(begin(str), static_cast<std::ptrdiff_t>(std::strlen(sz)))); CHECK(res3.second == buf + std::strlen(sz)); CHECK(std::strcmp(sz, buf) == 0); } { char const *sz = "hello world"; char buf[50]; auto str = delimit(sz, '\0'); auto res3 = ranges::copy(std::move(str), buf); *res3.second = '\0'; CHECK(res3.first.get_unsafe() == std::next(begin(str), static_cast<std::ptrdiff_t>(std::strlen(sz)))); CHECK(res3.second == buf + std::strlen(sz)); CHECK(std::strcmp(sz, buf) == 0); } return test_result(); }
//intersect(currentHint,possibleRanges[j]) //modifies rangelist range nextrange(ranges &rangelist, range &myrange) { if(rangelist.empty()) { range retRange = myrange; myrange.start = myrange.end+1; return retRange; } else { if(myrange.start > rangelist[0].end) { //rangelist[0] is the next range for sure. range retRange = rangelist[0]; rangelist.erase(rangelist.begin()); return retRange; } else if(myrange.start == rangelist[0].end) { if(rangelist[0].start == rangelist[0].end ) { rangelist[0].score++; range retRange = rangelist[0]; rangelist.erase(rangelist.begin()); myrange.start++; return retRange; } else { range retRange = rangelist[0]; retRange.end--; rangelist[0].start = rangelist[0].end; rangelist[0].score++; myrange.start++; return retRange; } } else if(myrange.start >rangelist[0].start) { //we have an intersection here. rangelist[0] <=> myrange.start-1 //update rangelist first element accordingly range retRange = range(rangelist[0].start,myrange.start-1,rangelist[0].score); rangelist[0].start = myrange.start; return retRange; } else if(myrange.start == rangelist[0].start) { if(myrange.end < rangelist[0].end) { // myrange.start to myrange.end is the next range. // We add 1 to score of rangelist[0] score range retRange = range(myrange.start,myrange.end,rangelist[0].score+1); rangelist[0].start = myrange.end+1; myrange.start = myrange.end+1; return retRange; } else { //takes care of myrange.end = rl[0].end also // rangelist[0] with inc score is the nextrange. Remove it from the list. // update myrange accordingly range retRange = range(rangelist[0].start,rangelist[0].end,rangelist[0].score+1); myrange.start = rangelist[0].end+1; rangelist.erase(rangelist.begin()); return retRange; } } else { //myrange.start < rangelist[0].start int end = MIN(myrange.end,rangelist[0].start-1); range retRange = range(myrange.start,end,1); myrange.start = end+1; return retRange; } } }
int main() { using ranges::begin; using ranges::end; using ranges::size; using ranges::less; using P = std::pair<int, int>; P a[] = {{0, 0}, {0, 1}, {1, 2}, {1, 3}, {3, 4}, {3, 5}}; P const c[] = {{0, 0}, {0, 1}, {1, 2}, {1, 3}, {3, 4}, {3, 5}}; CHECK(ranges::aux::upper_bound_n(begin(a), size(a), a[0]) == &a[1]); CHECK(ranges::aux::upper_bound_n(begin(a), size(a), a[1], less()) == &a[2]); CHECK(ranges::aux::upper_bound_n(begin(a), size(a), 1, less(), &std::pair<int, int>::first) == &a[4]); CHECK(ranges::upper_bound(begin(a), end(a), a[0]) == &a[1]); CHECK(ranges::upper_bound(begin(a), end(a), a[1], less()) == &a[2]); CHECK(ranges::upper_bound(begin(a), end(a), 1, less(), &std::pair<int, int>::first) == &a[4]); CHECK(ranges::upper_bound(a, a[2]) == &a[3]); CHECK(ranges::upper_bound(c, c[3]) == &c[4]); CHECK(ranges::upper_bound(a, a[4], less()) == &a[5]); CHECK(ranges::upper_bound(c, c[5], less()) == &c[6]); CHECK(ranges::upper_bound(a, 1, less(), &std::pair<int, int>::first) == &a[4]); CHECK(ranges::upper_bound(c, 1, less(), &std::pair<int, int>::first) == &c[4]); std::vector<P> vec_a(ranges::begin(a), ranges::end(a)); std::vector<P> const vec_c(ranges::begin(c), ranges::end(c)); CHECK(ranges::upper_bound(ranges::view::all(a), a[2]) == &a[3]); CHECK(ranges::upper_bound(ranges::view::all(c), c[3]) == &c[4]); #ifndef RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(a), a[2]))); CHECK(::is_dangling(ranges::upper_bound(std::move(c), c[3]))); #endif // RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(vec_a), vec_a[2]))); CHECK(::is_dangling(ranges::upper_bound(std::move(vec_c), vec_c[3]))); CHECK(ranges::upper_bound(ranges::view::all(a), a[4], less()) == &a[5]); CHECK(ranges::upper_bound(ranges::view::all(c), c[5], less()) == &c[6]); #ifndef RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(a), a[4], less()))); CHECK(::is_dangling(ranges::upper_bound(std::move(c), c[5], less()))); #endif // RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(vec_a), vec_a[4], less()))); CHECK(::is_dangling(ranges::upper_bound(std::move(vec_c), vec_c[5], less()))); CHECK(ranges::upper_bound(ranges::view::all(a), 1, less(), &std::pair<int, int>::first) == &a[4]); CHECK(ranges::upper_bound(ranges::view::all(c), 1, less(), &std::pair<int, int>::first) == &c[4]); #ifndef RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(a), 1, less(), &std::pair<int, int>::first))); CHECK(::is_dangling(ranges::upper_bound(std::move(c), 1, less(), &std::pair<int, int>::first))); #endif // RANGES_WORKAROUND_MSVC_573728 CHECK(::is_dangling(ranges::upper_bound(std::move(vec_a), 1, less(), &std::pair<int, int>::first))); CHECK(::is_dangling(ranges::upper_bound(std::move(vec_c), 1, less(), &std::pair<int, int>::first))); return test_result(); }