bc764cebe8db4b7acdfe5a49dfa8c9dbaabf3c8d
[sip-router] / mem / memtest.c
1 #ifdef DBG_QM_MALLOC
2
3 #include <stdio.h>
4 #include <string.h>
5 #include <stdlib.h>
6
7
8 #include "../globals.h"
9 #include "../config.h"
10
11 #if 0
12 #ifdef PKG_MALLOC
13 #       ifdef VQ_MALLOC
14 #               include "vq_malloc.h"
15 #               define MY_MALLOC vqm_malloc
16 #               define MY_FREE vqm_free
17 #               define MY_INIT vqm_malloc_init
18 #               define MY_BLOCK vqm_block
19 #               define MY_STATUS vqm_status
20 #       else
21 #               include "q_malloc.h"
22 #               define MY_MALLOC qm_malloc
23 #               define MY_FREE qm_free
24 #               define MY_INIT qm_malloc_init
25 #               define MY_BLOCK qm_block
26 #               define MY_STATUS qm_status
27 #       endif
28 #endif
29
30 void memtest()
31 {
32 #define TEST_SIZE 1024*1024
33 #define TEST_RUN 1024
34 #define LONG_RUN 100000
35 #define ma(s) MY_MALLOC(mem_block, (s),__FILE__, __FUNCTION__, \
36                                                                 __LINE__);
37 #define mf(p)   MY_FREE(mem_block, (p), __FILE__,  __FUNCTION__, \
38                                                                 __LINE__);
39         char tst_mem[TEST_SIZE];
40         struct MY_BLOCK* mem_block;
41         char *p0,*p1,*p2,*p3,*p4,*p5,*p6/*,*p7,*p8,*p9*/;
42         int i, j, f;
43         char *p[TEST_RUN];
44         int t;
45
46         debug=7;
47         log_stderr=1;
48
49         printf("entering test\n");
50
51         mem_block=MY_INIT( tst_mem, TEST_SIZE );
52
53         /* coalesing test w/big fragments */
54         p0=ma(8194);
55         p1=ma(8194);
56         p2=ma(8194);
57         MY_STATUS(mem_block);
58         mf(p1);
59         mf(p0);
60         MY_STATUS(mem_block);
61         mf(p2);
62         MY_STATUS(mem_block);
63
64         /* reuse test w/big fragments */
65         p0=ma(8194);
66         p1=ma(4196);
67         mf(p0);
68         p0=ma(8190);
69         MY_STATUS(mem_block);
70         mf(p1);
71         mf(p0);
72         MY_STATUS(mem_block);
73
74
75         exit(0);
76
77         p0=ma(8);
78         p1=ma(24);
79         p2=ma(32);
80         p3=ma(32);
81         p4=ma(32);
82         p5=ma(1024);
83         p6=ma(2048);
84
85 //      MY_STATUS(mem_block);
86
87 //      *(p0+9)=0;
88         mf(p0);
89         mf(p2);
90         mf(p5);
91         mf(p6);
92         
93 //      MY_STATUS(mem_block);
94
95         mf(p1);
96         mf(p4);
97         mf(p3);
98 //      mf(p3);
99
100 //      MY_STATUS(mem_block);
101
102         for (i=0;i<TEST_RUN;i++)
103                 p[i]=ma( random() & 1023 );
104 //      MY_STATUS(mem_block);
105         for (i=0;i<TEST_RUN;i++)
106                 mf( p[i] );
107 //      MY_STATUS(mem_block);
108
109         f = 0;
110 #define GRANULARITY 100
111         for (j=0; j<LONG_RUN; j++) {
112                 for (i=0;i<TEST_RUN;i++) {
113                         t=random() & 1023;
114                         if (! (t%24) ) t=(t+4096)*2;
115                         p[i]=ma( random() & 1023 );
116                 }
117                 for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++)
118                         mf( p[i] );
119                 for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++) {
120                         t=random() & 1023;
121                         if (! (t%24) ) t=(t+4096)*2;
122                         p[i]=ma( random() & 1023 );
123                 }
124                 for (i=0;i<TEST_RUN;i++)
125                         mf( p[i] );
126                 if ( GRANULARITY*j/LONG_RUN > f ) {
127                         f=GRANULARITY*j/LONG_RUN ;
128                         printf("%d%% done\n", f);
129                 }
130         }
131         printf("now I'm really done\n");
132         MY_STATUS(mem_block);
133         printf("And I'm done with dumping final report too\n");
134         
135         exit(0);
136 }
137 #endif
138
139
140 #endif