OSDN Git Service

2019/01/09(Wed) 22:35:
authorKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 9 Jan 2019 13:35:01 +0000 (22:35 +0900)
committerKoine Yuusuke(koinec) <koinec@users.osdn.me>
Wed, 9 Jan 2019 13:35:01 +0000 (22:35 +0900)
 (LibGoblin)
  * WorkBackup (Testing ObjectInfo_InsetObject & ObjectInfo_DeleteObjectInfo)

libgoblin/drd64_libgoblin_objinfo.c
libgoblin/drd64_libgoblin_objinfo.h
libgoblin/drd64_libgoblin_type.h
libgoblin/test_libgoblin_objinfo.c

index ca00db6..04f08ed 100644 (file)
@@ -48,7 +48,7 @@ LibGoblin_ObjectInfo *
 {
        assert( NULL != p_pginfo );
 
-       if(( p_pginfo->i_max_objinfo <= i_oid ) || ( 0 > i_oid ))
+       if(( p_pginfo->objinfo.i_maxid <= i_oid ) || ( 0 > i_oid ))
                { return NULL; }
        
        return OBJINFO(p_pginfo, i_oid);
@@ -94,46 +94,45 @@ LibGoblin_ObjectInfo *
        i_id_now        = -1;
        
        // Search Non-used ObjectInfo ---
-       if( p_pginfo->i_now_objinfo < p_pginfo->i_max_objinfo ) {
-               for( i_cnt = 0; i_cnt < p_pginfo->i_max_objinfo; i_cnt++ )      {
+       if( p_pginfo->objinfo.i_used < p_pginfo->objinfo.i_maxid )      {
+               for( i_cnt = 0; i_cnt < p_pginfo->objinfo.i_maxid; i_cnt++ )    {
 
                        if( -1 == OBJINFO(p_pginfo, i_cnt)->i_id )      {
                                p_objinfo_now   = OBJINFO(p_pginfo, i_cnt);
                                i_id_now        = i_cnt;
-                               p_pginfo->i_now_objinfo++;
+                               p_pginfo->objinfo.i_used++;
                                break;
                        }
                }
        }
-       else if( p_pginfo->i_now_objinfo == p_pginfo->i_alloc_objinfo ) {
+       else if( p_pginfo->objinfo.i_used == p_pginfo->objinfo.i_alloced )      {
 
-               p_objinfo_base  = realloc( p_pginfo->p_objinfo,
+               p_objinfo_base  = realloc( p_pginfo->objinfo.p_objinfo,
                                                                        sizeof( LibGoblin_ObjectInfo ) *
-                                                                       (p_pginfo->i_alloc_objinfo + LIBGOBLIN_OBJINFO_UNITS) );
+                                                                       (p_pginfo->objinfo.i_alloced + LIBGOBLIN_OBJINFO_UNITS) );
                if( NULL == p_objinfo_base )    {
                        return NULL;
                }
 
-               for( i_cnt = p_pginfo->i_alloc_objinfo;
-                                       i_cnt < (p_pginfo->i_alloc_objinfo + LIBGOBLIN_OBJINFO_UNITS); i_cnt++ )        {
+               for( i_cnt = p_pginfo->objinfo.i_alloced;
+                                       i_cnt < (p_pginfo->objinfo.i_alloced + LIBGOBLIN_OBJINFO_UNITS); i_cnt++ )      {
                        ObjectInfo_ClearObjectInfo( p_objinfo_base + i_cnt );
                }
                
-               p_pginfo->p_objinfo                     = p_objinfo_base;
-               p_pginfo->i_alloc_objinfo       += LIBGOBLIN_OBJINFO_UNITS; 
+               p_pginfo->objinfo.p_objinfo     = p_objinfo_base;
+               p_pginfo->objinfo.i_alloced     += LIBGOBLIN_OBJINFO_UNITS; 
 
-               p_objinfo_now   = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
-               i_id_now        = p_pginfo->i_now_objinfo++;
+               p_objinfo_now   = OBJINFO(p_pginfo, p_pginfo->objinfo.i_used);
+               i_id_now        = p_pginfo->objinfo.i_used++;
 
-               if( i_id_now == p_pginfo->i_max_objinfo )
-                       { p_pginfo->i_max_objinfo++; }
+               if( i_id_now == p_pginfo->objinfo.i_maxid )
+                       { p_pginfo->objinfo.i_maxid++; }
        }
        else    {
-               p_objinfo_now   = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
-               i_id_now        = p_pginfo->i_now_objinfo++;
-
-               if( i_id_now == p_pginfo->i_max_objinfo )
-                       { p_pginfo->i_max_objinfo++; }
+               p_objinfo_now   = OBJINFO(p_pginfo, p_pginfo->objinfo.i_used);
+               i_id_now        = p_pginfo->objinfo.i_used++;
+               if( i_id_now == p_pginfo->objinfo.i_maxid )
+                       { p_pginfo->objinfo.i_maxid++; }
        }
 
        assert( NULL != p_objinfo_now );
@@ -147,6 +146,30 @@ LibGoblin_ObjectInfo *
 
 /*----------------------------------------------------------------------
 ----------------------------------------------------------------------*/
+int
+       ObjectInfo_CreateMasterObject(
+                       LibGoblin_ProgramInfo   *p_pginfo )
+{
+       LibGoblin_ObjectInfo    *p_objinfo;
+
+       if( NO_OBJ != p_pginfo->objinfo.i_topid )       { return 0x00; }
+
+       p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
+       if( NULL == p_objinfo ) {
+               return 0x01;
+       }
+
+       p_objinfo->ptr_address  = 0x0000000000000000;
+       p_objinfo->qw_size              = 0xffffffffffffffff;
+
+       p_pginfo->objinfo.i_topid       = p_objinfo->i_id;
+
+       return 0x00;
+}
+
+
+/*----------------------------------------------------------------------
+----------------------------------------------------------------------*/
 LIBGOBLIN_OBJINFO_EXTERN
 LibGoblin_ObjectInfo *
        ObjectInfo_InsetObject(
@@ -156,41 +179,41 @@ LibGoblin_ObjectInfo *
                        LibGoblin_ObjectInfo    *p_parent,
                        Byte                                    b_mode )
 {
-       LibGoblin_ObjectInfo    *p_objinfo;
+       int                                             i_result        = 0x00;
+       LibGoblin_ObjectInfo    *p_objinfo      = NULL;
        LibGoblin_ObjectInfo    *p_objnow;
        LibGoblin_ObjectInfo    *p_objprev;
        LibGoblin_ObjectInfo    *p_objover;
-       QWord                                   qw_range;
 
+       // Inset Master ObjectInfo when don't exist Master ObjectInfo.
+       if( NO_OBJ == p_pginfo->objinfo.i_topid )       {
+               i_result        = ObjectInfo_CreateMasterObject( p_pginfo );
+               if( 0x00 != i_result )  {
+                       goto    goto_ObjectInfo_InsetObject_post;
+               }
+       }
+
+       if( NULL == p_parent )
+               { p_parent      = OBJINFO( p_pginfo, p_pginfo->objinfo.i_topid ); }
+       assert( NULL != p_parent );
+       
        // Alloc ObjectInfo ---
        p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
        if( NULL == p_objinfo ) {
-               goto    goto_ObjectInfo_InsetObject_post;
-       }
-       ObjectInfo_ClearObjectInfo( p_objinfo );
-
-       // Ptn1: First ObjectInfo ---
-       //   ( ProgramInfo->i_top_objinfo == NO_OBJ )
-       //   & ( p_parent == NULL )
-       if( NO_OBJ == p_pginfo->i_top_objinfo ) {
-               assert( NULL == p_parent );
-               p_pginfo->i_top_objinfo = p_objinfo->i_id;
+               i_result        = -0x01;
                goto    goto_ObjectInfo_InsetObject_post;
        }
 
-       p_objnow        = OBJINFO( p_pginfo, p_pginfo->i_top_objinfo );
+       // Search ObjectInfo Inset Location. (Address Order)---
+       p_objnow        = OBJINFO( p_pginfo, p_pginfo->objinfo.i_topid );
        assert( NULL != p_objnow );
 
-       qw_range        = 0xffffffffffffffff;
-       p_objover       = NULL;
+       p_objover       = p_objnow;
        p_objprev       = NULL;
        do      {
                if(( p_objnow->ptr_address <= ptr_address )
                                && ( (ptr_address + qw_size) <= (p_objnow->ptr_address + p_objnow->qw_size) ))  {
-                       if( p_objnow->qw_size <= qw_range )     {
-                               p_objover       = p_objnow;
-                               qw_range        = p_objnow->qw_size;
-                       }
+                       if( p_objnow->qw_size <= p_objover->qw_size )   { p_objover     = p_objnow; }
                }
 
                if( ptr_address == p_objnow->ptr_address )      {
@@ -203,7 +226,7 @@ LibGoblin_ObjectInfo *
                                                ? OBJINFO( p_pginfo, p_objnow->addrlink.i_next_id ) : NULL );
        }while( NULL != p_objnow );
 
-       // Link Address Order ---
+       // Set Address Order Link Info.---
        p_objinfo->addrlink.i_next_id   = ((NULL != p_objnow) ? p_objnow->i_id : NO_OBJ);
        p_objinfo->addrlink.i_prev_id   = ((NULL != p_objprev) ? p_objprev->i_id : NO_OBJ);
 
@@ -211,39 +234,35 @@ LibGoblin_ObjectInfo *
        if( NULL != p_objnow )  { p_objnow->addrlink.i_prev_id  = p_objinfo->i_id; }
 
        // Link Family Order ---
-       if( NULL == p_parent )  {
-               if( 0x00 != b_mode )    {
-                       if( NULL != p_objover ) { p_parent      = p_objover; }
-               }
+       if( 0x00 != b_mode )    {
+               if( NULL != p_objover ) { p_parent      = p_objover; }
        }
 
-       if( NULL != p_parent )  {
-               if( NO_OBJ == p_parent->grplink.i_child_topid ) {
-                       p_parent->grplink.i_child_topid = p_objinfo->i_id;
-                       p_objinfo->grplink.i_parent_id  = p_parent->i_id;
+       if( NO_OBJ == p_parent->grplink.i_child_topid ) {
+               p_parent->grplink.i_child_topid = p_objinfo->i_id;
+               p_objinfo->grplink.i_parent_id  = p_parent->i_id;
+               goto    goto_ObjectInfo_InsetObject_post;
+       }
+
+       p_objnow        = ((NO_OBJ != p_parent->grplink.i_child_topid)
+                                                       ? OBJINFO( p_pginfo, p_parent->grplink.i_child_topid ) : NULL );
+       p_objprev       = NULL;
+       do      {
+               if( ptr_address == p_objnow->ptr_address )      {
+                       if( qw_size > p_objnow->qw_size )       { break; }
                }
-               else    {
-                       p_objnow        = ((NO_OBJ != p_parent->grplink.i_child_topid)
-                                                               ? OBJINFO( p_pginfo, p_parent->grplink.i_child_topid ) : NULL );
-                       p_objprev       = NULL;
-                       do      {
-                               if( ptr_address == p_objnow->ptr_address )      {
-                                       if( qw_size > p_objnow->qw_size )       { break; }
-                               }
-                               else if( ptr_address < p_objnow->ptr_address )  { break; }
+               else if( ptr_address < p_objnow->ptr_address )  { break; }
                
-                               p_objprev       = p_objnow;
-                               p_objnow        = ((NO_OBJ != p_objnow->grplink.i_next_id)
+               p_objprev       = p_objnow;
+               p_objnow        = ((NO_OBJ != p_objnow->grplink.i_next_id)
                                                                ? OBJINFO( p_pginfo, p_objnow->grplink.i_next_id ) : NULL );
-                       }while( NULL != p_objnow );
+       }while( NULL != p_objnow );
 
-                       p_objinfo->grplink.i_next_id    = ((NULL != p_objnow) ? p_objnow->i_id : NO_OBJ);
-                       p_objinfo->grplink.i_prev_id    = ((NULL != p_objprev) ? p_objprev->i_id : NO_OBJ);
+       p_objinfo->grplink.i_next_id    = ((NULL != p_objnow) ? p_objnow->i_id : NO_OBJ);
+       p_objinfo->grplink.i_prev_id    = ((NULL != p_objprev) ? p_objprev->i_id : NO_OBJ);
 
-                       if( NULL != p_objprev ) { p_objprev->grplink.i_next_id  = p_objinfo->i_id; }
-                       if( NULL != p_objnow )  { p_objnow->grplink.i_prev_id   = p_objinfo->i_id; }
-               }
-       }
+       if( NULL != p_objprev ) { p_objprev->grplink.i_next_id  = p_objinfo->i_id; }
+       if( NULL != p_objnow )  { p_objnow->grplink.i_prev_id   = p_objinfo->i_id; }
 
 goto_ObjectInfo_InsetObject_post:
        return p_objinfo;
@@ -290,11 +309,11 @@ int
        i_objid = p_objinfo->i_id;
        ObjectInfo_ClearObjectInfo( p_objinfo );
 
-       if( p_pginfo->i_max_objinfo == (i_objid + 1) )
-               { p_pginfo->i_max_objinfo--; }
-       p_pginfo->i_now_objinfo--;
-       if( 0 == p_pginfo->i_now_objinfo )
-               { p_pginfo->i_max_objinfo       = 0; }
+       if( p_pginfo->objinfo.i_maxid == (i_objid + 1) )
+               { p_pginfo->objinfo.i_maxid--; }
+       p_pginfo->objinfo.i_used--;
+       if( 0 == p_pginfo->objinfo.i_used )
+               { p_pginfo->objinfo.i_maxid     = 0; }
        
        return 0x00;
 }
@@ -316,6 +335,11 @@ int
        LibGoblin_ObjectInfo    *p_child;
        LibGoblin_ObjectInfo    *p_objnow;
 
+       // Check p_objinfo is Master ObjectInfo?
+       if(( 0 == p_objinfo->i_id ) && ( 1 < p_pginfo->objinfo.i_used ))        {
+               return -0x01;
+       }
+
        // UnLink Group Order Link ---
        if( 0x00 != b_mode )    {
                while( NO_OBJ != p_objinfo->grplink.i_child_topid )     {
@@ -360,6 +384,15 @@ int
        if( NULL != p_prev )    { p_prev->addrlink.i_next_id    = p_objinfo->addrlink.i_next_id; }
        if( NULL != p_next )    { p_prev->addrlink.i_prev_id    = p_objinfo->addrlink.i_prev_id; }
 
+       if( p_pginfo->objinfo.i_topid == p_objinfo->i_id )      {
+               if( NO_OBJ != p_objinfo->addrlink.i_next_id )   {
+                       p_next  = OBJINFO(p_pginfo, p_objinfo->addrlink.i_next_id);
+                       p_pginfo->objinfo.i_topid       = p_next->i_id;
+               }
+               else
+                       { p_pginfo->objinfo.i_topid     = NO_OBJ; }
+       }
+
        // Free ObjectInfo ---
        ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
 
@@ -381,7 +414,7 @@ int
 
        assert( NULL != p_pginfo );
 
-       if( 0 != p_pginfo->i_max_objinfo )      {
+       if( 0 != p_pginfo->objinfo.i_maxid )    {
                return NO_OBJ;
        }
 
@@ -390,8 +423,8 @@ int
        else
                { i_items = (( i_init_objnums / LIBGOBLIN_OBJINFO_UNITS ) + 2) * LIBGOBLIN_OBJINFO_UNITS; }
 
-       p_pginfo->p_objinfo     = malloc( sizeof( LibGoblin_ObjectInfo ) * i_items );
-       if( NULL == p_pginfo->p_objinfo )       {
+       p_pginfo->objinfo.p_objinfo     = malloc( sizeof( LibGoblin_ObjectInfo ) * i_items );
+       if( NULL == p_pginfo->objinfo.p_objinfo )       {
                return -0x02;
        }
 
@@ -400,9 +433,10 @@ int
                ObjectInfo_ClearObjectInfo( p_objinfo );
        }
 
-       p_pginfo->i_alloc_objinfo       = LIBGOBLIN_OBJINFO_UNITS;
-       p_pginfo->i_max_objinfo         = 0;
-       p_pginfo->i_now_objinfo         = 0;
+       p_pginfo->objinfo.i_alloced     = i_items;
+       p_pginfo->objinfo.i_maxid       = 0;
+       p_pginfo->objinfo.i_used        = 0;
+       p_pginfo->objinfo.i_topid       = NO_OBJ;
 
        return 0x00;
 }
@@ -419,19 +453,20 @@ int
 
        assert( NULL != p_pginfo );
 
-       if( 0 < p_pginfo->i_now_objinfo )       {
-               for( ; p_pginfo->i_now_objinfo >= 0; p_pginfo->i_now_objinfo-- )        {
-                       p_objinfo       = OBJINFO(p_pginfo, p_pginfo->i_now_objinfo);
+       if( 0 < p_pginfo->objinfo.i_used )      {
+               for( ; p_pginfo->objinfo.i_used >= 0; p_pginfo->objinfo.i_used-- )      {
+                       p_objinfo       = OBJINFO(p_pginfo, p_pginfo->objinfo.i_used);
                        ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
                }
        }
        
-       free( p_pginfo->p_objinfo );
+       free( p_pginfo->objinfo.p_objinfo );
        
-       p_pginfo->p_objinfo                     = NULL;
-       p_pginfo->i_alloc_objinfo       = 0;
-       p_pginfo->i_max_objinfo         = 0;
-       p_pginfo->i_now_objinfo         = 0;
+       p_pginfo->objinfo.p_objinfo             = NULL;
+       p_pginfo->objinfo.i_alloced             = 0;
+       p_pginfo->objinfo.i_maxid               = 0;
+       p_pginfo->objinfo.i_used                = 0;
+       p_pginfo->objinfo.i_topid               = NO_OBJ;
 
        return 0x00;
 }
index bc500f6..15b7d2a 100644 (file)
@@ -60,7 +60,7 @@ Comment:
 #endif
 
 #define        NO_OBJ                  -0x01
-#define        OBJINFO(p,n)    ((LibGoblin_ObjectInfo *)((p)->p_objinfo + (n)))
+#define        OBJINFO(p,n)    ((LibGoblin_ObjectInfo *)((p)->objinfo.p_objinfo + (n)))
 
 LIBGOBLIN_OBJINFO_EXTERN
        LibGoblin_ObjectInfo *ObjectInfo_GetObjectInfo( LibGoblin_ProgramInfo *p_pginfo, int i_bid );
index 71a3203..c70f9f7 100644 (file)
@@ -230,14 +230,17 @@ typedef   struct  {
        //DWord         dw_max_addrinfo;
 
        // Object Table & Address Table ---
-       LibGoblin_ObjectInfo    *p_objinfo;
-       int                                             i_alloc_objinfo;        // Alloced ObjectInfo
-       int                                             i_max_objinfo;          // ObjectInfo Max ID
-       int                                             i_now_objinfo;          // ObjectInfo Items
-       int                                             i_top_objinfo;          // Top-Ptr ObjectInfo
+       struct  {
+               LibGoblin_ObjectInfo    *p_objinfo;
+               int                                             i_alloced;      // Alloced ObjectInfo
+               int                                             i_maxid;        // ObjectInfo Max ID
+               int                                             i_used;         // ObjectInfo Items
+               int                                             i_topid;        // Top-Ptr ObjectInfo
+       } objinfo;
        LibGoblin_AddressInfo   *p_addrinfo;
        
        
+       
 }      LibGoblin_ProgramInfo;
 
 
index 69d344e..f8a6fd7 100644 (file)
@@ -41,13 +41,64 @@ Comment:
 
 /* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
 /*--------------------------------------------------------------------*/
+void Test_ObjectInfo_InsetDelete_test00_001(
+               LibGoblin_ProgramInfo   *p_pginfo )
+{
+       LibGoblin_ObjectInfo    *p_objinfo;
+
+       p_objinfo       = ObjectInfo_InsetObject( p_pginfo, 0x00000000, 0x00100000, NULL, 0x00 );
+       CU_ASSERT( NULL != p_objinfo );
+       CU_ASSERT( 1 == p_objinfo->i_id );
+       CU_ASSERT( 0 == p_pginfo->objinfo.i_topid );
+
+       ObjectInfo_DeleteObjectInfo( p_pginfo, p_objinfo, 0x00 );
+       CU_ASSERT( 0 == p_pginfo->objinfo.i_topid );
+
+       return;
+}
+
+/*--------------------------------------------------------------------*/
+void Test_ObjectInfo_InsetDelete_test00( void )
+{
+       int             i_result;
+       LibGoblin_ProgramInfo   *p_pginfo;
+
+       // Init ----
+       i_result        = ProgInfo_Init();
+       CU_ASSERT( 0x00 == i_result );
+
+       p_pginfo        = ProgInfo_AllocProgInfo();
+       CU_ASSERT( NULL != p_pginfo );
+
+       i_result        = ObjectInfo_Init( p_pginfo, 0 );
+       CU_ASSERT( 0x00 == i_result );
+
+       // Alloc Test ---
+       Test_ObjectInfo_InsetDelete_test00_001( p_pginfo );
+
+       // Term ---
+       i_result        = ObjectInfo_Term( p_pginfo );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = ProgInfo_FreeProgInfo( p_pginfo );
+       CU_ASSERT( 0x00 == i_result );
+
+       i_result        = ProgInfo_Term();
+       CU_ASSERT( 0x00 == i_result );
+
+       return;
+}
+
+
+/* BinaryInfo_AllocBinInfo() & FreeBinInfo() **************************/
+/*--------------------------------------------------------------------*/
 void Test_ObjectInfo_AllocFree_test00_001( void )
 {
        int             i_result;
        int             i_cnt;
        int             i_max;
+       int             i_used;
        LibGoblin_ProgramInfo   *p_pginfo;
-       LibGoblin_BinaryInfo    *p_binfo;
        LibGoblin_ObjectInfo    *p_objinfo;
 
        // Init ----
@@ -57,38 +108,58 @@ void Test_ObjectInfo_AllocFree_test00_001( void )
        p_pginfo        = ProgInfo_AllocProgInfo();
        CU_ASSERT( NULL != p_pginfo );
 
+       i_max   = (LIBGOBLIN_OBJINFO_UNITS * LIBGOBLIN_OBJINFO_INITALLOCRATE);
+
        i_result        = ObjectInfo_Init( p_pginfo, 0 );
        CU_ASSERT( 0x00 == i_result );
+       CU_ASSERT( i_max == p_pginfo->objinfo.i_alloced );
 
        // Alloc Test ---
-       i_max   = (LIBGOBLIN_OBJINFO_UNITS * LIBGOBLIN_OBJINFO_INITALLOCRATE) + 1;
        for( i_cnt = 0; i_cnt <= i_max; i_cnt++ )       {
                p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
                CU_ASSERT( NULL != p_objinfo );
-               CU_ASSERT( p_objinfo->i_id == i_cnt );
+               CU_ASSERT(  i_cnt      == p_objinfo->i_id );
+               CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_maxid );
+               CU_ASSERT( (i_cnt + 1) == p_pginfo->objinfo.i_used );
        }
+       CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
 
+       i_used  = i_max + 1;
        for( i_cnt = (i_max / 2); i_cnt >= 0; i_cnt-- ) {
                p_objinfo       = ObjectInfo_GetObjectInfo( p_pginfo, i_cnt );
                CU_ASSERT( NULL != p_objinfo );
+               CU_ASSERT(  i_cnt      == p_objinfo->i_id );
 
                i_result        = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
                CU_ASSERT( 0x00 == i_result );
+               i_used--;
+               CU_ASSERT( (i_max + 1) == p_pginfo->objinfo.i_maxid );
+               CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
        }
+       CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
 
        for( i_cnt = 0; i_cnt <= (i_max/2); i_cnt++ )   {
                p_objinfo       = ObjectInfo_AllocObjectInfo( p_pginfo );
                CU_ASSERT( NULL != p_objinfo );
                CU_ASSERT( p_objinfo->i_id == i_cnt );
+               CU_ASSERT( (i_max + 1) == p_pginfo->objinfo.i_maxid );
+               i_used++;
+               CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
        }
+       CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
 
        for( i_cnt = i_max; i_cnt >= 0; i_cnt-- )       {
                p_objinfo       = ObjectInfo_GetObjectInfo( p_pginfo, i_cnt );
                CU_ASSERT( NULL != p_objinfo );
+               CU_ASSERT(  i_cnt      == p_objinfo->i_id );
 
                i_result        = ObjectInfo_FreeObjectInfo( p_pginfo, p_objinfo );
                CU_ASSERT( 0x00 == i_result );
+               i_used--;
+               CU_ASSERT( i_used == p_pginfo->objinfo.i_maxid );
+               CU_ASSERT( i_used == p_pginfo->objinfo.i_used );
        }
+       CU_ASSERT( (i_max + LIBGOBLIN_OBJINFO_UNITS) == p_pginfo->objinfo.i_alloced );
 
        // Term ---
        i_result        = ObjectInfo_Term( p_pginfo );
@@ -100,60 +171,6 @@ void Test_ObjectInfo_AllocFree_test00_001( void )
        i_result        = ProgInfo_Term();
        CU_ASSERT( 0x00 == i_result );
 
-
-       return;
-}
-
-
-/*--------------------------------------------------------------------*/
-void Test_ObjectInfo_AllocFree_test00_002( void )
-{
-/*
-       int             i_result;
-       int             i_cnt;
-       int             i_parent_bid;
-       char    str_fname[50];
-       LibGoblin_ProgramInfo   *p_pginfo;
-       LibGoblin_BinaryInfo    *p_binfo;
-
-       i_result        = ProgInfo_Init();
-       CU_ASSERT( 0x00 == i_result );
-
-       i_result        = BinaryInfo_Init();
-       CU_ASSERT( 0x00 == i_result );
-
-       p_pginfo        = ProgInfo_AllocProgInfo();
-       CU_ASSERT( NULL != p_pginfo );
-
-       p_binfo = BinaryInfo_AllocBinInfo( p_pginfo, "testprog", -1 );
-       CU_ASSERT( NULL != p_binfo );
-       CU_ASSERT( 0 == p_binfo->i_id );
-       i_parent_bid    = p_binfo->i_id;
-
-       for( i_cnt = 1; i_cnt < (8 * 8); i_cnt++ )      {
-               sprintf( str_fname, "file%02d", i_cnt );
-               p_binfo = BinaryInfo_AllocBinInfo( p_pginfo, str_fname, i_parent_bid );
-               CU_ASSERT( NULL != p_binfo );
-               CU_ASSERT( i_cnt == p_binfo->i_id );
-
-               //printf("  debug: %p (%02d)\n", p_binfo, p_binfo->i_id );
-       }
-
-       for( i_cnt = (8 * 8); i_cnt > 0; i_cnt-- )      {
-               p_binfo         = BinaryInfo_GetBinInfo( i_cnt - 1 ); 
-               i_result        = BinaryInfo_FreeBinInfo( p_binfo );
-               CU_ASSERT( 0x00 == i_result );
-       }
-
-       i_result        = ProgInfo_FreeProgInfo( p_pginfo );
-       CU_ASSERT( 0x00 == i_result );
-
-       i_result        = BinaryInfo_Term();
-       CU_ASSERT( 0x00 == i_result );
-
-       i_result        = ProgInfo_Term();
-       CU_ASSERT( 0x00 == i_result );
-*/
        return;
 }
 
@@ -164,7 +181,6 @@ void Test_ObjectInfo_InitTerm_test00_001( void )
 {
        int             i_result;
        LibGoblin_ProgramInfo   *p_pginfo;
-       LibGoblin_BinaryInfo    *p_binfo;
 
        i_result        = ProgInfo_Init();
        CU_ASSERT( 0x00 == i_result );
@@ -202,6 +218,8 @@ int
                                                                 Test_ObjectInfo_InitTerm_test00_001 );
        CU_add_test( pt_goblin, "ObjectInfo_AllocFree_test00_001",
                                                                 Test_ObjectInfo_AllocFree_test00_001 );
+       CU_add_test( pt_goblin, "ObjectInfo_InsetDelete_test00",
+                                                                Test_ObjectInfo_InsetDelete_test00 );
 
        return 0x00;
 }