sourcemod/plugins/testsuite/benchmark.sp
Scott Ehlert 251cced1f8 Spring Cleaning, Part Ichi (1)
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
2008-03-30 07:00:22 +00:00

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));
}