source: git/omalloc/omTest.c @ 66502b8

spielwiese
Last change on this file since 66502b8 was 66502b8, checked in by Olaf Bachmann <obachman@…>, 24 years ago
This commit was generated by cvs2svn to compensate for changes in r3855, which included commits to RCS files with non-trunk default branches. git-svn-id: file:///usr/local/Singular/svn/trunk@3856 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 3.6 KB
Line 
1#include "omConfig.h"
2#include "omPrivate.h"
3#include "omDebug.h"
4#include "omLocal.h"
5#include "omList.h"
6#include "omTrack.h"
7#include "omFindExec.h"
8
9struct TestAddr_s;
10typedef struct TestAddr_s TestAddr_t;
11typedef TestAddr_t* TestAddr;
12
13struct TestAddr_s
14{
15  TestAddr next;
16  size_t   size;
17};
18
19#define D_LEVEL 10
20TestAddr bin_addr_list = NULL;
21TestAddr block_addr_list = NULL;
22TestAddr chunk_addr_list = NULL;
23
24void TestAllocChunk(size_t size)
25{
26  TestAddr addr = 
27    (TestAddr) omdCheckAllocChunk(size, 0, D_LEVEL, __FILE__, __LINE__);
28  addr->size = size;
29  chunk_addr_list = omInsertInSortedList(chunk_addr_list, size, addr);
30}
31
32void TestFreeChunk(size_t size)
33{
34  TestAddr addr = omFindInSortedList(chunk_addr_list, size, size);
35  if (addr != NULL) 
36    chunk_addr_list = omRemoveFromList(chunk_addr_list, addr);
37  omdCheckFreeChunk(addr, D_LEVEL, __FILE__, __LINE__);
38}
39
40void FreeAllChunk()
41{
42  TestAddr addr;
43  while (chunk_addr_list != NULL)
44  {
45    addr = chunk_addr_list;
46    chunk_addr_list = chunk_addr_list->next;
47    omdCheckFreeChunk(addr, D_LEVEL, __FILE__, __LINE__);
48  }
49}
50
51void TestAllocBlock(size_t size)
52{
53  TestAddr addr = 
54    (TestAddr) omdCheckAllocBlock(size, 0, D_LEVEL, __FILE__, __LINE__);
55  addr->size = size;
56  block_addr_list = omInsertInSortedList(block_addr_list, size, addr);
57}
58
59void TestFreeBlock(size_t size)
60{
61  TestAddr addr = omFindInSortedList(block_addr_list, size, size);
62  if (addr != NULL) 
63    block_addr_list = omRemoveFromList(block_addr_list, addr);
64  omdCheckFreeBlock(addr, addr->size,D_LEVEL, __FILE__, __LINE__);
65}
66
67void FreeAllBlock()
68{
69  TestAddr addr;
70  while (block_addr_list != NULL)
71  {
72    addr = block_addr_list;
73    block_addr_list = block_addr_list->next;
74    omdCheckFreeBlock(addr, addr->size, D_LEVEL, __FILE__, __LINE__);
75  }
76}
77
78void TestAllocBin(size_t size)
79{
80  omBin bin = omGetSpecBin(size<5?5:size);
81  TestAddr addr = 
82    (TestAddr) omdCheckAllocBin(bin, 0, D_LEVEL, __FILE__, __LINE__);
83  addr->size = size;
84  bin_addr_list = omInsertInSortedList(bin_addr_list, size, addr);
85}
86
87void TestFreeBin(size_t size)
88{
89  omBin bin;
90  TestAddr addr = omFindInSortedList(bin_addr_list, size, size);
91  if (addr != NULL) 
92    bin_addr_list = omRemoveFromList(bin_addr_list, addr);
93  bin = omGetSpecBin(addr->size);
94  omdCheckFreeBin(addr, bin, D_LEVEL, __FILE__, __LINE__);
95}
96 
97void FreeAllBin()
98{
99  TestAddr addr;
100  omBin bin;
101  while (bin_addr_list != NULL)
102  {
103    addr = bin_addr_list;
104    bin_addr_list = bin_addr_list->next;
105    bin = omGetSpecBin(addr->size);
106    omdCheckFreeBin(addr, bin, D_LEVEL, __FILE__, __LINE__);
107  }
108}
109
110int count = 0;
111int InitSizeGen(int i)
112{
113  return 0;
114}
115
116int NextSizeGen(int prev)
117{
118  return ++count % 1024;
119}
120
121void PrintTest()
122{
123  omPrintCurrentBackTrace(0, 10, stdout);
124}
125
126int main(int argc, char* argv[])
127{
128  int limit, i, size;
129  omInitTrack(argv[0]);
130 
131  omPrintCurrentBackTrace(0, 10, stdout);
132  PrintTest();
133  return 0;
134 
135  if (argc > 1) 
136    sscanf(argv[1], "%d", &limit);
137  else
138    limit = 200;
139 
140  size = InitSizeGen(limit);
141  i = 0;
142 
143  for (i=0; i<= limit; i++)
144  {
145    size = NextSizeGen(size);
146    TestAllocBin(size);
147    TestAllocBlock(size);
148    TestAllocChunk(size);
149    size = NextSizeGen(size);
150    TestAllocBin(size);
151    TestAllocBlock(size);
152    TestAllocChunk(size);
153    TestFreeBin(size);
154    TestFreeBlock(size);
155    TestFreeChunk(size);
156   
157    if (i % 100 == 0)
158    {
159      printf("i=%d\n",i);
160      omPrintBinStats(stdout);
161    }
162  }
163  omPrintBinStats(stdout);
164  FreeAllBin();
165  omPrintBinStats(stdout);
166  FreeAllBlock();
167  omPrintBinStats(stdout);
168  FreeAllChunk();
169  omPrintBinStats(stdout);
170  return 0;
171}
172
Note: See TracBrowser for help on using the repository browser.