File: stringfuncs.cpp

package info (click to toggle)
liblsl 1.16.2b1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 1,724 kB
  • sloc: cpp: 12,515; ansic: 666; python: 28; sh: 25; makefile: 18
file content (59 lines) | stat: -rw-r--r-- 2,106 bytes parent folder | download
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include "util/strfuns.hpp"
#include <catch2/catch.hpp>

// clazy:excludeall=non-pod-global-static

using vec = std::vector<std::string>;

TEST_CASE("strings are split correctly", "[string][basic]") {
	CHECK(lsl::splitandtrim(" ", ',', true) == vec{""});
	CHECK(lsl::splitandtrim(" ", ',', false) == vec{});
	CHECK(lsl::splitandtrim(" , ", ',', true) == vec{"", ""});
	CHECK(lsl::splitandtrim(" , ", ',', false) == vec{});
	CHECK(lsl::splitandtrim(" a ", ',', false) == vec{"a"});
	CHECK(lsl::splitandtrim("a,b", ',', true) == vec{"a", "b"});
	CHECK(lsl::splitandtrim(",a,,", ',', false) == vec{"a"});
	CHECK(lsl::splitandtrim("a, b \t,\t c ", ',', true) == vec{"a", "b", "c"});
}

TEST_CASE("trim functions", "[string][basic]") {
	std::string testcase = "\nHello World\t\n  123";
	CHECK(*lsl::trim_begin(testcase.begin(), testcase.end()) == 'H');
	CHECK(*lsl::trim_end(testcase.begin(), testcase.begin() + 16) == '\t');
	std::string trimmed = "Hello World";
	CHECK(lsl::trim_begin(trimmed.begin(), trimmed.end()) == trimmed.begin());
	CHECK(lsl::trim_end(trimmed.begin(), trimmed.end()) == trimmed.end());
	const char test[] = "Hello World";
	CHECK(*lsl::trim_end(test, test + sizeof(test) - 1) == 0);

	auto begin = testcase.begin(), end = testcase.end();
	lsl::trim(begin, end);
	CHECK(*begin == 'H');
	CHECK(*(end - 1) == '3');

	CHECK(lsl::trim(testcase) == "Hello World\t\n  123");
	CHECK(lsl::trim("") == "");
}

inline bool test_split_headerline(
	std::string str, const char *expected_key, const char *expected_value) {
	std::string key, value;
	bool result = lsl::split_headerline(&str[0], str.size(), key, value);
	INFO(str);
	CHECK(key == expected_key);
	CHECK(value == expected_value);
	return result;
}

TEST_CASE("split_headerline", "[string][basic]") {
	std::string basic[] = {{"a:b"}, {"	a	:	b	\r\n"}, {"a: b;not c"}};
	for(auto &str: basic)
		CHECK(test_split_headerline(str, "a", "b"));

	// empty line
	CHECK(!test_split_headerline("", "", ""));
	// empty key+val
	CHECK(test_split_headerline(":", "", ""));
	// comment in key (?!)
	CHECK(!test_split_headerline("wha;t:??", "", ""));
}