OSDN Git Service

(LibGoblin)
[drdeamon64/drdeamon64.git] / libgoblin / test_libgoblin_objinfo.c
1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
2
3                          D r . D e a m o n  6 4
4                         for INTEL64(R), AMD64(R)
5         
6    Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
10
11  1. Redistributions of source code must retain the above copyright notice,
12     this list of conditions and the following disclaimer.
13  2. Redistributions in binary form must reproduce the above copyright
14     notice, this list of conditions and the following disclaimer in the
15     documentation and/or other materials provided with the distribution.
16
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
28
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
30
31 /* File Info -----------------------------------------------------------
32 File: drd64_.c
33 Function: 
34 Comment: 
35 ----------------------------------------------------------------------*/
36
37 #define DRD64_SRC_TEST_LIBGOBLIN_OBJINFO
38 #include"drd64_libgoblin.h"
39 #include"test_libgoblin.h"
40
41 #define _NO_CHK -2
42
43 /*--------------------------------------------------------------------*/
44 void Test_ObjectInfo_CUAssert_GrpLink(
45                 LibGoblin_ObjectInfo    *p_obj,
46                 int     i_id,
47                 int     i_parent_id,
48                 int     i_child_topid,
49                 int     i_prev_id,
50                 int     i_next_id )
51 {
52         CU_ASSERT( NULL != p_obj );
53         
54         if( NULL != p_obj )     {
55                 if( _NO_CHK != i_id )
56                         { CU_ASSERT( i_id == p_obj->i_id ); }
57
58                 if( _NO_CHK != i_parent_id )
59                         { CU_ASSERT( i_parent_id == p_obj->grplink.i_parent_id ); }
60                 if( _NO_CHK != i_child_topid )
61                         { CU_ASSERT( i_child_topid == p_obj->grplink.i_child_topid ); }
62                 if( _NO_CHK != i_prev_id )
63                         { CU_ASSERT( i_prev_id == p_obj->grplink.i_prev_id ); }
64                 if( _NO_CHK != i_next_id )
65                         { CU_ASSERT( i_next_id == p_obj->grplink.i_next_id ); }
66         }
67
68         return;
69 }
70
71
72 /* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
73 /*--------------------------------------------------------------------*/
74 void Test_ObjectInfo_InsetDelete_test00_001(
75                 LibGoblin_ProgramInfo   *p_pginfo )
76 {
77         LibGoblin_ObjectInfo    *p_objinfo;
78         LibGoblin_ObjectInfo    *p_objmaster;
79
80         // Alloc ---
81         p_objinfo       = ObjectInfo_InsetObject( p_pginfo, 0x00000000, 0x00100000, NULL,
82                                                 0x00, OBJINFO_TYPE_NONE, NULL );
83         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
84         CU_ASSERT( 0 == p_pginfo->objinfo.i_topid );
85
86         // Check ---
87         p_objmaster     = OBJINFO( p_pginfo, 0 );
88         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
89
90         // Delete ---
91         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
92         CU_ASSERT( 0 == p_pginfo->objinfo.i_topid );
93         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, NO_OBJ, NO_OBJ, NO_OBJ );
94
95         p_objinfo       = OBJINFO( p_pginfo, 0 );
96         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
97         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
98
99         return;
100 }
101
102 /*--------------------------------------------------------------------*/
103 void Test_ObjectInfo_InsetDelete_test00_002(
104                 LibGoblin_ProgramInfo   *p_pginfo )
105 {
106         int                                             i_cnt;
107         QWord                                   qw_addr;
108         QWord                                   qw_size;
109         LibGoblin_ObjectInfo    *p_objinfo;
110         LibGoblin_ObjectInfo    *p_objmaster;
111
112         // Scenery 1 ......................................................
113         // Alloc ---
114         qw_addr = 0x0000000000000000;
115         p_objinfo       = ObjectInfo_InsetObject(
116                                                 p_pginfo, qw_addr, 0x10000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
117         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
118
119         qw_addr += 0x00100000;
120
121         for( i_cnt = 2; i_cnt < 10000; i_cnt++ )        {
122                 p_objinfo       = ObjectInfo_InsetObject(
123                                                 p_pginfo, qw_addr, 0x10000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
124                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, 0, NO_OBJ, i_cnt - 1, NO_OBJ );
125
126                 qw_addr += 0x00000100;
127         }
128
129         // Check ---
130         p_objmaster     = OBJINFO( p_pginfo, 0 );
131         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
132
133         // Delete ---
134         for( i_cnt = 1; i_cnt < 9999; i_cnt++ ) {
135                 p_objinfo       = OBJINFO( p_pginfo, i_cnt );
136                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, 0, NO_OBJ, NO_OBJ, (i_cnt + 1) );
137
138                 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
139                 CU_ASSERT( (i_cnt + 1) == p_objmaster->grplink.i_child_topid );
140         }
141
142         p_objinfo       = OBJINFO( p_pginfo, i_cnt );
143         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, 0, NO_OBJ, NO_OBJ, NO_OBJ );
144
145         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
146         CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
147         CU_ASSERT( NO_OBJ == p_objmaster->addrlink.i_next_id );
148
149         // Scenery 2 ......................................................
150         // Alloc ---
151         qw_size         = 0x0000000000000001;
152         p_objinfo       = ObjectInfo_InsetObject(
153                                                 p_pginfo, 0x1000000000000000, qw_size, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
154         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, NO_OBJ );
155
156         for( i_cnt = 2; i_cnt < 10; i_cnt++ )   {
157                 qw_size         <<= 1;
158                 p_objinfo       = ObjectInfo_InsetObject(
159                                                 p_pginfo,  0x1000000000000000, qw_size, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
160                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, (10000 - i_cnt), 0, NO_OBJ, NO_OBJ, (10001 - i_cnt) );
161         }
162
163         // Check ---
164         p_objmaster     = OBJINFO( p_pginfo, 0 );
165         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 9991, NO_OBJ, NO_OBJ );
166
167         // Delete ---
168         //for( i_cnt = 9; i_cnt > 1; i_cnt-- )  {
169         for( i_cnt = 9991; i_cnt < 9999; i_cnt++ )      {
170                 p_objinfo       = OBJINFO( p_pginfo, i_cnt );
171                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, 0, NO_OBJ, NO_OBJ, (i_cnt + 1) );
172
173                 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
174                 CU_ASSERT( (i_cnt + 1) == p_objmaster->grplink.i_child_topid );
175         }
176
177         p_objinfo       = OBJINFO( p_pginfo, 9999 );
178         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, NO_OBJ );
179
180         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
181         CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
182
183         // Scenery 3 ......................................................
184         // Alloc ---
185         qw_addr = 0x10000000;
186         p_objinfo       = ObjectInfo_InsetObject(
187                                                 p_pginfo, qw_addr, 0x20000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
188         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, NO_OBJ );
189
190         for( i_cnt = 2; i_cnt < 10; i_cnt++ )   {
191                 qw_addr += 0x10000000;
192                 p_objinfo       = ObjectInfo_InsetObject(
193                                                 p_pginfo, qw_addr, 0x20000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
194                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, (10000 - i_cnt), 0, NO_OBJ, (10001 - i_cnt), NO_OBJ );
195         }
196
197         // Check ---
198         p_objmaster     = OBJINFO( p_pginfo, 0 );
199         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 9999, NO_OBJ, NO_OBJ );
200
201         // Delete ---
202         //for( i_cnt = 0; i_cnt < 7; i_cnt++ )  {
203         for( i_cnt = 2; i_cnt < 9; i_cnt++ )    {
204                 p_objinfo       = OBJINFO( p_pginfo, (10000 - i_cnt) );
205                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, (10000 - i_cnt), 0, NO_OBJ, 9999, (9999 - i_cnt) );
206
207                 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
208                 CU_ASSERT( 9999 == p_objmaster->grplink.i_child_topid );
209         }
210
211         p_objinfo       = OBJINFO( p_pginfo, 9999 );
212         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, 9991 );
213
214         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
215         CU_ASSERT( 9991 == p_objmaster->grplink.i_child_topid );
216
217         p_objinfo       = OBJINFO( p_pginfo, 9991 );
218         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9991, 0, NO_OBJ, NO_OBJ, NO_OBJ );
219
220         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
221         CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
222
223         // Delete MasterObject 
224         p_objinfo       = OBJINFO( p_pginfo, 0 );
225         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
226         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
227
228         return;
229 }
230
231 /*--------------------------------------------------------------------*/
232 void Test_ObjectInfo_InsetDelete_test00_003(
233                 LibGoblin_ProgramInfo   *p_pginfo )
234 {
235         int                                             i_cnt;
236         QWord                                   qw_addr;
237         QWord                                   qw_size;
238         LibGoblin_ObjectInfo    *p_objinfo;
239         LibGoblin_ObjectInfo    *p_objparent;
240         LibGoblin_ObjectInfo    *p_objmaster;
241
242         // Scenery 1 .......................................................
243         // Alloc ---
244         qw_addr = 0x10000000;
245         qw_size = 0x10000000;
246         p_objinfo       = ObjectInfo_InsetObject(
247                                                         p_pginfo, qw_addr, qw_size, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
248         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
249
250         for( i_cnt = 2; i_cnt < 6; i_cnt++ )    {
251                 qw_addr += 0x00010000;
252                 qw_size >>= 1;
253                 p_objparent     = p_objinfo;
254                 p_objinfo       = ObjectInfo_InsetObject(
255                                                         p_pginfo, qw_addr, qw_size, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
256                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, p_objparent->i_id, NO_OBJ, NO_OBJ, NO_OBJ );
257                 Test_ObjectInfo_CUAssert_GrpLink( p_objparent, (i_cnt - 1), (i_cnt - 2), i_cnt, NO_OBJ, NO_OBJ );
258         }
259
260         for( ; i_cnt < 10; i_cnt++ )    {
261                 qw_addr += 0x00010000;
262                 qw_size >>= 1;
263                 p_objparent     = p_objinfo;
264                 p_objinfo       = ObjectInfo_InsetObject(
265                                                         p_pginfo, qw_addr, qw_size, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
266                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, p_objparent->i_id, NO_OBJ, NO_OBJ, NO_OBJ );
267                 Test_ObjectInfo_CUAssert_GrpLink( p_objparent, (i_cnt - 1), (i_cnt - 2), i_cnt, NO_OBJ, NO_OBJ );
268         }
269
270         // Check ---
271         p_objmaster     = OBJINFO( p_pginfo, 0 );
272         Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
273
274         // Delete ---
275         for( i_cnt = 9; i_cnt > 5; i_cnt-- )    {
276                 p_objinfo       = OBJINFO( p_pginfo, i_cnt );
277                 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, (i_cnt - 1), NO_OBJ, NO_OBJ, NO_OBJ );
278
279                 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
280         }
281
282         p_objinfo       = OBJINFO( p_pginfo, 1 );
283         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, 2, NO_OBJ, NO_OBJ );
284
285         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
286         CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
287         CU_ASSERT( NO_OBJ == p_objmaster->addrlink.i_next_id );
288
289         // Delete MasterObject 
290         p_objinfo       = OBJINFO( p_pginfo, 0 );
291         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
292         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
293
294         return;
295 }
296
297 /*--------------------------------------------------------------------*/
298 void Test_ObjectInfo_InsetDelete_test00_004_Alloc(
299                 LibGoblin_ProgramInfo   *p_pginfo )
300 {
301         LibGoblin_ObjectInfo    *p_objinfo;
302         LibGoblin_ObjectInfo    *p_objparent;
303
304         //   ID01: 00000000h-40000000h
305         //     ID04: 20000000h-30000000h
306         //       ID10: 21000000h-25000000h
307         //       ID11: 25000000h-29000000h
308         //     ID05: 30000000h-40000000h
309         //       ID12: 38000000h-40000000h
310         //       ID13: 40000000h-44000000h
311         //     ID08: 70000000h-80000000h
312         //   ID06: 38000000h-58000000h
313         //     ID14: 80000000h-88000000h
314         //     ID15: 84000000h-8c000000h
315         //   ID03: 40000000h-80000000h
316         //     ID07: 60000000h-70000000h
317         //   ID02: 80000000h-c0000000h
318         //   ID09: 80000000h-a0000000h
319
320         // Scenery 1 ......................................................
321         // Alloc ---
322         //   ID01: 00000000h-40000000h
323         p_objinfo       = ObjectInfo_InsetObject(
324                                                 p_pginfo, 0x00000000, 0x40000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
325         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
326
327         //   ID02: 80000000h-c0000000h
328         p_objinfo       = ObjectInfo_InsetObject(
329                                                 p_pginfo, 0x80000000, 0x40000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
330         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 0, NO_OBJ, 1, NO_OBJ );
331
332         //   ID03: 40000000h-80000000h
333         p_objinfo       = ObjectInfo_InsetObject(
334                                                 p_pginfo, 0x40000000, 0x40000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
335         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 0, NO_OBJ, 1, 2 );
336
337         //   ID04: 20000000h-30000000h
338         p_objparent     = OBJINFO( p_pginfo, 1 );
339         Test_ObjectInfo_CUAssert_GrpLink( p_objparent, 1, 0, NO_OBJ, NO_OBJ, 3 );
340
341         p_objinfo       = ObjectInfo_InsetObject(
342                                                 p_pginfo, 0x20000000, 0x10000000, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
343         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 1, NO_OBJ, NO_OBJ, NO_OBJ );
344         CU_ASSERT( 4 == p_objparent->grplink.i_child_topid );
345
346         //   ID05: 30000000h-40000000h
347         p_objinfo       = ObjectInfo_InsetObject(
348                                                 p_pginfo, 0x30000000, 0x10000000, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
349         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 1, NO_OBJ, 4, NO_OBJ );
350
351         //   ID06: 38000000h-58000000h
352         p_objinfo       = ObjectInfo_InsetObject(
353                                                 p_pginfo, 0x38000000, 0x20000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
354         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 0, NO_OBJ, 1, 3 );
355
356         //   ID07: 60000000h-70000000h
357         p_objinfo       = ObjectInfo_InsetObject(
358                                                 p_pginfo, 0x60000000, 0x10000000, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
359         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 3, NO_OBJ, NO_OBJ, NO_OBJ );
360
361         //   ID08: 70000000h-80000000h
362         p_objinfo       = ObjectInfo_InsetObject(
363                                                 p_pginfo, 0x70000000, 0x10000000, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
364         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 1, NO_OBJ, 5, NO_OBJ );
365
366         //   ID09: 80000000h-a0000000h
367         p_objinfo       = ObjectInfo_InsetObject(
368                                                 p_pginfo, 0x80000000, 0x20000000, NULL, 0x00, OBJINFO_TYPE_NONE, NULL );
369         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 0, NO_OBJ, 2, NO_OBJ );
370
371         //   ID10: 21000000h-25000000h
372         p_objinfo       = ObjectInfo_InsetObject(
373                                                 p_pginfo, 0x21000000, 0x04000000, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
374         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 4, NO_OBJ, NO_OBJ, NO_OBJ );
375
376         //   ID11: 25000000h-29000000h
377         p_objinfo       = ObjectInfo_InsetObject(
378                                                 p_pginfo, 0x25000000, 0x04000000, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
379         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 4, NO_OBJ, 10, NO_OBJ );
380
381         //   ID12: 38000000h-40000000h
382         p_objinfo       = ObjectInfo_InsetObject(
383                                                 p_pginfo, 0x38000000, 0x08000000, NULL, 0x01, OBJINFO_TYPE_NONE, NULL );
384         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 12, 5, NO_OBJ, NO_OBJ, NO_OBJ );
385
386         //   ID13: 40000000h-44000000h
387         p_objparent     = OBJINFO( p_pginfo, 5 );
388         Test_ObjectInfo_CUAssert_GrpLink( p_objparent, 5, 1, 12, 4, 8 );
389
390         p_objinfo       = ObjectInfo_InsetObject(
391                                                 p_pginfo, 0x40000000, 0x04000000, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
392         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 13, 5, NO_OBJ, 12, NO_OBJ );
393
394         //   ID14: 80000000h-88000000h
395         p_objparent     = OBJINFO( p_pginfo, 6 );
396         Test_ObjectInfo_CUAssert_GrpLink( p_objparent, 6, 0, NO_OBJ, 1, 3 );
397
398         p_objinfo       = ObjectInfo_InsetObject(
399                                                 p_pginfo, 0x80000000, 0x08000000, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
400         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 14, 6, NO_OBJ, NO_OBJ, NO_OBJ );
401
402         //   ID15: 84000000h-8c000000h
403         p_objinfo       = ObjectInfo_InsetObject(
404                                                 p_pginfo, 0x84000000, 0x08000000, p_objparent, 0x00, OBJINFO_TYPE_NONE, NULL );
405         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 15, 6, NO_OBJ, 14, NO_OBJ );
406
407         // Check ---
408         p_objinfo       = OBJINFO( p_pginfo, 1 );
409         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
410         CU_ASSERT( p_objinfo->addrlink.i_next_id == 4 );
411         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, 4, NO_OBJ, 6 );
412
413         p_objinfo       = OBJINFO( p_pginfo, 4 );
414         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 1 );
415         CU_ASSERT( p_objinfo->addrlink.i_next_id == 10 );
416         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 1, 10, NO_OBJ, 5 );
417
418         p_objinfo       = OBJINFO( p_pginfo, 10 );
419         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 4 );
420         CU_ASSERT( p_objinfo->addrlink.i_next_id == 11 );
421         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 4, NO_OBJ, NO_OBJ, 11 );
422
423         p_objinfo       = OBJINFO( p_pginfo, 11 );
424         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 10 );
425         CU_ASSERT( p_objinfo->addrlink.i_next_id == 5 );
426         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 4, NO_OBJ, 10, NO_OBJ );
427
428         p_objinfo       = OBJINFO( p_pginfo, 5 );
429         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 11 );
430         CU_ASSERT( p_objinfo->addrlink.i_next_id == 6 );
431         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 1, 12, 4, 8 );
432
433         p_objinfo       = OBJINFO( p_pginfo, 6 );
434         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 5 );
435         CU_ASSERT( p_objinfo->addrlink.i_next_id == 12 );
436         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 0, 14, 1, 3 );
437
438         p_objinfo       = OBJINFO( p_pginfo, 12 );
439         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 6 );
440         CU_ASSERT( p_objinfo->addrlink.i_next_id == 3 );
441         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 12, 5, NO_OBJ, NO_OBJ, 13 );
442
443         p_objinfo       = OBJINFO( p_pginfo, 3 );
444         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 12 );
445         CU_ASSERT( p_objinfo->addrlink.i_next_id == 13 );
446         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 0, 7, 6, 2 );
447
448         p_objinfo       = OBJINFO( p_pginfo, 13 );
449         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 3 );
450         CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
451         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 13, 5, NO_OBJ, 12, NO_OBJ );
452
453         p_objinfo       = OBJINFO( p_pginfo, 7 );
454         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 13 );
455         CU_ASSERT( p_objinfo->addrlink.i_next_id == 8 );
456         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 3, NO_OBJ, NO_OBJ, NO_OBJ );
457
458         p_objinfo       = OBJINFO( p_pginfo, 8 );
459         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 7 );
460         CU_ASSERT( p_objinfo->addrlink.i_next_id == 2 );
461         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 1, NO_OBJ, 5, NO_OBJ );
462
463         p_objinfo       = OBJINFO( p_pginfo, 2 );
464         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 8 );
465         CU_ASSERT( p_objinfo->addrlink.i_next_id == 9 );
466         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 0, NO_OBJ, 3, 9 );
467
468         p_objinfo       = OBJINFO( p_pginfo, 9 );
469         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 2 );
470         CU_ASSERT( p_objinfo->addrlink.i_next_id == 14 );
471         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 0, NO_OBJ, 2, NO_OBJ );
472
473         p_objinfo       = OBJINFO( p_pginfo, 14 );
474         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 9 );
475         CU_ASSERT( p_objinfo->addrlink.i_next_id == 15 );
476         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 14, 6, NO_OBJ, NO_OBJ, 15 );
477
478         p_objinfo       = OBJINFO( p_pginfo, 15 );
479         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 14 );
480         CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
481         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 15, 6, NO_OBJ, 14, NO_OBJ );
482
483         return;
484 }
485
486 /*--------------------------------------------------------------------*/
487 void Test_ObjectInfo_InsetDelete_test00_004(
488                 LibGoblin_ProgramInfo   *p_pginfo )
489 {
490         LibGoblin_ObjectInfo    *p_objinfo;
491
492         // Scenery 1 ......................................................
493         Test_ObjectInfo_InsetDelete_test00_004_Alloc( p_pginfo );
494
495         // Delete 1 
496         p_objinfo       = OBJINFO( p_pginfo, 5 );
497         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
498
499         p_objinfo       = OBJINFO( p_pginfo, 11 );
500         CU_ASSERT( p_objinfo->addrlink.i_next_id == 6 );
501         CU_ASSERT( p_objinfo->grplink.i_next_id == NO_OBJ );
502         p_objinfo       = OBJINFO( p_pginfo, 6 );
503         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 11 );
504         p_objinfo       = OBJINFO( p_pginfo, 4 );
505         CU_ASSERT( p_objinfo->grplink.i_next_id == 8 );
506         p_objinfo       = OBJINFO( p_pginfo, 8 );
507         CU_ASSERT( p_objinfo->grplink.i_prev_id == 4 );
508
509         // Delete 2
510         p_objinfo       = OBJINFO( p_pginfo, 6 );
511         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
512
513         p_objinfo       = OBJINFO( p_pginfo, 11 );
514         CU_ASSERT( p_objinfo->addrlink.i_next_id == 3 );
515         p_objinfo       = OBJINFO( p_pginfo, 3 );
516         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 11 );
517         p_objinfo       = OBJINFO( p_pginfo, 1 );
518         CU_ASSERT( p_objinfo->grplink.i_next_id == 3 );
519         p_objinfo       = OBJINFO( p_pginfo, 3 );
520         CU_ASSERT( p_objinfo->grplink.i_prev_id == 1 );
521
522         // Delete 3
523         p_objinfo       = OBJINFO( p_pginfo, 1 );
524         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
525
526         p_objinfo       = OBJINFO( p_pginfo, 3 );
527         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
528         CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
529         CU_ASSERT( p_objinfo->grplink.i_prev_id == NO_OBJ );
530         CU_ASSERT( p_objinfo->grplink.i_next_id == 2 );
531         p_objinfo       = OBJINFO( p_pginfo, 7 );
532         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 3 );
533         p_objinfo       = OBJINFO( p_pginfo, 2 );
534         CU_ASSERT( p_objinfo->grplink.i_prev_id == 3 );
535         p_objinfo       = OBJINFO( p_pginfo, 0 );
536         CU_ASSERT( p_objinfo->grplink.i_child_topid == 3 );
537
538         // Delete 4
539         p_objinfo       = OBJINFO( p_pginfo, 2 );
540         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
541
542         p_objinfo       = OBJINFO( p_pginfo, 3 );
543         CU_ASSERT( p_objinfo->grplink.i_next_id == 9 );
544         CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
545
546         p_objinfo       = OBJINFO( p_pginfo, 3 );
547         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
548
549         p_objinfo       = OBJINFO( p_pginfo, 9 );
550         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
551         CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
552         CU_ASSERT( p_objinfo->grplink.i_prev_id == NO_OBJ );
553         CU_ASSERT( p_objinfo->grplink.i_next_id == NO_OBJ );
554
555         p_objinfo       = OBJINFO( p_pginfo, 9 );
556         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
557
558         p_objinfo       = OBJINFO( p_pginfo, 0 );
559         CU_ASSERT( p_objinfo->grplink.i_child_topid == NO_OBJ);
560         CU_ASSERT( p_objinfo->addrlink.i_prev_id == NO_OBJ );
561         CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
562         CU_ASSERT( p_objinfo->grplink.i_prev_id == NO_OBJ );
563         CU_ASSERT( p_objinfo->grplink.i_next_id == NO_OBJ );
564
565         // Delete MasterObject 
566         p_objinfo       = OBJINFO( p_pginfo, 0 );
567         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
568         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
569
570         return;
571 }
572
573 /*--------------------------------------------------------------------*/
574 void Test_ObjectInfo_InsetDelete_test00_005(
575                 LibGoblin_ProgramInfo   *p_pginfo )
576 {
577         LibGoblin_ObjectInfo    *p_objinfo;
578
579         // ID10: 00000000h - f0000000h
580         //   ID02: 10000000h - 20000000h
581         //     ID01: 10000000h - 10100000h
582         //   ID03: 30000000h - 40000000h
583         //   ID04: 50000000h - 60000000h
584         //   ID11: 65000000h - b5000000h
585         //     ID09: 70000000h - 80000000h
586         //       ID05: 70000000h - 70001000h
587         //     ID08: 90000000h - a0000000h
588         //       ID07: 90100000h - 90200000h
589         //         ID06: 90101000h - 90102000h
590
591
592         // Alloc ---
593         //     ID01: 10000000h - 10100000h
594         p_objinfo       = ObjectInfo_InsetObject(
595                                                         p_pginfo, 0x10000000, 0x00100000, NULL,
596                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
597                                                         OBJINFO_TYPE_NONE, NULL );
598         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
599
600         //   ID02: 10000000h - 20000000h
601         p_objinfo       = ObjectInfo_InsetObject(
602                                                         p_pginfo, 0x10000000, 0x10000000, NULL,
603                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
604                                                         OBJINFO_TYPE_NONE, NULL );
605         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 0, 1, NO_OBJ, NO_OBJ );
606
607         //   ID03: 30000000h - 40000000h
608         p_objinfo       = ObjectInfo_InsetObject(
609                                                         p_pginfo, 0x30000000, 0x10000000, NULL,
610                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
611                                                         OBJINFO_TYPE_NONE, NULL );
612         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 0, NO_OBJ, 2, NO_OBJ );
613
614         //   ID04: 50000000h - 60000000h
615         p_objinfo       = ObjectInfo_InsetObject(
616                                                         p_pginfo, 0x50000000, 0x10000000, NULL,
617                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
618                                                         OBJINFO_TYPE_NONE, NULL );
619         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 0, NO_OBJ, 3, NO_OBJ );
620
621         //       ID05: 70000000h - 70001000h
622         p_objinfo       = ObjectInfo_InsetObject(
623                                                         p_pginfo, 0x70000000, 0x00001000, NULL,
624                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
625                                                         OBJINFO_TYPE_NONE, NULL );
626         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 0, NO_OBJ, 4, NO_OBJ );
627
628         //         ID06: 90101000h - 90102000h
629         p_objinfo       = ObjectInfo_InsetObject(
630                                                         p_pginfo, 0x90101000, 0x00001000, NULL,
631                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
632                                                         OBJINFO_TYPE_NONE, NULL );
633         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 0, NO_OBJ, 5, NO_OBJ );
634
635         //       ID07: 90100000h - 90200000h
636         p_objinfo       = ObjectInfo_InsetObject(
637                                                         p_pginfo, 0x90100000, 0x00100000, NULL,
638                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
639                                                         OBJINFO_TYPE_NONE, NULL );
640         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 0, 6, 5, NO_OBJ );
641
642         //     ID08: 90000000h - a0000000h
643         p_objinfo       = ObjectInfo_InsetObject(
644                                                         p_pginfo, 0x90000000, 0x10000000, NULL,
645                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
646                                                         OBJINFO_TYPE_NONE, NULL );
647         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 0, 7, 5, NO_OBJ );
648
649         //     ID09: 70000000h - 80000000h
650         p_objinfo       = ObjectInfo_InsetObject(
651                                                         p_pginfo, 0x70000000, 0x10000000, NULL,
652                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
653                                                         OBJINFO_TYPE_NONE, NULL );
654         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 0, 5, 4, 8 );
655
656         // ID10: 00000000h - f0000000h
657         p_objinfo       = ObjectInfo_InsetObject(
658                                                         p_pginfo, 0x00000000, 0xf0000000, NULL,
659                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
660                                                         OBJINFO_TYPE_NONE, NULL );
661         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 0, 2, NO_OBJ, NO_OBJ );
662
663         //   ID11: 65000000h - b5000000h
664         p_objinfo       = ObjectInfo_InsetObject(
665                                                         p_pginfo, 0x65000000, 0x50000000, NULL,
666                                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
667                                                         OBJINFO_TYPE_NONE, NULL );
668         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 10, 9, 4, NO_OBJ );
669
670
671         // Check ---
672         p_objinfo       = OBJINFO( p_pginfo, 1 );
673         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 2 );
674         CU_ASSERT( p_objinfo->addrlink.i_next_id == 3 );
675         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 2, NO_OBJ, NO_OBJ, NO_OBJ );
676
677         p_objinfo       = OBJINFO( p_pginfo, 2 );
678         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 10 );
679         CU_ASSERT( p_objinfo->addrlink.i_next_id == 1 );
680         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 10, 1, NO_OBJ, 3 );
681
682         p_objinfo       = OBJINFO( p_pginfo, 3 );
683         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 1 );
684         CU_ASSERT( p_objinfo->addrlink.i_next_id == 4 );
685         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 10, NO_OBJ, 2, 4 );
686
687         p_objinfo       = OBJINFO( p_pginfo, 4 );
688         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 3 );
689         CU_ASSERT( p_objinfo->addrlink.i_next_id == 11 );
690         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, 3, 11 );
691
692         p_objinfo       = OBJINFO( p_pginfo, 5 );
693         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 9 );
694         CU_ASSERT( p_objinfo->addrlink.i_next_id == 8 );
695         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 9, NO_OBJ, NO_OBJ, NO_OBJ );
696
697         p_objinfo       = OBJINFO( p_pginfo, 6 );
698         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 7 );
699         CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
700         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 7, NO_OBJ, NO_OBJ, NO_OBJ );
701
702         p_objinfo       = OBJINFO( p_pginfo, 7 );
703         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 8 );
704         CU_ASSERT( p_objinfo->addrlink.i_next_id == 6 );
705         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 8, 6, NO_OBJ, NO_OBJ );
706
707         p_objinfo       = OBJINFO( p_pginfo, 8 );
708         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 5 );
709         CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
710         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 11, 7, 9, NO_OBJ );
711
712         p_objinfo       = OBJINFO( p_pginfo, 9 );
713         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 11 );
714         CU_ASSERT( p_objinfo->addrlink.i_next_id == 5 );
715         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 11, 5, NO_OBJ, 8 );
716
717         p_objinfo       = OBJINFO( p_pginfo, 10 );
718         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
719         CU_ASSERT( p_objinfo->addrlink.i_next_id == 2 );
720         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 10, 0, 2, NO_OBJ, NO_OBJ );
721
722         p_objinfo       = OBJINFO( p_pginfo, 11 );
723         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 4 );
724         CU_ASSERT( p_objinfo->addrlink.i_next_id == 9 );
725         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 11, 10, 9, 4, NO_OBJ );
726
727
728         // Delete --- 
729         p_objinfo       = OBJINFO( p_pginfo, 11 );
730         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
731         p_objinfo       = OBJINFO( p_pginfo, 4 );
732         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, 3, NO_OBJ );
733
734         p_objinfo       = OBJINFO( p_pginfo, 3 );
735         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
736         p_objinfo       = OBJINFO( p_pginfo, 2 );
737         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 10, 1, NO_OBJ, 4 );
738
739         p_objinfo       = OBJINFO( p_pginfo, 2 );
740         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
741         p_objinfo       = OBJINFO( p_pginfo, 4 );
742         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 10, NO_OBJ, NO_OBJ, NO_OBJ );
743
744         p_objinfo       = OBJINFO( p_pginfo, 10 );
745         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
746
747
748         // Delete MasterObject ---
749         p_objinfo       = OBJINFO( p_pginfo, 0 );
750         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
751         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
752
753         return;
754 }
755
756 /*--------------------------------------------------------------------*/
757 void Test_ObjectInfo_InsetDelete_test00_006(
758                 LibGoblin_ProgramInfo   *p_pginfo )
759 {
760         LibGoblin_ObjectInfo    *p_objinfo;
761
762         // ID05: 00000000h - f0000000h                  NULL
763         //   ID02: 10000000h - 20000000h                "function02"
764         //     ID01: 10000000h - 10100000h              "function01"
765         //   ID03: 30000000h - 40000000h                "function03"
766         //     ID07: 30000000h - 40000000h              "function03"
767         //       ID08: 30000000h - 40000000h    "function07"
768         //   ID04: 50000000h - 60000000h                NULL
769         //     ID09: 50000000h - 60000000h              "function09"
770         //   ID06: 70000000h - 70001000h                "function01"
771
772
773         // ------------------------------------------------------------------
774         //     ID01: 10000000h - 10100000h
775         p_objinfo       = ObjectInfo_InsetObject(
776                                         p_pginfo, 0x10000000, 0x00100000, NULL,
777                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
778                                         OBJINFO_TYPE_NONE, "function01" );
779         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, NO_OBJ, NO_OBJ, NO_OBJ );
780         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function01", 256) );
781
782         //   ID02: 10000000h - 20000000h
783         p_objinfo       = ObjectInfo_InsetObject(
784                                         p_pginfo, 0x10000000, 0x10000000, NULL,
785                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
786                                         OBJINFO_TYPE_NONE, "function02" );
787         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 0, 1, NO_OBJ, NO_OBJ );
788         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function02", 256) );
789
790         //   ID03: 30000000h - 40000000h
791         p_objinfo       = ObjectInfo_InsetObject(
792                                         p_pginfo, 0x30000000, 0x10000000, NULL,
793                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
794                                         OBJINFO_TYPE_NONE, "function03" );
795         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 0, NO_OBJ, 2, NO_OBJ );
796         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function03", 256) );
797
798         //   ID04: 50000000h - 60000000h
799         p_objinfo       = ObjectInfo_InsetObject(
800                                         p_pginfo, 0x50000000, 0x10000000, NULL,
801                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
802                                         OBJINFO_TYPE_NONE, NULL );
803         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 0, NO_OBJ, 3, NO_OBJ );
804
805         // ID05: 00000000h - f0000000h
806         p_objinfo       = ObjectInfo_InsetObject(
807                                         p_pginfo, 0x00000000, 0xf0000000, NULL,
808                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
809                                         OBJINFO_TYPE_NONE, NULL );
810         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 0, 2, NO_OBJ, NO_OBJ );
811
812
813         // ------------------------------------------------------------------
814         //   ID06: 70000000h - 70001000h
815         p_objinfo       = ObjectInfo_InsetObject(
816                                         p_pginfo, 0x70000000, 0x00001000, NULL,
817                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
818                                         OBJINFO_TYPE_NONE, "function01" );
819         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 5, NO_OBJ, 4, NO_OBJ );
820         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function01", 256) );
821
822         //   ID07: 30000000h - 40000000h
823         p_objinfo       = ObjectInfo_InsetObject(
824                                         p_pginfo, 0x30000000, 0x10000000, NULL,
825                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET,
826                                         OBJINFO_TYPE_NONE, "function03" );
827         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 3, NO_OBJ, NO_OBJ, NO_OBJ );
828         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function03", 256) );
829
830         //   ID08: 30000000h - 40000000h
831         p_objinfo       = ObjectInfo_InsetObject(
832                                         p_pginfo, 0x30000000, 0x10000000, NULL,
833                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
834                                         OBJINFO_TYPE_NONE, "function07" );
835         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 7, NO_OBJ, NO_OBJ, NO_OBJ );
836         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function07", 256) );
837
838         //   ID09: 50000000h - 60000000h
839         p_objinfo       = ObjectInfo_InsetObject(
840                                         p_pginfo, 0x50000000, 0x10000000, NULL,
841                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
842                                         OBJINFO_TYPE_NONE, "function09" );
843         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 4, NO_OBJ, NO_OBJ, NO_OBJ );
844         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function09", 256) );
845
846
847         // ------------------------------------------------------------------
848         //   IDxx=03: 30000000h - 40000000h
849         p_objinfo       = ObjectInfo_InsetObject(
850                                         p_pginfo, 0x30000000, 0x10000000, NULL,
851                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
852                                         OBJINFO_TYPE_NONE, "function03" );
853         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 5, 7, 2, 4 );
854         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function03", 256) );
855
856         //   IDxx=09: 50000000h - 60000000h
857         p_objinfo       = ObjectInfo_InsetObject(
858                                         p_pginfo, 0x50000000, 0x10000000, NULL,
859                                         OBJINFO_INSETMODE_ADOPT | OBJINFO_INSETMODE_INSET | OBJINFO_INSETMODE_CHKNAME,
860                                         OBJINFO_TYPE_NONE, "function09" );
861         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 4, NO_OBJ, NO_OBJ, NO_OBJ );
862         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function09", 256) );
863
864         // Check ---
865         p_objinfo       = OBJINFO( p_pginfo, 1 );
866         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 2 );
867         CU_ASSERT( p_objinfo->addrlink.i_next_id == 3 );
868         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 2, NO_OBJ, NO_OBJ, NO_OBJ );
869         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function01", 256) );
870
871         p_objinfo       = OBJINFO( p_pginfo, 2 );
872         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 5 );
873         CU_ASSERT( p_objinfo->addrlink.i_next_id == 1 );
874         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 2, 5, 1, NO_OBJ, 3 );
875         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function02", 256) );
876
877         p_objinfo       = OBJINFO( p_pginfo, 3 );
878         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 1 );
879         CU_ASSERT( p_objinfo->addrlink.i_next_id == 7 );
880         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 3, 5, 7, 2, 4 );
881         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function03", 256) );
882
883         p_objinfo       = OBJINFO( p_pginfo, 4 );
884         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 8 );
885         CU_ASSERT( p_objinfo->addrlink.i_next_id == 9);
886         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 5, 9, 3, 6 );
887         CU_ASSERT( NULL == p_objinfo->pstr_name );
888
889         p_objinfo       = OBJINFO( p_pginfo, 5 );
890         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 0 );
891         CU_ASSERT( p_objinfo->addrlink.i_next_id == 2 );
892         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 5, 0, 2, NO_OBJ, NO_OBJ );
893         CU_ASSERT( NULL == p_objinfo->pstr_name );
894
895         p_objinfo       = OBJINFO( p_pginfo, 6 );
896         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 9 );
897         CU_ASSERT( p_objinfo->addrlink.i_next_id == NO_OBJ );
898         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 6, 5, NO_OBJ, 4, NO_OBJ );
899         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function01", 256) );
900
901         p_objinfo       = OBJINFO( p_pginfo, 7 );
902         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 3 );
903         CU_ASSERT( p_objinfo->addrlink.i_next_id == 8 );
904         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 7, 3, 8, NO_OBJ, NO_OBJ );
905         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function03", 256) );
906
907         p_objinfo       = OBJINFO( p_pginfo, 8 );
908         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 7 );
909         CU_ASSERT( p_objinfo->addrlink.i_next_id == 4 );
910         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 8, 7, NO_OBJ, NO_OBJ, NO_OBJ );
911         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function07", 256) );
912
913         p_objinfo       = OBJINFO( p_pginfo, 9 );
914         CU_ASSERT( p_objinfo->addrlink.i_prev_id == 4 );
915         CU_ASSERT( p_objinfo->addrlink.i_next_id == 6 );
916         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9, 4, NO_OBJ, NO_OBJ, NO_OBJ );
917         CU_ASSERT( 0x00 == strncmp( p_objinfo->pstr_name, "function09", 256) );
918
919         // Delete --- 
920         p_objinfo       = OBJINFO( p_pginfo, 3 );
921         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
922
923         p_objinfo       = OBJINFO( p_pginfo, 2 );
924         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
925
926         p_objinfo       = OBJINFO( p_pginfo, 6 );
927         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
928
929         p_objinfo       = OBJINFO( p_pginfo, 4 );
930         Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 5, 9, NO_OBJ, NO_OBJ );
931
932         p_objinfo       = OBJINFO( p_pginfo, 5 );
933         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
934
935         // Delete MasterObject ---
936         p_objinfo       = OBJINFO( p_pginfo, 0 );
937         ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
938         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
939
940         return;
941 }
942
943 /*--------------------------------------------------------------------*/
944 void Test_ObjectInfo_InsetDelete_test00( void )
945 {
946         int             i_result;
947         LibGoblin_ProgramInfo   *p_pginfo;
948
949         // Init ----
950         i_result        = LibBrownie_Init();
951         CU_ASSERT( 0x00 == i_result );
952
953         i_result        = ProgInfo_Init();
954         CU_ASSERT( 0x00 == i_result );
955
956         p_pginfo        = ProgInfo_AllocProgInfo();
957         CU_ASSERT( NULL != p_pginfo );
958
959
960         // -----------------
961         i_result        = ObjectInfo_Init( p_pginfo, 0 );
962         CU_ASSERT( 0x00 == i_result );
963
964         Test_ObjectInfo_InsetDelete_test00_001( p_pginfo );
965         Test_ObjectInfo_InsetDelete_test00_002( p_pginfo );
966
967         i_result        = ObjectInfo_Term( p_pginfo );
968         CU_ASSERT( 0x00 == i_result );
969
970
971         // -----------------
972         i_result        = ObjectInfo_Init( p_pginfo, 0 );
973         CU_ASSERT( 0x00 == i_result );
974
975         Test_ObjectInfo_InsetDelete_test00_003( p_pginfo );
976
977         i_result        = ObjectInfo_Term( p_pginfo );
978         CU_ASSERT( 0x00 == i_result );
979
980
981         // -----------------
982         i_result        = ObjectInfo_Init( p_pginfo, 0 );
983         CU_ASSERT( 0x00 == i_result );
984
985         Test_ObjectInfo_InsetDelete_test00_004( p_pginfo );
986
987         i_result        = ObjectInfo_Term( p_pginfo );
988         CU_ASSERT( 0x00 == i_result );
989
990         // -----------------
991         i_result        = ObjectInfo_Init( p_pginfo, 0 );
992         CU_ASSERT( 0x00 == i_result );
993
994         Test_ObjectInfo_InsetDelete_test00_005( p_pginfo );
995
996         i_result        = ObjectInfo_Term( p_pginfo );
997         CU_ASSERT( 0x00 == i_result );
998
999         // -----------------
1000         i_result        = ObjectInfo_Init( p_pginfo, 0 );
1001         CU_ASSERT( 0x00 == i_result );
1002
1003         Test_ObjectInfo_InsetDelete_test00_006( p_pginfo );
1004
1005         i_result        = ObjectInfo_Term( p_pginfo );
1006         CU_ASSERT( 0x00 == i_result );
1007
1008
1009         // Term -----------
1010         i_result        = ProgInfo_FreeProgInfo( p_pginfo );
1011         CU_ASSERT( 0x00 == i_result );
1012
1013         i_result        = ProgInfo_Term();
1014         CU_ASSERT( 0x00 == i_result );
1015
1016         LibBrownie_Term();
1017
1018         return;
1019 }
1020
1021
1022 /* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
1023 /*--------------------------------------------------------------------*/
1024 void Test_ObjectInfo_AllocFree_test00_001( void )
1025 {
1026         int             i_result;
1027         int             i_cnt;
1028         int             i_max;
1029         int             i_used;
1030         LibGoblin_ProgramInfo   *p_pginfo;
1031         LibGoblin_ObjectInfo    *p_objinfo;
1032
1033         // Init ----
1034         i_result        = LibBrownie_Init();
1035         CU_ASSERT( 0x00 == i_result );
1036
1037         i_result        = ProgInfo_Init();
1038         CU_ASSERT( 0x00 == i_result );
1039
1040         p_pginfo        = ProgInfo_AllocProgInfo();
1041         CU_ASSERT( NULL != p_pginfo );
1042
1043         i_max   = (LIBGOBLIN_OBJINFO_UNITS * LIBGOBLIN_OBJINFO_INITALLOCRATE);
1044
1045         i_result        = ObjectInfo_Init( p_pginfo, 0 );
1046         CU_ASSERT( 0x00 == i_result );
1047         CU_ASSERT( i_max == p_pginfo->objinfo.i_alloced );
1048         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
1049         CU_ASSERT( 0x00 == p_pginfo->objinfo.i_empty );
1050
1051         // Alloc Test ---
1052         for( i_cnt = 0; i_cnt < (i_max - 1); i_cnt++ )  {
1053                 p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
1054                 CU_ASSERT( NULL != p_objinfo );
1055                 CU_ASSERT(  i_cnt      == p_objinfo->i_id );
1056                 CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_used );
1057                 CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_empty );
1058         }
1059
1060         p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
1061         CU_ASSERT( NULL != p_objinfo );
1062         CU_ASSERT(  i_cnt      == p_objinfo->i_id );
1063         CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_used );
1064         CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_empty );
1065
1066         i_cnt++;
1067         p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
1068         CU_ASSERT( NULL != p_objinfo );
1069         CU_ASSERT(  i_cnt      == p_objinfo->i_id );
1070         CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_used );
1071         CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_empty );
1072
1073         CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
1074
1075         i_used  = i_max + 1;
1076         for( i_cnt = (i_max / 2); i_cnt >= 0; i_cnt-- ) {
1077                 p_objinfo       = ObjectInfo_GetObjectInfo( p_pginfo, i_cnt );
1078                 CU_ASSERT( NULL != p_objinfo );
1079                 CU_ASSERT(  i_cnt      == p_objinfo->i_id );
1080
1081                 i_result        = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
1082                 CU_ASSERT( 0x00 == i_result );
1083                 i_used--;
1084                 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1085                 CU_ASSERT( i_cnt == p_pginfo->objinfo.i_empty );
1086         }
1087         CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
1088
1089         for( i_cnt = 0; i_cnt < (i_max/2); i_cnt++ )    {
1090                 p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
1091                 CU_ASSERT( NULL != p_objinfo );
1092                 CU_ASSERT( p_objinfo->i_id == i_cnt );
1093                 i_used++;
1094                 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1095                 CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_empty );
1096         }
1097
1098         p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
1099         CU_ASSERT( NULL != p_objinfo );
1100         CU_ASSERT( p_objinfo->i_id == i_cnt );
1101         i_used++;
1102         CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1103         CU_ASSERT( (i_max + 1) == p_pginfo->objinfo.i_empty );
1104
1105         CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
1106
1107         for( i_cnt = i_max; i_cnt >= 0; i_cnt-- )       {
1108                 p_objinfo       = ObjectInfo_GetObjectInfo( p_pginfo, i_cnt );
1109                 CU_ASSERT( NULL != p_objinfo );
1110                 CU_ASSERT(  i_cnt      == p_objinfo->i_id );
1111
1112                 i_result        = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
1113                 CU_ASSERT( 0x00 == i_result );
1114                 i_used--;
1115                 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1116         }
1117         CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
1118
1119         // Term ---
1120         i_result        = ObjectInfo_Term( p_pginfo );
1121         CU_ASSERT( 0x00 == i_result );
1122
1123         i_result        = ProgInfo_FreeProgInfo( p_pginfo );
1124         CU_ASSERT( 0x00 == i_result );
1125
1126         i_result        = ProgInfo_Term();
1127         CU_ASSERT( 0x00 == i_result );
1128
1129         LibBrownie_Term();
1130
1131         return;
1132 }
1133
1134
1135 /* ObjectInfo_Init() & Term() *****************************************/
1136 /*--------------------------------------------------------------------*/
1137 void Test_ObjectInfo_InitTerm_test00_001( void )
1138 {
1139         int             i_result;
1140         LibGoblin_ProgramInfo   *p_pginfo;
1141
1142         i_result        = LibBrownie_Init();
1143         CU_ASSERT( 0x00 == i_result );
1144
1145         i_result        = ProgInfo_Init();
1146         CU_ASSERT( 0x00 == i_result );
1147
1148         p_pginfo        = ProgInfo_AllocProgInfo();
1149         CU_ASSERT( NULL != p_pginfo );
1150
1151         i_result        = ObjectInfo_Init( p_pginfo, 0 );
1152         CU_ASSERT( 0x00 == i_result );
1153
1154         i_result        = ObjectInfo_Term( p_pginfo );
1155         CU_ASSERT( 0x00 == i_result );
1156
1157         i_result        = ProgInfo_FreeProgInfo( p_pginfo );
1158         CU_ASSERT( 0x00 == i_result );
1159
1160         i_result        = ProgInfo_Term();
1161         CU_ASSERT( 0x00 == i_result );
1162
1163         LibBrownie_Term();
1164
1165         return;
1166 }
1167
1168
1169 /*----------------------------------------------------------------------
1170 ----------------------------------------------------------------------*/
1171 DRD64_TEST_LIBGOBLIN_OBJINFO_EXTERN
1172 int
1173         Test_LibGoblin_ObjInfo(
1174                 void )
1175 {
1176         CU_pSuite       pt_goblin;
1177
1178         pt_goblin       = CU_add_suite( "LibGoblin_ObjInfo", NULL, NULL );
1179         CU_add_test( pt_goblin, "ObjectInfo_InitTerm_test00_001",
1180                                                                  Test_ObjectInfo_InitTerm_test00_001 );
1181         CU_add_test( pt_goblin, "ObjectInfo_AllocFree_test00_001",
1182                                                                  Test_ObjectInfo_AllocFree_test00_001 );
1183
1184         CU_add_test( pt_goblin, "ObjectInfo_InsetDelete_test00",
1185                                                                  Test_ObjectInfo_InsetDelete_test00 );
1186
1187         return 0x00;
1188 }
1189
1190
1191 /* EOF of drd64_.c ----------------------------------- */