Alien-libpanda

 view release on metacpan or  search on metacpan

t/string_test.h  view on Meta::CPAN

            REQUIRE_STRM(String(s, 40, 10), mstr("0123456780"));
            REQUIRE(s.use_count() == 1); //string detached
        }

        SECTION("pop_back") {
            auto exp = StdString(LITERAL).substr(0, LITERAL_LEN-1);
            String s(LITERAL);
            s.pop_back();
            REQUIRE_STR(s, exp, 0);
            s = EMPTY;
            CHECK_ALLOCS();
        }
    }

    static void test_iterator () {
        String s(cstr("0123456789", 5));
        String tmp(s);
        get_allocs();

        SECTION("begin + mutations") {
            auto it = s.begin();
            REQUIRE(*it++ == (T)'0');
            REQUIRE(*it++ == (T)'1');
            REQUIRE(*(it += 2) == (T)'4');
            REQUIRE(*(it -= 1) == (T)'3');

            REQUIRE(s.use_count() == 2); // not detached
            *it = (T)'x';
            REQUIRE(s.use_count() == 1); // detached
            REQUIRE_STRM(String(s, 0, 10), mstr("012x456789"));
        }
        SECTION("end") {
            auto it = s.end();
            REQUIRE(*(--it) == (T)'9');
            REQUIRE(*(--it) == (T)'8');
            std::advance(it, -2);
            REQUIRE(*it == (T)'6');
        }

        SECTION("diffence & eq & ne") {
            auto b = s.begin();
            auto e = s.end();
            REQUIRE(b == b);
            REQUIRE(e == e);
            REQUIRE(b != e);
            REQUIRE(size_t(e - b) == s.length());
        }

        SECTION("ordening relations") {
            auto b = s.begin();
            auto e = s.end();
            REQUIRE(b >= b);
            REQUIRE(!(b > b));
            REQUIRE(e > b);
            REQUIRE(b < e);
            REQUIRE(b <= e);
            REQUIRE(e <= e);
            REQUIRE(!(e < e ));
        }

        SECTION("global -+ operators") {
            auto b = s.begin();
            auto e = s.end();

            REQUIRE(*(b + 1) == (T)'1');
            REQUIRE(*(2 + b) == (T)'2');
            REQUIRE(*(e - 1) == (T)'9');
            REQUIRE(*(2 - e) == (T)'8');
        }

        SECTION("as const iterator") {
            auto b = s.begin();
            auto cb = (const T*)b;
            REQUIRE(*cb++ == (T)'0');
            REQUIRE(*cb++ == (T)'1');
        }

        SECTION("plus and as const iterator") {
            auto b = s.begin() + 2;
            auto cb = (const T*)b;
            REQUIRE(*cb++ == (T)'2');
            REQUIRE(*cb++ == (T)'3');
        }
    }

    static void test_erase () {
        get_allocs();
        SECTION("literal") {
            String s(LITERAL);
            s.erase(11);
            REQUIRE_STR(s, mstr("hello world"), 0);
            CHECK_ALLOCS();
            s.erase(0, 6);
            REQUIRE_STR(s, mstr("world"), 0);
            CHECK_ALLOCS();
            s.erase(1, 3);
            REQUIRE_STR(s, mstr("wd"), MAX_SSO_CHARS);
            CHECK_ALLOCS();
        }
        if (CHAR_SIZE == 1) {
            SECTION("sso") {
                String s(cstr("motherfuck"));
                s.erase(8);
                REQUIRE_STR(s, mstr("motherfu"), MAX_SSO_CHARS);
                s.erase(0, 2);
                REQUIRE_STR(s, mstr("therfu"), MAX_SSO_CHARS-2);
                s.erase(1, 2);
                REQUIRE_STR(s, mstr("trfu"), MAX_SSO_CHARS-4);
                s = EMPTY;
                CHECK_ALLOCS();
            }
        }
        SECTION("internal") {
            auto exp = mstr("0123456789", 7);
            String s(exp.c_str());
            get_allocs();
            s.erase(65);
            REQUIRE_STR(s, mstr("01234567890123456789012345678901234567890123456789012345678901234"), 70);
            s.erase(0, 5);
            REQUIRE_STR(s, mstr("567890123456789012345678901234567890123456789012345678901234"), 65);
            s.erase(5, 5);



( run in 0.504 second using v1.01-cache-2.11-cpan-796a6f069b2 )