Skip to content

Commit a2f6c51

Browse files
author
Chedy Najjar
committed
check for valid arguments.
handle file case. refactor the directory handling into a separate function.
1 parent 286dadc commit a2f6c51

1 file changed

Lines changed: 70 additions & 24 deletions

File tree

benchmarks/auto_memory_bench.cc

Lines changed: 70 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -55,33 +55,11 @@ void dump_stats_to(const std::vector<std::string> &stats, const char* file_name)
5555
out.close();
5656
}
5757

58-
int main(int argc, char *argv[]) {
59-
std::vector<std::pair<const char *, FN_TYPE>> strategies;
60-
strategies.reserve(16);
61-
62-
strategies.emplace_back("simdjsonMBWRParse", simdjsonMBWRParse);
63-
strategies.emplace_back("simdjsonMBRParse", simdjsonMBRParse);
64-
strategies.emplace_back("simdjsonPStrParse", simdjsonPStrParse);
65-
66-
strategies.emplace_back("rapidjsonParseInsitu", rapidjsonParseInsitu);
67-
strategies.emplace_back("rapidjsonParse", rapidjsonParse);
68-
69-
strategies.emplace_back("sajsonParseDynAlloc", sajsonParseDynAlloc);
70-
strategies.emplace_back("sajsonParseSngAlloc", sajsonParseSngAlloc);
71-
strategies.emplace_back("sajsonParseDynAllocMutBuff", sajsonParseDynAllocMutBuff);
72-
strategies.emplace_back("sajsonParseSngAllocMutBuff", sajsonParseSngAllocMutBuff);
73-
74-
strategies.emplace_back("nlohmannParse", nlohmannParse);
75-
76-
//TODOs:
77-
// validate arguments
78-
// set default path if none is provided
79-
// handle file argument (not only dirs)
80-
58+
int bench_dir_case(const std::vector<std::pair<const char *, FN_TYPE>> &strategies, const std::string &dir){
8159
std::vector<std::string> memstats;
8260
memstats.reserve(16);
8361

84-
for(const auto& entry : fs::directory_iterator(argv[1])) {
62+
for(const auto& entry : fs::directory_iterator(dir)) {
8563
auto size = fs::file_size(entry.path());
8664
if(entry.path().extension() == std::string{".json"}){
8765
for(const auto& elm : strategies){
@@ -104,6 +82,74 @@ int main(int argc, char *argv[]) {
10482
}
10583

10684
dump_stats_to(memstats, "memstat.json");
85+
return 0;
86+
}
87+
88+
int bench_file_case(const std::vector<std::pair<const char *, FN_TYPE>> &strategies, const std::string &file){
89+
auto fl = fs::path{file};
90+
auto size = fs::file_size(fl);
91+
92+
std::vector<std::string> memstats;
93+
memstats.reserve(16);
94+
95+
if (fl.extension() == std::string{".json"}){
96+
for (const auto &elm : strategies){
97+
Memory::Instance().Reset();
98+
elm.second(fl.c_str());
99+
auto stat = PrintMemoryStat();
100+
auto json = memstat_to_json(
101+
stat,
102+
file,
103+
size,
104+
elm.first
105+
);
106+
puts(elm.first);
107+
puts(fl.c_str());
108+
puts("\n");
109+
memstats.push_back(json);
110+
}
111+
dump_stats_to(memstats, "memstat.json");
112+
return 0;
113+
}
114+
puts("file name is required to end with .json");
115+
return -1;
116+
}
117+
118+
int main(int argc, char *argv[]) {
119+
if(argv[1] == nullptr){
120+
puts("no path have been provided.");
121+
return -1;
122+
}
123+
std::string dir_or_file{argv[1]};
124+
125+
std::vector<std::pair<const char *, FN_TYPE>> strategies;
126+
strategies.reserve(16);
127+
128+
strategies.emplace_back("simdjsonMBWRParse", simdjsonMBWRParse);
129+
strategies.emplace_back("simdjsonMBRParse", simdjsonMBRParse);
130+
strategies.emplace_back("simdjsonPStrParse", simdjsonPStrParse);
131+
132+
strategies.emplace_back("rapidjsonParseInsitu", rapidjsonParseInsitu);
133+
strategies.emplace_back("rapidjsonParse", rapidjsonParse);
134+
135+
strategies.emplace_back("sajsonParseDynAlloc", sajsonParseDynAlloc);
136+
strategies.emplace_back("sajsonParseSngAlloc", sajsonParseSngAlloc);
137+
strategies.emplace_back("sajsonParseDynAllocMutBuff", sajsonParseDynAllocMutBuff);
138+
strategies.emplace_back("sajsonParseSngAllocMutBuff", sajsonParseSngAllocMutBuff);
139+
140+
strategies.emplace_back("nlohmannParse", nlohmannParse);
141+
142+
fs::path arg{argv[1]} ;
143+
if(fs::is_directory(arg))
144+
return bench_dir_case(strategies, dir_or_file);
145+
if(fs::is_regular_file(arg))
146+
return bench_file_case(strategies, dir_or_file);
147+
puts("invalid argument");
148+
return -1;
149+
150+
//TODOs:
151+
// set default path if none is provided
152+
107153

108154
return 0;
109155
}

0 commit comments

Comments
 (0)