mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-28 17:11:29 +00:00
* Start rewrite, add vcpkg * Simple vcpkg manifest, will almost certainly need tweaking * Remove cmake ext we wont be using anymore * Update vcpkg to no longer be from 2022, update cmake lists (wip) * Add finds to the toplevel cmakelists * WIP, luabind and perlbind build. Common only partially builds. * Fix common build. * shared_memory compiles * client files compile * Tests and more cmake version updates * World, had to swap out zlib-ng for now because it wasn't playing nicely along side the zlib install. May revisit. * UCS compiles now too! * queryserv and eqlaunch * loginserver works * Zone works but is messy, tomorrow futher cleanup! * Cleanup main file * remove old zlibng, remove perlwrap, remove hc * More cleanup * vcpkg baseline set for CI * Remove pkg-config, it's the suggested way to use luajit with vcpkg but it causes issues with CI and might be a pain point for windows users * Actually add file * Set perlbind include dir * Perl link got lost * PERL_SET_INTERP causes an issue on newer versions of perl on windows because a symbol is not properly exported in their API, change the lines so it's basically what it used to be * Remove static unix linking, we dont do automated released anymore and this was tightly coupled to that. Can explore this again if we decide to change that. * Remove unused submodules, set cmake policy for boost * Fix some cereal includes * Improve some boilerplate, I'd still like to do better about getting linker stuff set. * Going through and cleaning up the build. * Fix world, separate out data_buckets. * add fixes for other servers * fix zone * Fix client files, loginserver and tests * Newer versions of libmariadb default to tls forced on, return to the default of not forcing that. auto_login were breaking on linux builds loginserver wasn't setting proper openssl compile flag * Move set out of a giant cpp file include. * Convert show * convert find * Add uuid to unix builds * Remove some cpp includes. * Restructure to remove more things. * change db update manifest to header change build yml * Move world CLI include cpps to cmake. * Move zone cli out of source and into cmake * Sidecar stuff wont directly include cpp files now too. * Fix uuid-dev missing on linux runner * Reorg common cmake file * Some cleanup * Fix libsodium support (oops). Fix perl support (more oops) * Change doc --------- Co-authored-by: KimLS <KimLS@peqtgc.com>
116 lines
3.1 KiB
C++
116 lines
3.1 KiB
C++
#include "../world_server_cli.h"
|
|
#include <cereal/archives/json.hpp>
|
|
#include <cereal/types/vector.hpp>
|
|
#include "../../common/events/player_events.h"
|
|
#include "../../common/timer.h"
|
|
|
|
void WorldserverCLI::TestStringBenchmarkCommand(int argc, char **argv, argh::parser &cmd, std::string &description)
|
|
{
|
|
description = "Test command";
|
|
|
|
if (cmd[{"-h", "--help"}]) {
|
|
return;
|
|
}
|
|
|
|
enum Type {
|
|
StringsToInt = 0,
|
|
StringsToBigInt,
|
|
StringsToUnsignedInt,
|
|
StringsToUnsignedBigInt,
|
|
StringsToFloat,
|
|
StringsIsNumber,
|
|
StringsIsFloat,
|
|
StdStoi,
|
|
StdAtoi,
|
|
StdStoll,
|
|
StdAtoll,
|
|
StdStoul,
|
|
StdStoull,
|
|
StdStof,
|
|
};
|
|
|
|
struct Benchmark {
|
|
std::string name;
|
|
Type type;
|
|
};
|
|
|
|
std::vector<Benchmark> benches = {
|
|
Benchmark{.name = "Strings::ToInt", .type = StringsToInt},
|
|
Benchmark{.name = "std::stoi", .type = StdStoi},
|
|
Benchmark{.name = "std::atoi", .type = StdAtoi},
|
|
Benchmark{.name = "Strings::ToBigInt", .type = StringsToBigInt},
|
|
Benchmark{.name = "std::stoll", .type = StdStoll},
|
|
Benchmark{.name = "std::atoll", .type = StdAtoll},
|
|
Benchmark{.name = "Strings::ToUnsignedInt", .type = StringsToUnsignedInt},
|
|
Benchmark{.name = "std::stoul", .type = StdStoul},
|
|
Benchmark{.name = "Strings::ToUnsignedBigInt", .type = StringsToUnsignedBigInt},
|
|
Benchmark{.name = "std::stoull", .type = StdStoull},
|
|
Benchmark{.name = "Strings::ToFloat", .type = StringsToFloat},
|
|
Benchmark{.name = "std::stof", .type = StdStof},
|
|
Benchmark{.name = "Strings::IsNumber", .type = StringsIsNumber},
|
|
Benchmark{.name = "Strings::IsFloat", .type = StringsIsFloat},
|
|
};
|
|
|
|
BenchTimer benchmark;
|
|
|
|
for (auto &b: benches) {
|
|
int iterations = 10000000;
|
|
std::string number = "1111753784";
|
|
std::string float_number = "1111753784.2345623456345";
|
|
int64 convert = 0;
|
|
uint64_t uconvert = 0;
|
|
float fconvert = 0;
|
|
bool check = false;
|
|
|
|
for (int i = 0; i < iterations; i++) {
|
|
switch (b.type) {
|
|
case StringsToInt:
|
|
convert = Strings::ToInt(number, 0);
|
|
break;
|
|
case StdStoi:
|
|
convert = std::stoi(number);
|
|
break;
|
|
case StdAtoi:
|
|
convert = std::atoi(number.c_str());
|
|
break;
|
|
case StringsToBigInt:
|
|
convert = Strings::ToBigInt(number, 0);
|
|
break;
|
|
case StdStoll:
|
|
convert = std::stoll(number);
|
|
break;
|
|
case StdAtoll:
|
|
convert = std::atoll(number.c_str());
|
|
break;
|
|
case StringsToUnsignedInt:
|
|
uconvert = Strings::ToUnsignedInt(number, 0);
|
|
break;
|
|
case StringsToUnsignedBigInt:
|
|
uconvert = Strings::ToUnsignedBigInt(number, 0);
|
|
break;
|
|
case StringsToFloat:
|
|
fconvert = Strings::ToFloat(number, 0);
|
|
break;
|
|
case StringsIsNumber:
|
|
check = Strings::IsNumber(number);
|
|
break;
|
|
case StringsIsFloat:
|
|
check = Strings::IsFloat(float_number);
|
|
break;
|
|
case StdStoul:
|
|
uconvert = std::stoul(number);
|
|
break;
|
|
case StdStoull:
|
|
uconvert = std::stoull(number);
|
|
break;
|
|
case StdStof:
|
|
fconvert = std::stof(number);
|
|
break;
|
|
}
|
|
}
|
|
|
|
LogInfo("{:<30} | [{}] time [{}]", b.name, Strings::Commify(iterations), benchmark.elapsed());
|
|
benchmark.reset();
|
|
}
|
|
}
|