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