summaryrefslogtreecommitdiff
path: root/src/ranges.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2017-12-07 01:58:19 +0800
committerMaxime Coste <mawww@kakoune.org>2017-12-07 01:58:19 +0800
commitbedb98220cf45e328e6b1ce98b7c984e15ceeb62 (patch)
treea782bfbcd6793a81c58bf243bd71c6403de04ab1 /src/ranges.cc
parent2f48bbf6ff0c2bad4d06ce1189cd8e0e50d7a447 (diff)
Ranges: add unit test and fix corner case in split view
Diffstat (limited to 'src/ranges.cc')
-rw-r--r--src/ranges.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/ranges.cc b/src/ranges.cc
new file mode 100644
index 00000000..d1603c18
--- /dev/null
+++ b/src/ranges.cc
@@ -0,0 +1,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"(\)", ""});
+}};
+
+}