forked from souffle-lang/souffle
-
Notifications
You must be signed in to change notification settings - Fork 0
/
profile_util_test.cpp
140 lines (114 loc) · 4.92 KB
/
profile_util_test.cpp
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
* Souffle - A Datalog Compiler
* Copyright (c) 2019, The Souffle Developers. All rights reserved.
* Licensed under the Universal Permissive License v 1.0 as shown at:
* - https://opensource.org/licenses/UPL
* - <souffle root>/licenses/SOUFFLE-UPL.txt
*/
/************************************************************************
*
* @file profile_util_test.cpp
*
* Test cases for the profile utilities.
*
***********************************************************************/
#include "tests/test.h"
#include "souffle/profile/CellInterface.h"
#include "souffle/profile/StringUtils.h"
#include <chrono>
#include <cmath>
#include <iosfwd>
#include <string>
#include <vector>
using namespace souffle;
using namespace souffle::profile;
TEST(StringUtil, formatNum) {
EXPECT_EQ("0", Tools::formatNum(0));
EXPECT_EQ("12", Tools::formatNum(12.0));
EXPECT_EQ("12.45", Tools::formatNum(12.45));
EXPECT_EQ("12", Tools::formatNum(1, 12));
EXPECT_EQ("12", Tools::formatNum(2, 12));
EXPECT_EQ("123", Tools::formatNum(2, 123));
EXPECT_EQ("1.23K", Tools::formatNum(3, 1234));
EXPECT_EQ("1.2K", Tools::formatNum(2, 1200));
EXPECT_EQ("12K", Tools::formatNum(2, 12345));
EXPECT_EQ("100K", Tools::formatNum(1, 123456));
EXPECT_EQ("120K", Tools::formatNum(2, 123456));
EXPECT_EQ("123K", Tools::formatNum(3, 123456));
EXPECT_EQ("1.2B", Tools::formatNum(2, 1234560000));
EXPECT_EQ("1.23B", Tools::formatNum(3, 1234560000));
EXPECT_EQ("1.234B", Tools::formatNum(4, 1234560000));
EXPECT_EQ("1.2t", Tools::formatNum(2, 1234560000000));
EXPECT_EQ("1.23q", Tools::formatNum(3, 1234560000000000));
}
TEST(StringUtil, formatMemory) {
EXPECT_EQ("0kB", Tools::formatMemory(0));
EXPECT_EQ("1kB", Tools::formatMemory(1));
EXPECT_EQ("1000kB", Tools::formatMemory(1000));
EXPECT_EQ("1900kB", Tools::formatMemory(1900));
EXPECT_EQ("2MB", Tools::formatMemory(2 * 1024));
EXPECT_EQ("1000MB", Tools::formatMemory(1000 * 1024));
EXPECT_EQ("1900MB", Tools::formatMemory(1900 * 1024));
EXPECT_EQ("2GB", Tools::formatMemory(2 * 1024 * 1024));
EXPECT_EQ("1000GB", Tools::formatMemory(1000 * 1024 * 1024));
EXPECT_EQ("1900GB", Tools::formatMemory(1900 * 1024 * 1024));
EXPECT_EQ("2TB", Tools::formatMemory(2UL * 1024UL * 1024UL * 1024UL));
EXPECT_EQ("1000TB", Tools::formatMemory(1000ULL * 1024ULL * 1024ULL * 1024ULL));
EXPECT_EQ("1900TB", Tools::formatMemory(1900ULL * 1024ULL * 1024ULL * 1024ULL));
}
TEST(StringUtil, formatTime) {
std::chrono::microseconds time{0};
EXPECT_EQ(".000s", Tools::formatTime(time));
time = std::chrono::microseconds(1);
EXPECT_EQ(".000s", Tools::formatTime(time));
time = std::chrono::microseconds(1000);
EXPECT_EQ(".001s", Tools::formatTime(time));
time = std::chrono::microseconds(12340);
EXPECT_EQ(".012s", Tools::formatTime(time));
time = std::chrono::microseconds(123400);
EXPECT_EQ(".123s", Tools::formatTime(time));
time = std::chrono::microseconds(1234000);
EXPECT_EQ("1.23s", Tools::formatTime(time));
time = std::chrono::microseconds(12340000);
EXPECT_EQ("12s", Tools::formatTime(time));
time = std::chrono::microseconds(123400000);
EXPECT_EQ("2.5m", Tools::formatTime(time));
time = std::chrono::hours(25);
EXPECT_EQ("25h", Tools::formatTime(time));
time = std::chrono::hours(25 * 24);
EXPECT_EQ("25D", Tools::formatTime(time));
}
TEST(StringUtil, split) {
std::vector<std::string> expected{"a", "b", "c"};
EXPECT_EQ(expected, Tools::split("a b c", " "));
EXPECT_EQ(expected, Tools::split("a,b,c", ","));
EXPECT_EQ(expected, Tools::split("aTESTbTESTc", "TEST"));
expected = {"", "a", "b", "c", ""};
EXPECT_EQ(expected, Tools::split(" a b c ", " "));
EXPECT_EQ(expected, Tools::split("TESTTESTaTESTbTESTcTESTTEST", "TEST"));
expected = {"a", "b", "", "c"};
EXPECT_EQ(expected, Tools::split(" a b c ", " "));
EXPECT_EQ(expected, Tools::split("TESTaTESTbTESTTESTcTEST", "TEST"));
}
TEST(StringUtil, trimWhitespace) {
EXPECT_EQ("a b c", Tools::trimWhitespace("\t \t a b c"));
EXPECT_EQ("a b c", Tools::trimWhitespace("\t \t a b c\t\t\t"));
EXPECT_EQ("a b c", Tools::trimWhitespace("\t \t a b c\t \t\t "));
EXPECT_EQ("a b c", Tools::trimWhitespace("\t \t a b c "));
EXPECT_EQ("a b c", Tools::trimWhitespace(" a b c "));
}
TEST(StringUtil, cleanString) {
EXPECT_EQ(" a b c", Tools::cleanString("\t\n\ta\nb\\nc"));
EXPECT_EQ(" a b c", Tools::cleanString("\"\t\n\ta\nb\\nc\""));
}
TEST(StringUtil, cleanJsonOutString) {
EXPECT_EQ("ab", Tools::cleanJsonOut("ab"));
EXPECT_EQ("abc", Tools::cleanJsonOut("abc"));
EXPECT_EQ("ab", Tools::cleanJsonOut("\"ab\""));
EXPECT_EQ("\\\\", Tools::cleanJsonOut("\\"));
EXPECT_EQ("\\\"", Tools::cleanJsonOut("\""));
}
TEST(StringUtil, cleanJsonOutDouble) {
EXPECT_EQ("NaN", Tools::cleanJsonOut(NAN));
EXPECT_EQ("1.234567e+02", Tools::cleanJsonOut(123.4567));
}