1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
4 for INTEL64(R), AMD64(R)
6 Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
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.
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.
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
31 /* File Info -----------------------------------------------------------
35 ----------------------------------------------------------------------*/
37 #define DRD64_SRC_TEST_LIBGOBLIN_OBJINFO
38 #include"drd64_libgoblin.h"
39 #include"test_libgoblin.h"
43 /*--------------------------------------------------------------------*/
44 void Test_ObjectInfo_CUAssert_GrpLink(
45 LibGoblin_ObjectInfo *p_obj,
52 CU_ASSERT( NULL != p_obj );
56 { CU_ASSERT( i_id == p_obj->i_id ); }
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 ); }
72 /* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
73 /*--------------------------------------------------------------------*/
74 void Test_ObjectInfo_InsetDelete_test00_001(
75 LibGoblin_ProgramInfo *p_pginfo )
77 LibGoblin_ObjectInfo *p_objinfo;
78 LibGoblin_ObjectInfo *p_objmaster;
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 );
87 p_objmaster = OBJINFO( p_pginfo, 0 );
88 Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
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 );
95 p_objinfo = OBJINFO( p_pginfo, 0 );
96 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
97 CU_ASSERT( NO_OBJ == p_pginfo->objinfo.i_topid );
102 /*--------------------------------------------------------------------*/
103 void Test_ObjectInfo_InsetDelete_test00_002(
104 LibGoblin_ProgramInfo *p_pginfo )
109 LibGoblin_ObjectInfo *p_objinfo;
110 LibGoblin_ObjectInfo *p_objmaster;
112 // Scenery 1 ......................................................
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 );
119 qw_addr += 0x00100000;
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 );
126 qw_addr += 0x00000100;
130 p_objmaster = OBJINFO( p_pginfo, 0 );
131 Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
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) );
138 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
139 CU_ASSERT( (i_cnt + 1) == p_objmaster->grplink.i_child_topid );
142 p_objinfo = OBJINFO( p_pginfo, i_cnt );
143 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, i_cnt, 0, NO_OBJ, NO_OBJ, NO_OBJ );
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 );
149 // Scenery 2 ......................................................
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 );
156 for( i_cnt = 2; i_cnt < 10; i_cnt++ ) {
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) );
164 p_objmaster = OBJINFO( p_pginfo, 0 );
165 Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 9991, NO_OBJ, NO_OBJ );
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) );
173 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
174 CU_ASSERT( (i_cnt + 1) == p_objmaster->grplink.i_child_topid );
177 p_objinfo = OBJINFO( p_pginfo, 9999 );
178 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, NO_OBJ );
180 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
181 CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
183 // Scenery 3 ......................................................
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 );
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 );
198 p_objmaster = OBJINFO( p_pginfo, 0 );
199 Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 9999, NO_OBJ, NO_OBJ );
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) );
207 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
208 CU_ASSERT( 9999 == p_objmaster->grplink.i_child_topid );
211 p_objinfo = OBJINFO( p_pginfo, 9999 );
212 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9999, 0, NO_OBJ, NO_OBJ, 9991 );
214 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
215 CU_ASSERT( 9991 == p_objmaster->grplink.i_child_topid );
217 p_objinfo = OBJINFO( p_pginfo, 9991 );
218 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 9991, 0, NO_OBJ, NO_OBJ, NO_OBJ );
220 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
221 CU_ASSERT( NO_OBJ == p_objmaster->grplink.i_child_topid );
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 );
231 /*--------------------------------------------------------------------*/
232 void Test_ObjectInfo_InsetDelete_test00_003(
233 LibGoblin_ProgramInfo *p_pginfo )
238 LibGoblin_ObjectInfo *p_objinfo;
239 LibGoblin_ObjectInfo *p_objparent;
240 LibGoblin_ObjectInfo *p_objmaster;
242 // Scenery 1 .......................................................
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 );
250 for( i_cnt = 2; i_cnt < 6; i_cnt++ ) {
251 qw_addr += 0x00010000;
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 );
260 for( ; i_cnt < 10; i_cnt++ ) {
261 qw_addr += 0x00010000;
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 );
271 p_objmaster = OBJINFO( p_pginfo, 0 );
272 Test_ObjectInfo_CUAssert_GrpLink( p_objmaster, 0, NO_OBJ, 1, NO_OBJ, NO_OBJ );
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 );
279 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
282 p_objinfo = OBJINFO( p_pginfo, 1 );
283 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 1, 0, 2, NO_OBJ, NO_OBJ );
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 );
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 );
297 /*--------------------------------------------------------------------*/
298 void Test_ObjectInfo_InsetDelete_test00_004_Alloc(
299 LibGoblin_ProgramInfo *p_pginfo )
301 LibGoblin_ObjectInfo *p_objinfo;
302 LibGoblin_ObjectInfo *p_objparent;
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
320 // Scenery 1 ......................................................
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
386 // ID13: 40000000h-44000000h
387 p_objparent = OBJINFO( p_pginfo, 5 );
388 Test_ObjectInfo_CUAssert_GrpLink( p_objparent, 5, 1, 12, 4, 8 );
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 );
394 // ID14: 80000000h-88000000h
395 p_objparent = OBJINFO( p_pginfo, 6 );
396 Test_ObjectInfo_CUAssert_GrpLink( p_objparent, 6, 0, NO_OBJ, 1, 3 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
486 /*--------------------------------------------------------------------*/
487 void Test_ObjectInfo_InsetDelete_test00_004(
488 LibGoblin_ProgramInfo *p_pginfo )
490 LibGoblin_ObjectInfo *p_objinfo;
492 // Scenery 1 ......................................................
493 Test_ObjectInfo_InsetDelete_test00_004_Alloc( p_pginfo );
496 p_objinfo = OBJINFO( p_pginfo, 5 );
497 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
510 p_objinfo = OBJINFO( p_pginfo, 6 );
511 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
523 p_objinfo = OBJINFO( p_pginfo, 1 );
524 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
539 p_objinfo = OBJINFO( p_pginfo, 2 );
540 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
546 p_objinfo = OBJINFO( p_pginfo, 3 );
547 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
555 p_objinfo = OBJINFO( p_pginfo, 9 );
556 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
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 );
573 /*--------------------------------------------------------------------*/
574 void Test_ObjectInfo_InsetDelete_test00_005(
575 LibGoblin_ProgramInfo *p_pginfo )
577 LibGoblin_ObjectInfo *p_objinfo;
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
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
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 );
744 p_objinfo = OBJINFO( p_pginfo, 10 );
745 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
756 /*--------------------------------------------------------------------*/
757 void Test_ObjectInfo_InsetDelete_test00_006(
758 LibGoblin_ProgramInfo *p_pginfo )
760 LibGoblin_ObjectInfo *p_objinfo;
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"
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) );
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) );
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) );
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 );
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 );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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) );
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 );
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 );
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) );
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) );
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) );
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) );
920 p_objinfo = OBJINFO( p_pginfo, 3 );
921 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
923 p_objinfo = OBJINFO( p_pginfo, 2 );
924 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
926 p_objinfo = OBJINFO( p_pginfo, 6 );
927 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
929 p_objinfo = OBJINFO( p_pginfo, 4 );
930 Test_ObjectInfo_CUAssert_GrpLink( p_objinfo, 4, 5, 9, NO_OBJ, NO_OBJ );
932 p_objinfo = OBJINFO( p_pginfo, 5 );
933 ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo );
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 );
943 /*--------------------------------------------------------------------*/
944 void Test_ObjectInfo_InsetDelete_test00( void )
947 LibGoblin_ProgramInfo *p_pginfo;
950 i_result = LibBrownie_Init();
951 CU_ASSERT( 0x00 == i_result );
953 i_result = ProgInfo_Init();
954 CU_ASSERT( 0x00 == i_result );
956 p_pginfo = ProgInfo_AllocProgInfo();
957 CU_ASSERT( NULL != p_pginfo );
961 i_result = ObjectInfo_Init( p_pginfo, 0 );
962 CU_ASSERT( 0x00 == i_result );
964 Test_ObjectInfo_InsetDelete_test00_001( p_pginfo );
965 Test_ObjectInfo_InsetDelete_test00_002( p_pginfo );
967 i_result = ObjectInfo_Term( p_pginfo );
968 CU_ASSERT( 0x00 == i_result );
972 i_result = ObjectInfo_Init( p_pginfo, 0 );
973 CU_ASSERT( 0x00 == i_result );
975 Test_ObjectInfo_InsetDelete_test00_003( p_pginfo );
977 i_result = ObjectInfo_Term( p_pginfo );
978 CU_ASSERT( 0x00 == i_result );
982 i_result = ObjectInfo_Init( p_pginfo, 0 );
983 CU_ASSERT( 0x00 == i_result );
985 Test_ObjectInfo_InsetDelete_test00_004( p_pginfo );
987 i_result = ObjectInfo_Term( p_pginfo );
988 CU_ASSERT( 0x00 == i_result );
991 i_result = ObjectInfo_Init( p_pginfo, 0 );
992 CU_ASSERT( 0x00 == i_result );
994 Test_ObjectInfo_InsetDelete_test00_005( p_pginfo );
996 i_result = ObjectInfo_Term( p_pginfo );
997 CU_ASSERT( 0x00 == i_result );
1000 i_result = ObjectInfo_Init( p_pginfo, 0 );
1001 CU_ASSERT( 0x00 == i_result );
1003 Test_ObjectInfo_InsetDelete_test00_006( p_pginfo );
1005 i_result = ObjectInfo_Term( p_pginfo );
1006 CU_ASSERT( 0x00 == i_result );
1010 i_result = ProgInfo_FreeProgInfo( p_pginfo );
1011 CU_ASSERT( 0x00 == i_result );
1013 i_result = ProgInfo_Term();
1014 CU_ASSERT( 0x00 == i_result );
1022 /* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
1023 /*--------------------------------------------------------------------*/
1024 void Test_ObjectInfo_AllocFree_test00_001( void )
1030 LibGoblin_ProgramInfo *p_pginfo;
1031 LibGoblin_ObjectInfo *p_objinfo;
1034 i_result = LibBrownie_Init();
1035 CU_ASSERT( 0x00 == i_result );
1037 i_result = ProgInfo_Init();
1038 CU_ASSERT( 0x00 == i_result );
1040 p_pginfo = ProgInfo_AllocProgInfo();
1041 CU_ASSERT( NULL != p_pginfo );
1043 i_max = (LIBGOBLIN_OBJINFO_UNITS * LIBGOBLIN_OBJINFO_INITALLOCRATE);
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 );
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 );
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 );
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 );
1073 CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
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 );
1081 i_result = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
1082 CU_ASSERT( 0x00 == i_result );
1084 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1085 CU_ASSERT( i_cnt == p_pginfo->objinfo.i_empty );
1087 CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
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 );
1094 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1095 CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_empty );
1098 p_objinfo = ObjectInfo_AllocObjectInfo( p_pginfo );
1099 CU_ASSERT( NULL != p_objinfo );
1100 CU_ASSERT( p_objinfo->i_id == i_cnt );
1102 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1103 CU_ASSERT( (i_max + 1) == p_pginfo->objinfo.i_empty );
1105 CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
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 );
1112 i_result = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
1113 CU_ASSERT( 0x00 == i_result );
1115 CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
1117 CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
1120 i_result = ObjectInfo_Term( p_pginfo );
1121 CU_ASSERT( 0x00 == i_result );
1123 i_result = ProgInfo_FreeProgInfo( p_pginfo );
1124 CU_ASSERT( 0x00 == i_result );
1126 i_result = ProgInfo_Term();
1127 CU_ASSERT( 0x00 == i_result );
1135 /* ObjectInfo_Init() & Term() *****************************************/
1136 /*--------------------------------------------------------------------*/
1137 void Test_ObjectInfo_InitTerm_test00_001( void )
1140 LibGoblin_ProgramInfo *p_pginfo;
1142 i_result = LibBrownie_Init();
1143 CU_ASSERT( 0x00 == i_result );
1145 i_result = ProgInfo_Init();
1146 CU_ASSERT( 0x00 == i_result );
1148 p_pginfo = ProgInfo_AllocProgInfo();
1149 CU_ASSERT( NULL != p_pginfo );
1151 i_result = ObjectInfo_Init( p_pginfo, 0 );
1152 CU_ASSERT( 0x00 == i_result );
1154 i_result = ObjectInfo_Term( p_pginfo );
1155 CU_ASSERT( 0x00 == i_result );
1157 i_result = ProgInfo_FreeProgInfo( p_pginfo );
1158 CU_ASSERT( 0x00 == i_result );
1160 i_result = ProgInfo_Term();
1161 CU_ASSERT( 0x00 == i_result );
1169 /*----------------------------------------------------------------------
1170 ----------------------------------------------------------------------*/
1171 DRD64_TEST_LIBGOBLIN_OBJINFO_EXTERN
1173 Test_LibGoblin_ObjInfo(
1176 CU_pSuite pt_goblin;
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 );
1184 CU_add_test( pt_goblin, "ObjectInfo_InsetDelete_test00",
1185 Test_ObjectInfo_InsetDelete_test00 );
1191 /* EOF of drd64_.c ----------------------------------- */