Initial commit
This commit is contained in:
157
scripting/testsuite/benchmark.sp
Normal file
157
scripting/testsuite/benchmark.sp
Normal file
@@ -0,0 +1,157 @@
|
||||
#include <sourcemod>
|
||||
#include <profiler>
|
||||
|
||||
public Plugin:myinfo =
|
||||
{
|
||||
name = "Benchmarks",
|
||||
author = "AlliedModders LLC",
|
||||
description = "Basic benchmarks",
|
||||
version = "1.0.0.0",
|
||||
url = "http://www.sourcemod.net/"
|
||||
};
|
||||
|
||||
#define MATH_INT_LOOPS 2000
|
||||
#define MATH_FLOAT_LOOPS 2000
|
||||
#define STRING_OP_LOOPS 2000
|
||||
#define STRING_FMT_LOOPS 2000
|
||||
#define STRING_ML_LOOPS 2000
|
||||
#define STRING_RPLC_LOOPS 2000
|
||||
|
||||
new Float:g_dict_time
|
||||
new Handle:g_Prof = null
|
||||
|
||||
public OnPluginStart()
|
||||
{
|
||||
RegServerCmd("bench", Benchmark);
|
||||
g_Prof = CreateProfiler();
|
||||
StartProfiling(g_Prof);
|
||||
LoadTranslations("fakedict-sourcemod.cfg");
|
||||
StopProfiling(g_Prof);
|
||||
g_dict_time = GetProfilerTime(g_Prof);
|
||||
}
|
||||
|
||||
public Action:Benchmark(args)
|
||||
{
|
||||
PrintToServer("dictionary time: %f seconds", g_dict_time);
|
||||
StringBench();
|
||||
MathBench();
|
||||
return Plugin_Handled;
|
||||
}
|
||||
|
||||
MathBench()
|
||||
{
|
||||
StartProfiling(g_Prof);
|
||||
new iter = MATH_INT_LOOPS;
|
||||
new a, b, c;
|
||||
while(iter--)
|
||||
{
|
||||
a = iter * 7;
|
||||
b = 5 + iter;
|
||||
c = 6 / (iter + 3);
|
||||
a = 6 * (iter);
|
||||
b = a * 185;
|
||||
a = b / 25;
|
||||
c = b - a + 3;
|
||||
b = b*b;
|
||||
a = (a + c) / (b - c);
|
||||
b = 6;
|
||||
c = 1;
|
||||
b = a * 128 - c;
|
||||
c = b * (a + 16) * b;
|
||||
if (!a)
|
||||
{
|
||||
a = 5;
|
||||
}
|
||||
a = c + (28/a) - c;
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("int benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
|
||||
StartProfiling(g_Prof);
|
||||
new Float:fa, Float:fb, Float:fc
|
||||
new int1
|
||||
iter = MATH_FLOAT_LOOPS;
|
||||
while (iter--)
|
||||
{
|
||||
fa = iter * 0.7;
|
||||
fb = 5.1 + iter;
|
||||
fc = 6.1 / (float(iter) + 2.5);
|
||||
fa = 6.1 * (iter);
|
||||
fb = fa * 185.26;
|
||||
fa = fb / 25.56;
|
||||
fc = fb - a + float(3);
|
||||
fb = fb*fb;
|
||||
fa = (fa + fc) / (fb - fc);
|
||||
fb = 6.2;
|
||||
fc = float(1);
|
||||
int1 = RoundToNearest(fa);
|
||||
fb = fa * float(128) - int1;
|
||||
fc = fb * (a + 16.85) * float(RoundToCeil(fb));
|
||||
if (fa == 0.0)
|
||||
{
|
||||
fa = 5.0;
|
||||
}
|
||||
fa = fc + (float(28)/fa) - RoundToFloor(fc);
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("float benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
}
|
||||
|
||||
#define KEY1 "LVWANBAGVXSXUGB"
|
||||
#define KEY2 "IDYCVNWEOWNND"
|
||||
#define KEY3 "UZWTRNHY"
|
||||
#define KEY4 "EPRHAFCIUOIG"
|
||||
#define KEY5 "RMZCVWIEY"
|
||||
#define KEY6 "ZHPU"
|
||||
|
||||
StringBench()
|
||||
{
|
||||
new i = STRING_FMT_LOOPS;
|
||||
new String:buffer[255];
|
||||
|
||||
StartProfiling(g_Prof);
|
||||
new end
|
||||
while (i--)
|
||||
{
|
||||
end = 0;
|
||||
Format(buffer, sizeof(buffer), "%d", i);
|
||||
Format(buffer, sizeof(buffer), "%d %s %d %f %d %-3.4s %s", i, "gaben", 30, 10.0, 20, "hello", "What a gaben");
|
||||
end = Format(buffer, sizeof(buffer), "Well, that's just %-17.18s!", "what. this isn't a valid string! wait it is");
|
||||
end += Format(buffer[end], sizeof(buffer)-end, "There are %d in this %d", i, end);
|
||||
end += Format(buffer[end], sizeof(buffer)-end, "There are %d in this %d", i, end);
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("format() benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
|
||||
StartProfiling(g_Prof);
|
||||
i = STRING_ML_LOOPS;
|
||||
new String:fmtbuf[2048]; /* don't change to decl, amxmodx doesn't use it */
|
||||
while (i--)
|
||||
{
|
||||
Format(fmtbuf, 2047, "%T %T %d %s %f %T", KEY1, LANG_SERVER, KEY2, LANG_SERVER, 50, "what the", 50.0, KEY3, LANG_SERVER);
|
||||
Format(fmtbuf, 2047, "%s %T %s %T %T", "gaben", KEY4, LANG_SERVER, "what TIME is it", KEY5, LANG_SERVER, KEY6, LANG_SERVER);
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("ml benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
|
||||
StartProfiling(g_Prof);
|
||||
i = STRING_OP_LOOPS;
|
||||
while (i--)
|
||||
{
|
||||
StringToInt(fmtbuf)
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("str benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
|
||||
StartProfiling(g_Prof);
|
||||
i = STRING_RPLC_LOOPS;
|
||||
while (i--)
|
||||
{
|
||||
strcopy(fmtbuf, 2047, "This is a test string for you.");
|
||||
ReplaceString(fmtbuf, sizeof(fmtbuf), " ", "ASDF")
|
||||
ReplaceString(fmtbuf, sizeof(fmtbuf), "SDF", "")
|
||||
ReplaceString(fmtbuf, sizeof(fmtbuf), "string", "gnirts")
|
||||
}
|
||||
StopProfiling(g_Prof);
|
||||
PrintToServer("replace benchmark: %f seconds", GetProfilerTime(g_Prof));
|
||||
}
|
Reference in New Issue
Block a user