GPLization banner introduced to *.[hc] files
[sip-router] / mem / memtest.c
1 /*
2  * $Id$
3  *
4  * Copyright (C) 2001-2003 Fhg Fokus
5  *
6  * This file is part of ser, a free SIP server.
7  *
8  * ser is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version
12  *
13  * For a license to use the ser software under conditions
14  * other than those described here, or to purchase support for this
15  * software, please contact iptel.org by e-mail at the following addresses:
16  *    info@iptel.org
17  *
18  * ser is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License 
24  * along with this program; if not, write to the Free Software 
25  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
26  */
27
28
29 #ifdef DBG_QM_MALLOC
30
31 #include <stdio.h>
32 #include <string.h>
33 #include <stdlib.h>
34
35
36 #include "../globals.h"
37 #include "../config.h"
38
39 #if 0
40 #ifdef PKG_MALLOC
41 #       ifdef VQ_MALLOC
42 #               include "vq_malloc.h"
43 #               define MY_MALLOC vqm_malloc
44 #               define MY_FREE vqm_free
45 #               define MY_INIT vqm_malloc_init
46 #               define MY_BLOCK vqm_block
47 #               define MY_STATUS vqm_status
48 #       else
49 #               include "q_malloc.h"
50 #               define MY_MALLOC qm_malloc
51 #               define MY_FREE qm_free
52 #               define MY_INIT qm_malloc_init
53 #               define MY_BLOCK qm_block
54 #               define MY_STATUS qm_status
55 #       endif
56 #endif
57
58 void memtest()
59 {
60 #define TEST_SIZE 1024*1024
61 #define TEST_RUN 1024
62 #define LONG_RUN 100000
63 #define ma(s) MY_MALLOC(mem_block, (s),__FILE__, __FUNCTION__, \
64                                                                 __LINE__);
65 #define mf(p)   MY_FREE(mem_block, (p), __FILE__,  __FUNCTION__, \
66                                                                 __LINE__);
67         char tst_mem[TEST_SIZE];
68         struct MY_BLOCK* mem_block;
69         char *p0,*p1,*p2,*p3,*p4,*p5,*p6/*,*p7,*p8,*p9*/;
70         int i, j, f;
71         char *p[TEST_RUN];
72         int t;
73
74         debug=7;
75         log_stderr=1;
76
77         printf("entering test\n");
78
79         mem_block=MY_INIT( tst_mem, TEST_SIZE );
80
81         /* coalesing test w/big fragments */
82         p0=ma(8194);
83         p1=ma(8194);
84         p2=ma(8194);
85         MY_STATUS(mem_block);
86         mf(p1);
87         mf(p0);
88         MY_STATUS(mem_block);
89         mf(p2);
90         MY_STATUS(mem_block);
91
92         /* reuse test w/big fragments */
93         p0=ma(8194);
94         p1=ma(4196);
95         mf(p0);
96         p0=ma(8190);
97         MY_STATUS(mem_block);
98         mf(p1);
99         mf(p0);
100         MY_STATUS(mem_block);
101
102
103         exit(0);
104
105         p0=ma(8);
106         p1=ma(24);
107         p2=ma(32);
108         p3=ma(32);
109         p4=ma(32);
110         p5=ma(1024);
111         p6=ma(2048);
112
113 //      MY_STATUS(mem_block);
114
115 //      *(p0+9)=0;
116         mf(p0);
117         mf(p2);
118         mf(p5);
119         mf(p6);
120         
121 //      MY_STATUS(mem_block);
122
123         mf(p1);
124         mf(p4);
125         mf(p3);
126 //      mf(p3);
127
128 //      MY_STATUS(mem_block);
129
130         for (i=0;i<TEST_RUN;i++)
131                 p[i]=ma( random() & 1023 );
132 //      MY_STATUS(mem_block);
133         for (i=0;i<TEST_RUN;i++)
134                 mf( p[i] );
135 //      MY_STATUS(mem_block);
136
137         f = 0;
138 #define GRANULARITY 100
139         for (j=0; j<LONG_RUN; j++) {
140                 for (i=0;i<TEST_RUN;i++) {
141                         t=random() & 1023;
142                         if (! (t%24) ) t=(t+4096)*2;
143                         p[i]=ma( random() & 1023 );
144                 }
145                 for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++)
146                         mf( p[i] );
147                 for (i=TEST_RUN/3;i<2*TEST_RUN/3;i++) {
148                         t=random() & 1023;
149                         if (! (t%24) ) t=(t+4096)*2;
150                         p[i]=ma( random() & 1023 );
151                 }
152                 for (i=0;i<TEST_RUN;i++)
153                         mf( p[i] );
154                 if ( GRANULARITY*j/LONG_RUN > f ) {
155                         f=GRANULARITY*j/LONG_RUN ;
156                         printf("%d%% done\n", f);
157                 }
158         }
159         printf("now I'm really done\n");
160         MY_STATUS(mem_block);
161         printf("And I'm done with dumping final report too\n");
162         
163         exit(0);
164 }
165 #endif
166
167
168 #endif