@@ -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