convert line ends
[canaan.git] / prj / cam / src / portal / memtest.c
blob4578422ed63b8808c1f5facfd118b0b0cbc69e81
1 /*
2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
4 */
6 #include <stdlib.h>
7 #include <stdio.h>
8 #include <mem.h>
10 #include <lg.h>
11 #include <pt_mem.h>
12 #include <memall.h>
13 #include <dbmem.h> // must be last header!
15 #define MAX_RECT 1024
17 struct info
19 uchar *pt;
20 int wid, ht;
21 uchar data;
22 } rect[MAX_RECT];
24 int num_added, num_deleted;
26 int sizes[] = { 1,2,4,8, 16,32,64,128, 256 };
28 void delete(int x)
30 int i,j;
31 ++num_deleted;
33 for(j=0; j < rect[x].ht; ++j)
34 for (i=0; i < rect[x].wid; ++i)
35 if (rect[x].pt[j*256+i] != rect[x].data) goto ouch;
36 portal_free_mem_rect(rect[x].pt, rect[x].wid, rect[x].ht);
37 rect[x].pt = 0;
38 return;
40 ouch:
41 Error(1, "Bad data!\n");
44 void add(int x)
46 int i ,sz, y;
48 ++num_added;
49 sz = rand() % 8;
50 y = rand() >> 3;
52 rect[x].wid = sizes[sz + !!(y & 1)];
53 rect[x].ht = sizes[sz + !!(y & 2)];
54 rect[x].data = rand();
55 rect[x].pt = portal_allocate_mem_rect(rect[x].wid, rect[x].ht);
56 for (i=0; i < rect[x].ht; ++i)
57 memset(rect[x].pt + i*256, rect[x].data, rect[x].wid);
60 void process_rect(int x)
62 if (rect[x].pt) delete(x); else add(x);
65 extern int max_strips;
67 int main(int argc, char **argv)
69 int n, i;
70 MemCheckOn(TRUE);
72 n = argc > 1 ? atoi(argv[1]) : 4096;
74 while(n--)
75 process_rect((unsigned int) rand() % MAX_RECT);
77 for (i=0; i < MAX_RECT; ++i)
78 if (rect[i].pt)
79 delete(i);
81 printf("Successfully inserted %d and deleted %d\n", num_added, num_deleted);
82 printf("%d strips\n", max_strips);
83 return 0;