76 lines
2.3 KiB
MQL5
76 lines
2.3 KiB
MQL5
|
//+------------------------------------------------------------------+
|
||
|
//| StringBenchmark.mqh |
|
||
|
//| Copyright 2021, MetaQuotes Ltd. |
|
||
|
//| https://www.mql5.com |
|
||
|
//+------------------------------------------------------------------+
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Facultative study: Benchmark |
|
||
|
//| Base class which provides common benchmarking functionalty |
|
||
|
//+------------------------------------------------------------------+
|
||
|
class Benchmark
|
||
|
{
|
||
|
protected:
|
||
|
int i; // loop variable
|
||
|
static Benchmark *array[]; // all test-cases are accumulated here
|
||
|
|
||
|
public:
|
||
|
Benchmark()
|
||
|
{
|
||
|
// store all instances of Benchmark in the static array
|
||
|
const int n = ArraySize(array);
|
||
|
ArrayResize(array, n + 1);
|
||
|
array[n] = &this;
|
||
|
}
|
||
|
|
||
|
virtual void init() = 0; // abstract method to prepare algorithm
|
||
|
virtual void calc() = 0; // abstract method to do main job
|
||
|
virtual void done() = 0; // abstract method to finalize
|
||
|
|
||
|
// main method for testing all created instances
|
||
|
static void runAll(const int n)
|
||
|
{
|
||
|
for(int k = 0; k < ArraySize(array); ++k)
|
||
|
{
|
||
|
array[k].run(n);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// main method of every specific test instance
|
||
|
// it provides the same job scheme for all kinds of tests:
|
||
|
// 'init', 'calc' in the loop, 'done'
|
||
|
void run(const int n)
|
||
|
{
|
||
|
init();
|
||
|
uint time0 = GetTickCount();
|
||
|
for(i = 0; i < n; ++i)
|
||
|
{
|
||
|
calc();
|
||
|
}
|
||
|
Print(GetTickCount() - time0, "ms");
|
||
|
done();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
static Benchmark *Benchmark::array[];
|
||
|
|
||
|
//+------------------------------------------------------------------+
|
||
|
//| Base class for benchmarking of string building |
|
||
|
//+------------------------------------------------------------------+
|
||
|
class StrBase : public Benchmark
|
||
|
{
|
||
|
protected:
|
||
|
string t; // output string, will take result
|
||
|
|
||
|
public:
|
||
|
void init() override
|
||
|
{
|
||
|
t = NULL;
|
||
|
}
|
||
|
|
||
|
void done() override
|
||
|
{
|
||
|
Print("L:", StringLen(t), ", B:", StringBufferLen(t));
|
||
|
}
|
||
|
};
|
||
|
//+------------------------------------------------------------------+
|