251cced1f8
Various minor things done to project files Updated sample extension project file and updated makefile to the new unified version (more changes likely on the way) Updated regex project file and makefile --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401971
158 lines
3.9 KiB
SourcePawn
158 lines
3.9 KiB
SourcePawn
#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 = INVALID_HANDLE
|
|
|
|
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));
|
|
}
|