-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstring_test.cpp
More file actions
123 lines (105 loc) · 3.99 KB
/
Copy pathstring_test.cpp
File metadata and controls
123 lines (105 loc) · 3.99 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include "string.hpp"
#define JSM_TEST(DESC, ...) static_assert((bool)[]{ __VA_ARGS__ })
#define JSM_EXPECT(...) static_assert((__VA_ARGS__))
JSM_TEST("string", {
constexpr jsm::string example = "123456";
JSM_EXPECT(example.size() == 6);
JSM_EXPECT(example.front() == '1');
JSM_EXPECT(example[0] == '1');
JSM_EXPECT(example[1] == '2');
JSM_EXPECT(example[2] == '3');
JSM_EXPECT(example[3] == '4');
JSM_EXPECT(example[4] == '5');
JSM_EXPECT(example[5] == '6');
JSM_EXPECT(example[6] == '\0');
JSM_EXPECT(example.back() == '6');
});
JSM_TEST("map", {
JSM_EXPECT(jsm::map<"abc123def">(jsm::toupper) == "ABC123DEF");
JSM_EXPECT(jsm::map<"abc123DEF">(jsm::toupper) == "ABC123DEF");
JSM_EXPECT(jsm::map<"ABC123DEF">(jsm::tolower) == "abc123def");
JSM_EXPECT(jsm::map<"abc123DEF">(jsm::tolower) == "abc123def");
});
JSM_TEST("fold", {
constexpr jsm::string example = "123abc456";
constexpr auto max_char = [](char acc, char c) {
return (c > acc) ? c : acc;
};
JSM_EXPECT(jsm::fold<example>(0, max_char) == 'c');
});
JSM_TEST("slice", {
constexpr jsm::string ab = "123456";
JSM_EXPECT(jsm::slice<ab, 0, 3>() == "123");
JSM_EXPECT(jsm::slice<ab, 2, 4>() == "34");
JSM_EXPECT(jsm::slice<ab, 3, 6>() == "456");
});
JSM_TEST("substr", {
constexpr jsm::string ab = "123456";
JSM_EXPECT(jsm::substr<ab>() == "123456");
JSM_EXPECT(jsm::substr<ab, 0, 3>() == "123");
JSM_EXPECT(jsm::substr<ab, 2, 2>() == "34");
JSM_EXPECT(jsm::substr<ab, 3, 3>() == "456");
JSM_EXPECT(jsm::substr<ab, 2>() == "3456");
JSM_EXPECT(jsm::substr<ab, 3, 0>() == jsm::empty);
});
JSM_TEST("concat", {
constexpr jsm::string a = "123";
constexpr jsm::string b = "456";
constexpr jsm::string c = "789";
constexpr jsm::string d = "0";
JSM_EXPECT(jsm::concat<a, b>() == "123456");
JSM_EXPECT(jsm::concat<a, b, c>() == "123456789");
JSM_EXPECT(jsm::concat<a, b, c, d>() == "1234567890");
});
JSM_TEST("find", {
constexpr jsm::string x = "1234:56";
JSM_EXPECT(jsm::find<x, ':'>() == 4);
JSM_EXPECT(jsm::find<x, ":">() == 4);
JSM_EXPECT(jsm::find<x, "56">() == 5);
JSM_EXPECT(jsm::find<x, "345">() == x.npos);
});
JSM_TEST("count", {
constexpr jsm::string x = "1:234:5:67:9";
JSM_EXPECT(jsm::count<x, ':'>() == 4);
});
JSM_TEST("replace", {
constexpr jsm::string x = "123:4:5:6";
JSM_EXPECT(jsm::replace<x, ':', '_'>() == "123_4_5_6");
JSM_EXPECT(jsm::replace<x, ":", "::">() == "123::4::5::6");
JSM_EXPECT(jsm::replace<x, ":", jsm::empty>() == "123456");
});
JSM_TEST("remove", {
constexpr jsm::string x = "123:4:5:6";
JSM_EXPECT(jsm::remove<x, ':'>() == "123456");
JSM_EXPECT(jsm::remove<x, ';'>() == "123:4:5:6");
JSM_EXPECT(jsm::remove<x, ":">() == "123456");
JSM_EXPECT(jsm::remove<x, jsm::empty>() == "123:4:5:6");
});
JSM_TEST("split_once", {
constexpr auto z1 = jsm::split_once<"123:4", ':'>();
JSM_EXPECT(std::tuple_size_v<decltype(z1)> == 2);
JSM_EXPECT(std::get<0>(z1) == "123");
JSM_EXPECT(std::get<1>(z1) == "4");
constexpr auto z2 = jsm::split_once<"123:", ':'>();
JSM_EXPECT(std::tuple_size_v<decltype(z2)> == 2);
JSM_EXPECT(std::get<0>(z2) == "123");
JSM_EXPECT(std::get<1>(z2) == jsm::empty);
constexpr auto z3 = jsm::split_once<":123", ':'>();
JSM_EXPECT(std::tuple_size_v<decltype(z3)> == 2);
JSM_EXPECT(std::get<0>(z3) == jsm::empty);
JSM_EXPECT(std::get<1>(z3) == "123");
constexpr auto z4 = jsm::split_once<"123", ':'>();
JSM_EXPECT(std::tuple_size_v<decltype(z4)> == 1);
JSM_EXPECT(std::get<0>(z4) == "123");
});
JSM_TEST("split", {
constexpr auto z1 = jsm::split<"1:2:3:4", ':'>();
JSM_EXPECT(std::tuple_size_v<decltype(z1)> == 4);
JSM_EXPECT(std::get<0>(z1) == "1");
JSM_EXPECT(std::get<1>(z1) == "2");
JSM_EXPECT(std::get<2>(z1) == "3");
JSM_EXPECT(std::get<3>(z1) == "4");
});
JSM_TEST("reverse", { JSM_EXPECT(jsm::reverse<"123">() == "321"); });
#undef JSM_TEST
#undef JSM_EXPECT