// final/test_extra.cpp
#include <assert.h>
#include <stdlib.h>
#include <time.h>
#include <new>
#include <memory>
#include <iostream>
#include "static_mem_pool.h"
#ifndef LOOPS
#define LOOPS 5000
#endif
#ifndef SEQUENCES
#define SEQUENCES 5000
#endif
#ifndef ITEMS
#define ITEMS 997
#endif
#ifndef BLKSIZE
#define BLKSIZE 100
#endif
using namespace std;
struct A {
char buf[BLKSIZE];
};
struct B {
char buf[BLKSIZE];
DECLARE_STATIC_MEM_POOL(A);
};
struct C {
char buf[BLKSIZE];
DECLARE_STATIC_MEM_POOL_GROUPED__NOTHROW(A, 0);
};
A* a[ITEMS];
B* b[ITEMS];
C* c[ITEMS];
int r[SEQUENCES];
template <typename T>
void test(T* p[])
{
clock_t t;
int i, j, k;
t = clock();
for (i = 0; i < LOOPS; ++i) {
for (j = 0; j < SEQUENCES; ++j) {
k = r[j];
if (p[k] == NULL) {
p[k] = new T;
} else {
delete p[k];
p[k] = NULL;
}
}
}
cout << (clock() - t) * 1.0 / CLOCKS_PER_SEC << endl;
}
int main()
{
cout << "Generating random numbers... "
<< flush;
for (int i = 0; i < SEQUENCES; ++i) {
r[i] = rand() % ITEMS;
}
cout << "Done" << endl;
cout << "Testing (de)allocation with system routines... "
<< flush;
test(a);
cout << "Testing (de)allocation with default static_mem_pool... "
<< flush;
test(b);
cout << "Testing (de)allocation with initialized static_mem_pool... "
<< flush;
PREPARE_MEMORY_POOL_GROUPED(C, 0);
test(c);
return 0;
}