summaryrefslogtreecommitdiff
path: root/src/ranges.cc
blob: d1603c18dd5e7bc86bd126f2109705b34c7bfbd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "ranges.hh"
#include "unit_tests.hh"
#include "string.hh"
#include "string_utils.hh"

namespace Kakoune
{

UnitTest test_ranges{[] {
    auto check_equal = [](auto&& container, ConstArrayView<StringView> expected) {
        kak_assert(std::equal(container.begin(), container.end(), expected.begin(), expected.end()));
    };
    check_equal("a,b,c"_sv | split<StringView>(','), {"a", "b", "c"});
    check_equal(",b,c"_sv  | split<StringView>(','), {"", "b", "c"});
    check_equal(",b,"_sv   | split<StringView>(','), {"", "b", ""});
    check_equal(","_sv     | split<StringView>(','), {"", ""});
    check_equal(""_sv      | split<StringView>(','), {});

    check_equal(R"(a\,,\,b,\,)"_sv | split<StringView>(',', '\\')
                                   | transform(unescape<',', '\\'>), {"a,", ",b", ","});
    check_equal(R"(\,\,)"_sv | split<StringView>(',', '\\')
                             | transform(unescape<',', '\\'>), {",,"});
    check_equal(R"(\\,\\,)"_sv | split<StringView>(',', '\\')
                               | transform(unescape<',', '\\'>), {R"(\)", R"(\)", ""});
}};

}