예제 #1
0
void test() {
	const unsigned n = 4;
	int ia[n] = {0};
	auto f = gen_test{1};
	auto res1 = ranges::generate(Iter(ia), Sent(ia + n), ranges::ref(f));
	CHECK(ia[0] == 1);
	CHECK(ia[1] == 2);
	CHECK(ia[2] == 3);
	CHECK(ia[3] == 4);
	CHECK(res1 == Iter(ia + n));
	CHECK(f.i_ == 5);

	auto rng = ranges::subrange(Iter(ia), Sent(ia + n));
	auto res2 = ranges::generate(rng, ranges::ref(f));
	CHECK(ia[0] == 5);
	CHECK(ia[1] == 6);
	CHECK(ia[2] == 7);
	CHECK(ia[3] == 8);
	CHECK(res2 == Iter(ia + n));
	CHECK(f.i_ == 9);

	auto res3 = ranges::generate(std::move(rng), ranges::ref(f));
	CHECK(ia[0] == 9);
	CHECK(ia[1] == 10);
	CHECK(ia[2] == 11);
	CHECK(ia[3] == 12);
	CHECK(res3 == Iter(ia + n));
	CHECK(f.i_ == 13);
}
예제 #2
0
void
test_range()
{
    {
        const int ia[] = {1, 2, 3, 4, 5, 6};
        CHECK(!ranges::is_partitioned(ranges::make_subrange(Iter(ranges::begin(ia)),
                                                    Sent(ranges::end(ia))),
                                      is_odd()));
    }
    {
        const int ia[] = {1, 3, 5, 2, 4, 6};
        CHECK( ranges::is_partitioned(ranges::make_subrange(Iter(ranges::begin(ia)),
                                                    Sent(ranges::end(ia))),
                                      is_odd()));
    }
    {
        const int ia[] = {2, 4, 6, 1, 3, 5};
        CHECK(!ranges::is_partitioned(ranges::make_subrange(Iter(ranges::begin(ia)),
                                                    Sent(ranges::end(ia))),
                                      is_odd()));
    }
    {
        const int ia[] = {1, 3, 5, 2, 4, 6, 7};
        CHECK(!ranges::is_partitioned(ranges::make_subrange(Iter(ranges::begin(ia)),
                                                    Sent(ranges::end(ia))),
                                      is_odd()));
    }
    {
        const int ia[] = {1, 3, 5, 2, 4, 6, 7};
        CHECK( ranges::is_partitioned(ranges::make_subrange(Iter(ranges::begin(ia)),
                                                    Sent(ranges::begin(ia))),
                                      is_odd()));
    }
}
예제 #3
0
void
test_char()
{
    const unsigned n = 4;
    char ca[n] = {0};
    auto i = ranges::fill(Iter(ca), Sent(ca+n), char(1));
    CHECK(ca[0] == 1);
    CHECK(ca[1] == 1);
    CHECK(ca[2] == 1);
    CHECK(ca[3] == 1);
    CHECK(i == Iter(ca + 4));

    auto rng = ranges::make_iterator_range(Iter(ca), Sent(ca+n));
    i = ranges::fill(rng, char(2));
    CHECK(ca[0] == 2);
    CHECK(ca[1] == 2);
    CHECK(ca[2] == 2);
    CHECK(ca[3] == 2);
    CHECK(i == Iter(ca + 4));

    auto j = ranges::fill(ranges::make_iterator_range(Iter(ca), Sent(ca+n)), char(3));
    CHECK(ca[0] == 3);
    CHECK(ca[1] == 3);
    CHECK(ca[2] == 3);
    CHECK(ca[3] == 3);
    CHECK(j.get_unsafe() == Iter(ca + 4));
}
예제 #4
0
void test_range()
{
    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};
    constexpr unsigned sa = ranges::size(ia);
    int ib[] = {0, 1, 2, 3, 0, 1, 2, 3};
    using Pair = std::pair<Iter, Iter>;
    auto rng1 = ranges::make_range(Iter(ia), Sent(ia + sa));
    CHECK(ranges::mismatch(rng1, Iter(ib)) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng2 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng3 = ranges::make_range(Iter(ib),Sent(ib + sa));
    CHECK(ranges::mismatch(rng2,rng3) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng4 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng5 = ranges::make_range(Iter(ib),Sent(ib + 2));
    CHECK(ranges::mismatch(rng4,rng5) ==
                           Pair{Iter(ia+2),Iter(ib+2)});

    auto rng6 = ranges::make_range(Iter(ia),Sent(ia + sa));
    CHECK(ranges::mismatch(rng6,Iter(ib),std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng7 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng8 = ranges::make_range(Iter(ib),Sent(ib + sa));
    CHECK(ranges::mismatch(rng7,rng8,std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng9 = ranges::make_range(Iter(ia), Sent(ia + sa));
    auto rng10 = ranges::make_range(Iter(ib), Sent(ib + 2));
    CHECK(ranges::mismatch(rng9,rng10,std::equal_to<int>()) ==
                           Pair{Iter(ia+2),Iter(ib+2)});
}
예제 #5
0
void
test_char()
{
    const unsigned n = 4;
    char ca[n] = {0};
    auto i = ranges::fill(Iter(ca), Sent(ca+n), char(1));
    CHECK(ca[0] == 1);
    CHECK(ca[1] == 1);
    CHECK(ca[2] == 1);
    CHECK(ca[3] == 1);
    CHECK(i == Iter(ca + 4));

    auto rng = ranges::make_subrange(Iter(ca), Sent(ca+n));
    i = ranges::fill(rng, char(2));
    CHECK(ca[0] == 2);
    CHECK(ca[1] == 2);
    CHECK(ca[2] == 2);
    CHECK(ca[3] == 2);
    CHECK(i == Iter(ca + 4));

    auto j = ranges::fill(::MakeTestRange(Iter(ca), Sent(ca+n)), char(3));
    CHECK(ca[0] == 3);
    CHECK(ca[1] == 3);
    CHECK(ca[2] == 3);
    CHECK(ca[3] == 3);
    CHECK(::is_dangling(j));
}
예제 #6
0
void
test_char()
{
    const unsigned n = 4;
    char ca[n] = {0};
    auto i = count_and_fill(Iter(ca), Sent(ca+n), char(1));
    CHECK(ca[0] == 1);
    CHECK(ca[1] == 1);
    CHECK(ca[2] == 1);
    CHECK(ca[3] == 1);
    CHECK(i == Iter(ca + 4));

    auto rng = stl2::ext::make_range(Iter(ca), Sent(ca+n));
    i = count_and_fill(rng, char(2));
    CHECK(ca[0] == 2);
    CHECK(ca[1] == 2);
    CHECK(ca[2] == 2);
    CHECK(ca[3] == 2);
    CHECK(i == Iter(ca + 4));

    auto j = count_and_fill(stl2::ext::make_range(Iter(ca), Sent(ca+n)), char(3));
    CHECK(ca[0] == 3);
    CHECK(ca[1] == 3);
    CHECK(ca[2] == 3);
    CHECK(ca[3] == 3);
    CHECK(j.get_unsafe() == Iter(ca + 4));
}
예제 #7
0
void
test_one_rng(unsigned N, unsigned M)
{
    assert(M <= N);
    int* ia = new int[N];
    for (unsigned i = 0; i < N; ++i)
        ia[i] = i;
    std::random_shuffle(ia, ia+N);
    std::sort(ia, ia+M);
    std::sort(ia+M, ia+N);
    auto res = ranges::inplace_merge(::as_lvalue(ranges::make_range(Iter(ia), Sent(ia+N))), Iter(ia+M));
    CHECK(res == Iter(ia+N));
    if(N > 0)
    {
        CHECK(ia[0] == 0);
        CHECK(ia[N-1] == (int)N-1);
        CHECK(std::is_sorted(ia, ia+N));
    }

    std::random_shuffle(ia, ia+N);
    std::sort(ia, ia+M);
    std::sort(ia+M, ia+N);
    auto res2 = ranges::inplace_merge(ranges::make_range(Iter(ia), Sent(ia+N)), Iter(ia+M));
    CHECK(res2.get_unsafe() == Iter(ia+N));
    if(N > 0)
    {
        CHECK(ia[0] == 0);
        CHECK(ia[N-1] == (int)N-1);
        CHECK(std::is_sorted(ia, ia+N));
    }

    delete [] ia;
}
예제 #8
0
void
test1()
{
    {
        const int N = 100;
        std::unique_ptr<int> ia[N];
        for(int i = 0; i < N; ++i)
            ia[i].reset(new int(i));
        std::unique_ptr<int> ib[N];

        std::pair<InIter, OutIter> r = ranges::move(InIter(ia), Sent(ia+N), OutIter(ib));
        CHECK(base(r.first) == ia+N);
        CHECK(base(r.second) == ib+N);
        for(int i = 0; i < N; ++i)
        {
            CHECK(ia[i].get() == nullptr);
            CHECK(*ib[i] == i);
        }
    }

    {
        const int N = 100;
        std::unique_ptr<int> ia[N];
        for(int i = 0; i < N; ++i)
            ia[i].reset(new int(i));
        std::unique_ptr<int> ib[N];

        std::pair<InIter, OutIter> r = ranges::move(as_lvalue(ranges::make_iterator_range(InIter(ia), Sent(ia+N))), OutIter(ib));
        CHECK(base(r.first) == ia+N);
        CHECK(base(r.second) == ib+N);
        for(int i = 0; i < N; ++i)
        {
            CHECK(ia[i].get() == nullptr);
            CHECK(*ib[i] == i);
        }

        ranges::move(ib, ib+N, ia);

        auto r2 = ranges::move(ranges::make_iterator_range(InIter(ia), Sent(ia+N)), OutIter(ib));
        CHECK(base(r2.first.get_unsafe()) == ia+N);
        CHECK(base(r2.second) == ib+N);
        for(int i = 0; i < N; ++i)
        {
            CHECK(ia[i].get() == nullptr);
            CHECK(*ib[i] == i);
        }
    }
}
예제 #9
0
void test_iter_comp()
{
    typedef std::greater<int> C;
    int ia[] = {6, 5, 4, 3, 2, 1};
    const int sa = sizeof(ia)/sizeof(ia[0]);
    int prev[sa];
    for(int e = 0; e <= sa; ++e)
    {
        int count = 0;
        bool x;
        do
        {
            std::copy(ia, ia+e, prev);
            x = ranges::next_permutation(Iter(ia), Sent(ia+e), C());
            if(e > 1)
            {
                if (x)
                    CHECK(std::lexicographical_compare(prev, prev+e, ia, ia+e, C()));
                else
                    CHECK(std::lexicographical_compare(ia, ia+e, prev, prev+e, C()));
            }
            ++count;
        } while (x);
        CHECK(count == factorial(e));
    }
}
예제 #10
0
void
test()
{
    {
        const int N = 1000;
        int ia[N];
        for(int i = 0; i < N; ++i)
            ia[i] = i;
        int ib[N] = {0};

        std::pair<InIter, OutIter> r = ranges::move(InIter(ia), Sent(ia+N), OutIter(ib));
        CHECK(base(r.first) == ia+N);
        CHECK(base(r.second) == ib+N);
        for(int i = 0; i < N; ++i)
            CHECK(ia[i] == ib[i]);
    }

    {
        const int N = 1000;
        int ia[N];
        for(int i = 0; i < N; ++i)
            ia[i] = i;
        int ib[N] = {0};

        std::pair<InIter, OutIter> r = ranges::move(as_lvalue(ranges::make_iterator_range(InIter(ia), Sent(ia+N))), OutIter(ib));
        CHECK(base(r.first) == ia+N);
        CHECK(base(r.second) == ib+N);
        for(int i = 0; i < N; ++i)
            CHECK(ia[i] == ib[i]);
    }
}
예제 #11
0
void RequestQueue::Sent(time_t timestamp, bt_index_t idx, bt_offset_t off,
  bt_length_t len)
{
  SLICE *slice;
  if( (slice = FindSlice(idx, off, len)) )
    Sent(timestamp, slice);
}
예제 #12
0
void test_range()
{
    int ia[] = {1, 2, 3, 4, 5, 6};
    const int sa = sizeof(ia)/sizeof(ia[0]);
    int prev[sa];
    for (int e = 0; e <= sa; ++e)
    {
        int count = 0;
        bool x;
        do
        {
            std::copy(ia, ia+e, prev);
            x = ranges::next_permutation(ranges::ext::make_range(Iter(ia), Sent(ia+e)));
            if(e > 1)
            {
                if(x)
                    CHECK(std::lexicographical_compare(prev, prev+e, ia, ia+e));
                else
                    CHECK(std::lexicographical_compare(ia, ia+e, prev, prev+e));
            }
            ++count;
        } while(x);
        CHECK(count == factorial(e));
    }
}
예제 #13
0
void test()
{
    int ir[] = {5, 6, 7, 8, 9};
    constexpr auto s = ranges::size(ir);
    {
        int ia[] = {1, 2, 3, 4, 5};
        ranges::iota(Iter(ia), Sent(ia + s), 5);
        CHECK(ranges::equal(ia, ir));
    }

    {
        int ia[] = {1, 2, 3, 4, 5};
        auto rng = ranges::make_subrange(Iter(ia), Sent(ia + s));
        ranges::iota(rng, 5);
        CHECK(ranges::equal(ia, ir));
    }
}
예제 #14
0
void
test_iter(unsigned N)
{
    std::unique_ptr<int[]> a{new int[N]};
    std::iota(a.get(), a.get()+N, 0);
    std::shuffle(a.get(), a.get()+N, gen);
    test_iter(Iter(a.get()), Sent(a.get()+N));
}
예제 #15
0
void
test_int()
{
    const unsigned n = 4;
    int ia[n] = {0};
    count_and_fill(Iter(ia), Sent(ia+n), 1);
    CHECK(ia[0] == 1);
    CHECK(ia[1] == 1);
    CHECK(ia[2] == 1);
    CHECK(ia[3] == 1);

    auto rng = stl2::ext::make_range(Iter(ia), Sent(ia+n));
    count_and_fill(rng, 2);
    CHECK(ia[0] == 2);
    CHECK(ia[2] == 2);
    CHECK(ia[2] == 2);
    CHECK(ia[3] == 2);
}
예제 #16
0
void
test_int()
{
    const unsigned n = 4;
    int ia[n] = {0};
    ranges::fill(Iter(ia), Sent(ia+n), 1);
    CHECK(ia[0] == 1);
    CHECK(ia[1] == 1);
    CHECK(ia[2] == 1);
    CHECK(ia[3] == 1);

    auto rng = ranges::make_subrange(Iter(ia), Sent(ia+n));
    ranges::fill(rng, 2);
    CHECK(ia[0] == 2);
    CHECK(ia[2] == 2);
    CHECK(ia[2] == 2);
    CHECK(ia[3] == 2);
}
예제 #17
0
void test_range()
{
    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};
    constexpr unsigned sa = ranges::size(ia);
    int ib[] = {0, 1, 2, 3, 0, 1, 2, 3};
    using Pair = std::pair<Iter, Iter>;
    auto rng1 = ranges::make_range(Iter(ia), Sent(ia + sa));
    CHECK(ranges::mismatch(rng1, Iter(ib)) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto r1 = ranges::mismatch(std::move(rng1), Iter(ib));
    CHECK(r1.first.get_unsafe() == Iter(ia+3));
    CHECK(r1.second == Iter(ib+3));
    auto rng2 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng3 = ranges::make_range(Iter(ib),Sent(ib + sa));
    CHECK(ranges::mismatch(rng2,rng3) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto r2 = ranges::mismatch(std::move(rng2), std::move(rng3));
    CHECK(r2.first.get_unsafe() == Iter(ia+3));
    CHECK(r2.second.get_unsafe() == Iter(ib+3));
    auto r3 = ranges::mismatch(rng2, std::move(rng3));
    CHECK(r3.first == Iter(ia+3));
    CHECK(r3.second.get_unsafe() == Iter(ib+3));
    auto r4 = ranges::mismatch(std::move(rng2), rng3);
    CHECK(r4.first.get_unsafe() == Iter(ia+3));
    CHECK(r4.second == Iter(ib+3));
    auto rng4 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng5 = ranges::make_range(Iter(ib),Sent(ib + 2));
    CHECK(ranges::mismatch(rng4,rng5) ==
                           Pair{Iter(ia+2),Iter(ib+2)});

    auto rng6 = ranges::make_range(Iter(ia),Sent(ia + sa));
    CHECK(ranges::mismatch(rng6,Iter(ib),std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng7 = ranges::make_range(Iter(ia),Sent(ia + sa));
    auto rng8 = ranges::make_range(Iter(ib),Sent(ib + sa));
    CHECK(ranges::mismatch(rng7,rng8,std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    auto rng9 = ranges::make_range(Iter(ia), Sent(ia + sa));
    auto rng10 = ranges::make_range(Iter(ib), Sent(ib + 2));
    CHECK(ranges::mismatch(rng9,rng10,std::equal_to<int>()) ==
                           Pair{Iter(ia+2),Iter(ib+2)});
}
예제 #18
0
void test_iter()
{
    int ia[] = {0, 1, 2, 2, 0, 1, 2, 3};
    constexpr unsigned sa = ranges::size(ia);
    int ib[] = {0, 1, 2, 3, 0, 1, 2, 3};
    using Pair = std::pair<Iter, Iter>;
    CHECK(ranges::mismatch(Iter(ia), Sent(ia + sa), Iter(ib)) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    CHECK(ranges::mismatch(Iter(ia),Sent(ia + sa),Iter(ib),Sent(ib + sa)) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    CHECK(ranges::mismatch(Iter(ia),Sent(ia + sa),Iter(ib),Sent(ib + 2)) ==
                           Pair{Iter(ia+2),Iter(ib+2)});

    CHECK(ranges::mismatch(Iter(ia),Sent(ia + sa),Iter(ib),std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    CHECK(ranges::mismatch(Iter(ia),Sent(ia + sa),Iter(ib),Sent(ib + sa),std::equal_to<int>()) ==
                           Pair{Iter(ia+3),Iter(ib+3)});
    CHECK(ranges::mismatch(Iter(ia), Sent(ia + sa), Iter(ib), Sent(ib + 2), std::equal_to<int>()) ==
                           Pair{Iter(ia+2),Iter(ib+2)});
}
예제 #19
0
void test_iter()
{
    int ia[] = {0, 1, 2, 3, 4};
    const unsigned sa = sizeof(ia)/sizeof(ia[0]);
    Iter i = ranges::replace_if(Iter(ia), Sent(ia+sa), [](int i){return i==2;}, 5);
    CHECK(ia[0] == 0);
    CHECK(ia[1] == 1);
    CHECK(ia[2] == 5);
    CHECK(ia[3] == 3);
    CHECK(ia[4] == 4);
    CHECK(base(i) == ia + sa);
}
예제 #20
0
void
test()
{
    const unsigned n = 4;
    int ia[n] = {0};
    std::pair<Iter, gen_test> res = ranges::generate(Iter(ia), Sent(ia + n), gen_test(1));
    CHECK(ia[0] == 1);
    CHECK(ia[1] == 2);
    CHECK(ia[2] == 3);
    CHECK(ia[3] == 4);
    CHECK(res.first == Iter(ia + n));
    CHECK(res.second.i_ == 5);

    auto rng = ranges::range(Iter(ia), Sent(ia + n));
    res = ranges::generate(rng, res.second);
    CHECK(ia[0] == 5);
    CHECK(ia[1] == 6);
    CHECK(ia[2] == 7);
    CHECK(ia[3] == 8);
    CHECK(res.first == Iter(ia + n));
    CHECK(res.second.i_ == 9);
}
예제 #21
0
void test_iter()
{
    int ia[] = {0, 1, 2, 3, 4};
    const unsigned sa = sizeof(ia)/sizeof(ia[0]);
    int ib[sa] = {0};
    std::pair<InIter, OutIter> r = ranges::replace_copy(InIter(ia), Sent(ia+sa), OutIter(ib), 2, 5);
    CHECK(base(r.first) == ia + sa);
    CHECK(base(r.second) == ib + sa);
    CHECK(ib[0] == 0);
    CHECK(ib[1] == 1);
    CHECK(ib[2] == 5);
    CHECK(ib[3] == 3);
    CHECK(ib[4] == 4);
}
예제 #22
0
/**
 * @param int 二进制位表示要显示的数码管位置。1表示选中,0未选中。高位表示左边晶体管,低位在右
 * @param int 表示要显示的值,支持16进制字符。16表示消影
 * @param int 表示是否有小数点
 */
void Display(int loca, int num, int boo)
{
	int lo, i, temp;
	loca = ~loca; //使得1表示选中,0表示未选中
	lo = 0;
	for (i = 0; i < 8; i++) //lo为loca左右颠倒
	{						//使得高位表示左边晶体管,低位在右
		lo <<= 1;
		if (loca & 0x01)
			lo |= 0x01;
		loca >>= 1;
	}
	temp = encode[num]; //对编码添加小数点
	if (boo)
	{
		temp |= 0x80;
	}

	Sent(lo);   //发送要显示的位置,8位
	Sent(temp); //发送要显示的值,将前8位位置数据推送至下一个串联的移位寄存器
	RCK = 0;	//产生一个上沿,输出存储器中锁存的数据
	RCK = 1;
}
예제 #23
0
void
test_iter()
{
    int ia[] = {0, 1, 2, 3, 4, 2, 3, 4, 2};
    constexpr unsigned sa = stl2::size(ia);
    Iter r = stl2::remove(Iter(ia), Sent(ia+sa), 2);
    CHECK(base(r) == ia + sa-3);
    CHECK(ia[0] == 0);
    CHECK(ia[1] == 1);
    CHECK(ia[2] == 3);
    CHECK(ia[3] == 4);
    CHECK(ia[4] == 3);
    CHECK(ia[5] == 4);
}
예제 #24
0
void
test_range()
{
    int ia[] = {0, 1, 2, 3, 4, 2, 3, 4, 2};
    constexpr unsigned sa = stl2::size(ia);
    Iter r = stl2::remove(::as_lvalue(stl2::ext::make_range(Iter(ia), Sent(ia+sa))), 2);
    CHECK(base(r) == ia + sa-3);
    CHECK(ia[0] == 0);
    CHECK(ia[1] == 1);
    CHECK(ia[2] == 3);
    CHECK(ia[3] == 4);
    CHECK(ia[4] == 3);
    CHECK(ia[5] == 4);
}
예제 #25
0
void test_rng()
{
    int ia[] = {0, 1, 2, 3, 4};
    const unsigned sa = sizeof(ia)/sizeof(ia[0]);
    int ib[sa] = {0};
    auto rng = ranges::make_iterator_range(InIter(ia), Sent(ia+sa));
    std::pair<InIter, OutIter> r = ranges::replace_copy_if(rng, OutIter(ib),
        [](int i){return 2==i;}, 5);
    CHECK(base(r.first) == ia + sa);
    CHECK(base(r.second) == ib + sa);
    CHECK(ib[0] == 0);
    CHECK(ib[1] == 1);
    CHECK(ib[2] == 5);
    CHECK(ib[3] == 3);
    CHECK(ib[4] == 4);
}
예제 #26
0
void
test_iter()
{
    int ia[] = {0, 1, 2, 3, 4, 2, 3, 4, 2};
    constexpr unsigned sa = ranges::size(ia);
    int ib[sa];
    std::pair<InIter, OutIter> r = ranges::remove_copy_if(InIter(ia), Sent(ia+sa), OutIter(ib), [](int i){return i == 2;});
    CHECK(base(r.first) == ia + sa);
    CHECK(base(r.second) == ib + sa-3);
    CHECK(ib[0] == 0);
    CHECK(ib[1] == 1);
    CHECK(ib[2] == 3);
    CHECK(ib[3] == 4);
    CHECK(ib[4] == 3);
    CHECK(ib[5] == 4);
}
예제 #27
0
void tOJDeviceOtherData::OnDataSent()
{
    bool success = false;

    QNetworkReply* pReply = qobject_cast<QNetworkReply*>( sender() );

    if( pReply != 0 )
    {
        QVariant statusCode = pReply->attribute( QNetworkRequest::HttpStatusCodeAttribute );
        if ( statusCode.isValid() )
        {
            int status = statusCode.toInt();

            if ( status != 200 )
            {
                QString reason = pReply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString();
                ErrorPrintf( QString("%1(): %2 %3").arg(__FUNCTION__).arg(status).arg(reason).toLatin1() );
                QString content = pReply->readAll();
                ErrorPrintf( QString("%1(): %2").arg(__FUNCTION__).arg(content).toLatin1() );
            }
            else
            {
                QString content = pReply->readAll();

                tJson json;
                bool ok;
                QVariantMap result = json.Parse( content, ok ).toMap();
                if ( result["OJ_DeviceOtherDataResult"].isValid() == false )
                {
                    DbgPrintf( QString("  error_status = %1").arg(result["error_status"].toInt()) );
                    DbgPrintf( QString("  language = %1").arg(result["language"].toString()) );
                    DbgPrintf( QString("  error_message = %1").arg(result["error_message"].toString()) );            }
                else
                {
                    QVariantMap nested = result["OJ_DeviceOtherDataResult"].toMap();

                    success = true;
                }
            }
        }
        pReply->deleteLater();
    }

    emit Sent( success );
}
예제 #28
0
void
test_iter()
{
    test_iter<Iter, Sent>(0);
    test_iter<Iter, Sent>(1);
    test_iter<Iter, Sent>(2);
    test_iter<Iter, Sent>(3);
    test_iter<Iter, Sent>(10);
    test_iter<Iter, Sent>(1000);
    {
        const unsigned N = 100;
        std::unique_ptr<int[]> a{new int[N]};
        std::fill_n(a.get(), N, 5);
        std::shuffle(a.get(), a.get()+N, gen);
        std::pair<Iter, Iter> p = ranges::minmax_element(Iter(a.get()), Sent(a.get()+N));
        CHECK(base(p.first) == a.get());
        CHECK(base(p.second) == a.get()+N-1);
    }
}
예제 #29
0
void
test_range_rvalue()
{
    constexpr unsigned sa = 9;
    std::unique_ptr<int> ia[sa];
    ia[0].reset(new int(0));
    ia[1].reset(new int(1));
    ia[3].reset(new int(3));
    ia[4].reset(new int(4));
    ia[6].reset(new int(3));
    ia[7].reset(new int(4));
    Iter r = stl2::remove(::as_lvalue(stl2::ext::make_range(Iter(ia), Sent(ia+sa))), std::unique_ptr<int>());
    CHECK(base(r) == ia + sa-3);
    CHECK(*ia[0] == 0);
    CHECK(*ia[1] == 1);
    CHECK(*ia[2] == 3);
    CHECK(*ia[3] == 4);
    CHECK(*ia[4] == 3);
    CHECK(*ia[5] == 4);
}
예제 #30
0
void test_iter() {
	const int ia[] = {0};
	const unsigned sa = sizeof(ia)/sizeof(ia[0]);
	int ja[sa] = {-1};
	count_equal::count = 0;
	ranges::unique_copy_result<InIter, OutIter> r =
		ranges::unique_copy(InIter(ia), Sent(ia+sa), OutIter(ja), count_equal());
	CHECK(base(r.in) == ia + sa);
	CHECK(base(r.out) == ja + sa);
	CHECK(ja[0] == 0);
	CHECK(count_equal::count == sa - 1);

	const int ib[] = {0, 1};
	const unsigned sb = sizeof(ib)/sizeof(ib[0]);
	int jb[sb] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ib), Sent(ib+sb), OutIter(jb), count_equal());
	CHECK(base(r.in) == ib + sb);
	CHECK(base(r.out) == jb + sb);
	CHECK(jb[0] == 0);
	CHECK(jb[1] == 1);
	CHECK(count_equal::count == sb - 1);

	const int ic[] = {0, 0};
	const unsigned sc = sizeof(ic)/sizeof(ic[0]);
	int jc[sc] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ic), Sent(ic+sc), OutIter(jc), count_equal());
	CHECK(base(r.in) == ic + sc);
	CHECK(base(r.out) == jc + 1);
	CHECK(jc[0] == 0);
	CHECK(count_equal::count == sc - 1);

	const int id[] = {0, 0, 1};
	const unsigned sd = sizeof(id)/sizeof(id[0]);
	int jd[sd] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(id), Sent(id+sd), OutIter(jd), count_equal());
	CHECK(base(r.in) == id + sd);
	CHECK(base(r.out) == jd + 2);
	CHECK(jd[0] == 0);
	CHECK(jd[1] == 1);
	CHECK(count_equal::count == sd - 1);

	const int ie[] = {0, 0, 1, 0};
	const unsigned se = sizeof(ie)/sizeof(ie[0]);
	int je[se] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ie), Sent(ie+se), OutIter(je), count_equal());
	CHECK(base(r.in) == ie + se);
	CHECK(base(r.out) == je + 3);
	CHECK(je[0] == 0);
	CHECK(je[1] == 1);
	CHECK(je[2] == 0);
	CHECK(count_equal::count == se - 1);

	const int ig[] = {0, 0, 1, 1};
	const unsigned sg = sizeof(ig)/sizeof(ig[0]);
	int jg[sg] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ig), Sent(ig+sg), OutIter(jg), count_equal());
	CHECK(base(r.in) == ig + sg);
	CHECK(base(r.out) == jg + 2);
	CHECK(jg[0] == 0);
	CHECK(jg[1] == 1);
	CHECK(count_equal::count == sg - 1);

	const int ih[] = {0, 1, 1};
	const unsigned sh = sizeof(ih)/sizeof(ih[0]);
	int jh[sh] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ih), Sent(ih+sh), OutIter(jh), count_equal());
	CHECK(base(r.in) == ih + sh);
	CHECK(base(r.out) == jh + 2);
	CHECK(jh[0] == 0);
	CHECK(jh[1] == 1);
	CHECK(count_equal::count == sh - 1);

	const int ii[] = {0, 1, 1, 1, 2, 2, 2};
	const unsigned si = sizeof(ii)/sizeof(ii[0]);
	int ji[si] = {-1};
	count_equal::count = 0;
	r = ranges::unique_copy(InIter(ii), Sent(ii+si), OutIter(ji), count_equal());
	CHECK(base(r.in) == ii + si);
	CHECK(base(r.out) == ji + 3);
	CHECK(ji[0] == 0);
	CHECK(ji[1] == 1);
	CHECK(ji[2] == 2);
	CHECK(count_equal::count == si - 1);
}