void test() { int i[3] = {1, 2, 3}; int j[3] = {4, 5, 6}; Range2 r = std::swap_ranges(Range1(std::make_iter_range(i, i+3)), Range2(std::make_single_iter_range(j))); assert(base(r).base() == j+3); assert(i[0] == 4); assert(i[1] == 5); assert(i[2] == 6); assert(j[0] == 1); assert(j[1] == 2); assert(j[2] == 3); }
void test() { int ia[] = {0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 0, 1, 2, 3, 0, 1, 2, 0, 1, 0}; const unsigned sa = sizeof(ia)/sizeof(ia[0]); int b[] = {0}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(b, b+1))) == Range1(std::make_iter_range(ia+sa-1, ia+sa))); int c[] = {0, 1}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(c, c+2))) == Range1(std::make_iter_range(ia+18, ia+sa))); int d[] = {0, 1, 2}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(d, d+3))) == Range1(std::make_iter_range(ia+15, ia+sa))); int e[] = {0, 1, 2, 3}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(e, e+4))) == Range1(std::make_iter_range(ia+11, ia+sa))); int f[] = {0, 1, 2, 3, 4}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(f, f+5))) == Range1(std::make_iter_range(ia+6, ia+sa))); int g[] = {0, 1, 2, 3, 4, 5}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(g, g+6))) == Range1(std::make_iter_range(ia, ia+sa))); int h[] = {0, 1, 2, 3, 4, 5, 6}; assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(h, h+7))) == Range1(std::make_iter_range(ia+sa, ia+sa))); assert(std::find_end(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(b, b))) == Range1(std::make_iter_range(ia+sa, ia+sa))); assert(std::find_end(Range1(std::make_iter_range(ia, ia)), Range2(std::make_iter_range(b, b+1))) == Range1(std::make_iter_range(ia, ia))); }
void test1() { std::unique_ptr<int> i[3]; for (int k = 0; k < 3; ++k) i[k].reset(new int(k+1)); std::unique_ptr<int> j[3]; for (int k = 0; k < 3; ++k) j[k].reset(new int(k+4)); Range2 r = std::swap_ranges(Range1(std::make_iter_range(i, i+3)), Range2(std::make_single_iter_range(j))); assert(base(r).base() == j+3); assert(*i[0] == 4); assert(*i[1] == 5); assert(*i[2] == 6); assert(*j[0] == 1); assert(*j[1] == 2); assert(*j[2] == 3); }
void test() { int ia[] = {1, 2, 3, 4}; const unsigned sa = sizeof(ia)/sizeof(ia[0]); int ib[] = {1, 2, 3}; assert(!std::lexicographical_compare(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(ib, ib+2)))); assert(std::lexicographical_compare(Range1(std::make_iter_range(ib, ib+2)), Range2(std::make_iter_range(ia, ia+sa)))); assert(!std::lexicographical_compare(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(ib, ib+3)))); assert(std::lexicographical_compare(Range1(std::make_iter_range(ib, ib+3)), Range2(std::make_iter_range(ia, ia+sa)))); assert(std::lexicographical_compare(Range1(std::make_iter_range(ia, ia+sa)), Range2(std::make_iter_range(ib+1, ib+3)))); assert(!std::lexicographical_compare(Range1(std::make_iter_range(ib+1, ib+3)), Range2(std::make_iter_range(ia, ia+sa)))); }
static bool hasDisjointValueRange(const EnumDecl *Enum1, const EnumDecl *Enum2) { ValueRange Range1(Enum1), Range2(Enum2); return llvm::APSInt::compareValues(Range1.MaxVal, Range2.MinVal) < 0 || llvm::APSInt::compareValues(Range2.MaxVal, Range1.MinVal) < 0; }