ultimatepp/benchmarks/InVectorCache/InVectorCache.cpp
cxl 42d81a9dec .benchmarks: InVectorCache
git-svn-id: svn://ultimatepp.org/upp/trunk@5854 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2013-02-23 20:19:14 +00:00

83 lines
1.6 KiB
C++

#include <Core/Core.h>
using namespace Upp;
CONSOLE_APP_MAIN
{
int N = 10;
InVector<int> x;
for(int i = 0; i < 1000000; i++)
x.Add(Random(1000));
{
RTIMING("Simple scan");
int m = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < x.GetCount(); i++)
m += x[i];
for(int i = x.GetCount(); --i >= 0;)
m += x[i];
}
RDUMP(m);
}
{
RTIMING("Simple scan, more complex OP");
int m = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < x.GetCount(); i++)
if(x[i] > 500)
m += x[i];
for(int i = x.GetCount(); --i >= 0;)
if(x[i] > 500)
m += x[i];
}
RDUMP(m);
}
{
RTIMING("Iterator scan");
int m = 0;
for(int j = 0; j < N; j++) {
InVector<int>::Iterator e = x.End();
InVector<int>::Iterator i = x.Begin();
while(i != e)
m += *i++;
e = x.Begin();
i = x.End();
while(i != e)
m += *--i;
}
RDUMP(m);
}
{
RTIMING("Single InVector, problematic scan");
int m = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < x.GetCount(); i++)
m += x[i] + x[x.GetCount() - i - 1];
}
RDUMP(m);
}
{
InVector<int> y;
y <<= x;
RTIMING("Two InVectors");
int m = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < x.GetCount(); i++)
m += x[i] + y[i];
}
RDUMP(m);
}
{
InVector<int> y;
y <<= x;
RTIMING("Two InVectors, two simple scans");
int m = 0;
for(int j = 0; j < N; j++) {
for(int i = 0; i < x.GetCount(); i++)
m += x[i];
for(int i = y.GetCount(); --i >= 0;)
m += y[i];
}
RDUMP(m);
}
}