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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
#include "cru/common/Format.hpp"
#include "cru/common/String.hpp"
#include <gtest/gtest.h>
TEST(String, Append) {
using cru::String;
String s;
s.append(u"ha");
s.append(s);
ASSERT_EQ(s, String(u"haha"));
}
TEST(String, IndexConvert) {
using cru::String;
String s(u"123");
ASSERT_EQ(s.IndexFromCodePointToCodeUnit(1), 1);
ASSERT_EQ(s.IndexFromCodeUnitToCodePoint(1), 1);
ASSERT_EQ(s.IndexFromCodeUnitToCodePoint(3), 3);
ASSERT_EQ(s.IndexFromCodeUnitToCodePoint(3), 3);
}
TEST(String, Format) {
using cru::Format;
using cru::String;
ASSERT_EQ(Format(u"{} + {} = {}", 123, 321, 444), String(u"123 + 321 = 444"));
}
TEST(String, Trim) {
using cru::String;
ASSERT_EQ(String(u" abc ").Trim(), u"abc");
}
TEST(String, SplitToLines) {
using cru::String;
String s(u"abc\ndef\nghi");
auto lines = s.SplitToLines();
ASSERT_EQ(lines.size(), 3);
ASSERT_EQ(lines[0], String(u"abc"));
ASSERT_EQ(lines[1], String(u"def"));
ASSERT_EQ(lines[2], String(u"ghi"));
}
TEST(String, SplitToLinesWithEmptyLine) {
using cru::String;
String s(u"abc\n \ndef\n\nghi\n");
auto lines = s.SplitToLines();
ASSERT_EQ(lines.size(), 6);
ASSERT_EQ(lines[0], String(u"abc"));
ASSERT_EQ(lines[1], String(u" "));
ASSERT_EQ(lines[2], String(u"def"));
ASSERT_EQ(lines[3], String(u""));
ASSERT_EQ(lines[4], String(u"ghi"));
ASSERT_EQ(lines[5], String(u""));
}
TEST(String, SplitToLinesRemoveSpaceLine) {
using cru::String;
String s(u"abc\n \ndef\n\nghi\n");
auto lines = s.SplitToLines(true);
ASSERT_EQ(lines.size(), 3);
ASSERT_EQ(lines[0], String(u"abc"));
ASSERT_EQ(lines[1], String(u"def"));
ASSERT_EQ(lines[2], String(u"ghi"));
}
TEST(StringView, ToUtf8) {
using cru::StringView;
StringView utf16_text = u"aπ你🤣!";
std::string_view utf8_text = "aπ你🤣!";
ASSERT_EQ(utf16_text.ToUtf8(), utf8_text);
}
TEST(String, FromUtf8) {
std::u16string_view utf16_text = u"aπ你🤣!";
std::string_view utf8_text = "aπ你🤣!";
ASSERT_EQ(cru::String::FromUtf8(utf8_text), utf16_text);
}
TEST(StringView, ParseToDouble) {
using cru::StringView;
ASSERT_EQ(StringView(u"3.14159").ParseToDouble(), 3.14159);
ASSERT_EQ(StringView(u" 3.14159").ParseToDouble(), 3.14159);
ASSERT_EQ(StringView(u" 3.14159 ").ParseToDouble(), 3.14159);
}
TEST(String, ParseToDoubleList) {
using cru::StringView;
auto list = StringView(u" 1.23 2.34 3.45 ").ParseToDoubleList();
ASSERT_EQ(list.size(), 3);
ASSERT_EQ(list[0], 1.23);
ASSERT_EQ(list[1], 2.34);
ASSERT_EQ(list[2], 3.45);
}
|