]> git.donarmstrong.com Git - biopieces.git/commitdiff
unit test of mem.c done
authormartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Thu, 14 Aug 2008 06:03:44 +0000 (06:03 +0000)
committermartinahansen <martinahansen@74ccb610-7750-0410-82ae-013aeee3265d>
Thu, 14 Aug 2008 06:03:44 +0000 (06:03 +0000)
git-svn-id: http://biopieces.googlecode.com/svn/trunk@207 74ccb610-7750-0410-82ae-013aeee3265d

12 files changed:
code_c/Maasha/src/inc/common.h
code_c/Maasha/src/inc/mem.h
code_c/Maasha/src/lib/common.c
code_c/Maasha/src/lib/fasta.c
code_c/Maasha/src/lib/filesys.c
code_c/Maasha/src/lib/hash.c
code_c/Maasha/src/lib/list.c
code_c/Maasha/src/lib/mem.c
code_c/Maasha/src/lib/strings.c
code_c/Maasha/src/lib/ucsc.c
code_c/Maasha/src/repeat-O-matic.c
code_c/Maasha/src/test/test_mem.c

index 320f0a99acafcd89bc676aae87b1e465399d0355..0401dd10bb26e5c3febc9a21661f1840be4f7de0 100644 (file)
@@ -67,12 +67,6 @@ bool binary_search_array( int *array, int array_size, int val );
 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MISC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
 
 
-/* Split a given line and a delimiter return the split result as a list. */
-void  split( char *string, char delimit, struct list **fields );
-    
-/* Mockup version of Perl substr. */
-char *substr( char *string, int offset, int len );
-
 /* Return a binary number as a string of 1's and 0's. */
 char *bits2string( uint bin );
 
index 08c976d8be9d71646269a8fe694ad5ee553c0db1..99c22ef6ef007e120203fa5dfcc0aea56dcf4629 100644 (file)
@@ -1,12 +1,3 @@
-/* Macro for dynamic allocation of memory. */
-#define MEM_GET( pt ) ( pt = mem_get( sizeof( *pt ) ) ) 
-
-/* Macro for resetting a pointer to all \0's. */
-#define MEM_ZERO( pt ) ( memset( pt, '\0', sizeof( *pt ) ) )
-
-/* Macro for cloning a structure in memroy. */
-#define MEM_CLONE( pt ) mem_clone( pt, sizeof( ( pt )[ 0 ] ) )
-
 /* Get a pointer with a given size of allocated memory. */
 void *mem_get( size_t size );
 
@@ -14,16 +5,13 @@ void *mem_get( size_t size );
 void *mem_get_zero( size_t size );
 
 /* Resize allocated memory for a given pointer. */
-void *mem_resize( voidpt, size_t size );
+void *mem_resize( void *pt, size_t size );
 
 /* Resize allocated memory for a given pointer with extra memory zero'ed. */    
-void *mem_resize_zero( voidpt, size_t old_size, size_t new_size );
+void *mem_resize_zero( void *pt, size_t old_size, size_t new_size );
 
 /* Clone a structure in memory and return a pointer to the clone. */
 void *mem_clone( void *old_pt, size_t size );
 
 /* Free memory from a given pointer. */
-void  mem_free( void *pt );
-
-/* Zero and then free memory from a given pointer. */
-void  mem_free_zero( void *pt );
+void  mem_free( void **ppt );
index 05e7793f89549af9ab7cb900ef84c78ccbe17e89..fb46e1231752d9377887f7b61ef9f18a213e3a59 100644 (file)
@@ -64,92 +64,6 @@ bool binary_search_array( int *array, int array_size, int val )
 /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> MISC <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
 
 
-void split( char *string, char delimit, struct list **fields )
-{
-    /* Martin A. Hansen, June 2008 */
-    
-    /* Split a given line and a delimiter return the split result as a list. */
-
-    int i;
-    int j;
-
-    char field[ 256 ] = "";
-    char *field_copy; 
-
-    j = 0;
-
-    for ( i = 0; string[ i ]; i++ )
-    {
-        if ( string[ i ] != delimit )
-        {
-            field[ j ] = string[ i ];
-
-            j++;
-        }
-        else
-        {
-            field_copy = mem_clone( field, j + 1 );
-
-            list_add( fields, field_copy );
-
-            MEM_ZERO( field );
-
-            j = 0;
-        }
-    }
-
-    field_copy = mem_clone( field, j + 1 );
-
-    list_add( fields, field_copy );
-
-    list_reverse( fields );
-}
-
-
-char *substr( char *string, int offset, int len )
-{
-    /* Martin A. Hansen, May 2008 */
-
-    /* Create equavalent of Perls substr command. */
-    /* Currently implemented without optional length */
-    /* and the replace feature. */
-
-    int  string_len;
-    int  i;
-    int  j;
-    char *substr;
-
-    string_len = strlen( string );
-
-    if ( offset < 0 ) {
-        die( "substr offset < 0." );
-    } else if ( len < 0 ) {
-        die( "substr length < 0." );
-    } else if ( offset > string_len ) {
-        die( "substr offset outside string." );
-    } else if ( offset + len > string_len ) {
-        die( "substr offset + len outside string." );
-    }
-
-    substr = mem_get( len + 1 );
-
-    i = offset;
-    j = 0;
-
-    while ( i < offset + len )
-    {
-        substr[ j ] = string[ i ];
-
-        i++;
-        j++;
-    }
-
-    substr[ j ] = '\0';
-
-    return substr;
-}
-
-
 char *bits2string( uint bin )
 {
     /* Martin A. Hansen, June 2008 */
index 21fc66f682e7fae97477c09e3689850adbcfb499..b4e929ff7435802f40ad31cd9842890b7def00cb 100644 (file)
@@ -41,7 +41,7 @@ bool fasta_get_entry( FILE *fp, struct seq_entry *entry )
     char   *seq_name = NULL;
     char   *seq      = NULL;
 
-    MEM_GET( entry );
+    entry = mem_get( sizeof( entry ) );
 
     offset = ftell( fp );
 
@@ -148,7 +148,7 @@ void fasta_get_entries( FILE *fp, struct list **entries )
 
     while ( 1 )
     {
-        MEM_GET( entry );
+        entry = mem_get( sizeof( entry ) );
 
         if ( ! fasta_get_entry( fp, entry ) ) {
             break;
@@ -181,9 +181,9 @@ void fasta_free_entry( struct seq_entry *entry )
 
     /* Deallocates memory from a seq_entry. */
 
-    mem_free( entry->seq_name );
-    mem_free( entry->seq );
-    mem_free( entry );
+    mem_free( ( void * ) &entry->seq_name );
+    mem_free( ( void * ) &entry->seq );
+    mem_free( ( void * ) &entry );
 }
 
 
index d3bf3db1550ef4eae055f3808aae326c131ffadf..9a338e508e1518d8a6ddc8b9387937a46e4ab43a 100644 (file)
@@ -162,7 +162,7 @@ struct file_buffer *read_open_buffer( char *file )
     char               *str;
     bool                eof;
 
-    MEM_GET( buffer );
+    buffer = mem_get( sizeof( buffer ) );
 
     fp  = read_open( file );
 
@@ -301,7 +301,7 @@ void buffer_resize( struct file_buffer *buffer )
 
     buffer->end = new_end;
 
-    mem_free( str );
+    mem_free( ( void * ) &str );
 }
 
 
@@ -313,8 +313,8 @@ void buffer_destroy( struct file_buffer *buffer )
 
     close_stream( buffer->fp );
 
-    mem_free( buffer->str );
-    mem_free( buffer );
+    mem_free( ( void * ) &buffer->str );
+    mem_free( ( void * ) &buffer );
 }
 
 
index ee25d12c527e618b4d0b66538e74555e57c82aa9..51c7129e84eb6b0f9cd3199b91801e09364c41a9 100644 (file)
@@ -13,7 +13,7 @@ struct hash *hash_new( size_t size )
     struct hash *new_hash;
     int         table_size;
 
-    MEM_GET( new_hash );
+    new_hash = mem_get( sizeof( new_hash ) );
 
     table_size = 1 << size;   /* table_size = ( 2 ** size ) */
 
@@ -43,7 +43,7 @@ void hash_add( struct hash *myhash, char *key, void *val )
     }
     else
     {
-        MEM_GET( new_elem );
+        new_elem = mem_get( sizeof( new_elem ) );
 
         hash_index = ( hash_key( key ) & myhash->mask );
 
@@ -142,14 +142,14 @@ void hash_destroy( struct hash *myhash )
     {
         for ( bucket = myhash->table[ i ]; bucket != NULL; bucket = bucket->next )
         {
-            mem_free( bucket->key );
+            mem_free( ( void * ) &bucket->key );
 //            mem_free( bucket->val );
-            mem_free( bucket );
+            mem_free( ( void * ) &bucket );
         }
     }
 
-    mem_free( myhash->table );
-    mem_free( myhash );
+    mem_free( ( void * ) &myhash->table );
+    mem_free( ( void * ) &myhash );
 }
 
 
index 4b08c51d4ac56bd4d7b05793bf51eddd969c4ea0..9105d66c6d81eb384454717b9233df95f52f5288 100644 (file)
@@ -11,7 +11,7 @@ void list_add( struct list **list_ppt, void *val )
 
     struct list *elem = NULL;
 
-    MEM_GET( elem );
+    elem = mem_get( sizeof( elem ) );
 
     elem->val     = val;
     elem->next    = *( list_ppt );
@@ -27,7 +27,7 @@ void list_add_int( struct list_int **list_ppt, int val )
 
     struct list_int *elem = NULL;
 
-    MEM_GET( elem );
+    elem = mem_get( sizeof( elem ) );
 
     elem->val     = val;
 //    elem->next    = *( list_ppt );
@@ -68,7 +68,7 @@ bool list_exists( struct list *list_pt, char *string )
 
     struct list *elem;
 
-    MEM_GET( elem );
+    elem = mem_get( sizeof( elem ) );
 
     for ( elem = list_pt; elem != NULL; elem = elem->next )
     {
@@ -89,7 +89,7 @@ bool list_exists_int( struct list_int *list_pt, int val )
 
     struct list_int *elem;
 
-    MEM_GET( elem );
+    elem = mem_get( sizeof( elem ) );
 
 //    for ( elem = list_pt; elem != NULL; elem = elem->next )
     {
@@ -116,7 +116,7 @@ void list_free( void *list_pt )
     {
         elem = next;
         next = elem->next;
-        mem_free( elem );
+        mem_free( ( void * ) &elem );
     }
 
     ppt = NULL;
index 72c02803a74688a1765430ce4345873d71f8fa62..5bee88b4e3164d9c3d8f1b3d81e1e504d2426aec 100644 (file)
@@ -16,7 +16,7 @@ void *mem_get( size_t size )
 
     if ( ( pt = malloc( size ) ) == NULL )
     {
-        fprintf( stderr, "ERROR: Could not allocate %ld byte(s): %s\n", size, strerror( errno ) );
+        fprintf( stderr, "ERROR: Could not allocate %zu byte(s): %s\n", size, strerror( errno ) );
         abort();
     } 
 
@@ -48,14 +48,18 @@ void *mem_resize( void *pt, size_t size )
 {
     /* Martin A. Hansen, May 2008 */
 
+    /* Unit test done.*/
+
     /* Resize an allocated chunk of memory for a given pointer and new size. */
 
     void *pt_new;
 
-    if ( size == 0 ) {
-        die( "could not re-allocate 0 bytes of memory." );
-    } else if ( ( pt_new = realloc( pt, size ) ) == NULL ) {
-        die( "could not re-allocate memory." );
+    assert( size > 0 );
+
+    if ( ( pt_new = realloc( pt, size ) ) == NULL )
+    {
+        fprintf( stderr, "ERROR: Could not re-allocate %zu byte(s)\n", size );
+        abort();
     }
 
     return pt_new;
@@ -66,6 +70,8 @@ void *mem_resize_zero( void *pt, size_t old_size, size_t new_size )
 {
     /* Martin A. Hansen, May 2008 */
 
+    /* Unit test done.*/
+
     /* Resize an allocated chunk of memory for a given pointer and zero any extra memory. */
     
     void *pt_new;
@@ -84,10 +90,14 @@ void *mem_clone( void *old_pt, size_t size )
 {
     /* Martin A. Hansen, June 2008 */
 
+    /* Unit test done.*/
+
     /* Clone a structure in memory and return a pointer to the clone. */
 
     void *new_pt;
     
+    assert( size > 0 );
+
     new_pt = mem_get( size );
 
     memcpy( new_pt, old_pt, size );
@@ -96,34 +106,15 @@ void *mem_clone( void *old_pt, size_t size )
 }
 
 
-void mem_free( void *pt )
+void mem_free( void **ppt )
 {
     /* Martin A. Hansen, May 2008 */
 
-    /* Free memory from a given pointer. */
-
-    if ( pt != NULL )
-    {
-        free( pt );
-
-        pt = NULL;
-    }
-}
-
-
-void mem_free_zero( void *pt )
-{
-    /* Martin A. Hansen, July 2008 */
+    /* Unit test done.*/
 
-    /* Zero and then free memory from a given pointer. */
+    /* Free memory from a given pointer. */
 
-    if ( pt != NULL )
-    {
-        MEM_ZERO( pt );
-        free( pt );
+    free( *ppt );
 
-        pt = NULL;
-    }
+    *ppt = NULL;
 }
-
-
index d7e5bfd64d55182dc812266a9927d44ff47cf94a..a75298e10422a8c2440577dfba51cd64ab0932a3 100644 (file)
@@ -33,7 +33,7 @@ size_t chomp( char *string )
     /* Removes the last char from a string if the char is a newline. */
     /* Returns the length of the chomped string or -1 is no newline was found. */
 
-    int len;
+    size_t len;
 
     assert( string != NULL );
     assert( string[ 0 ] != '\0' );
index c36bff08efe111e07a2ddeb97c65646e7f33305b..2d831e04b25b93782f250d2c8e30b0f64944572a 100644 (file)
@@ -11,7 +11,7 @@ void bed_get_entry( FILE *fp, struct bed_entry3 *bed, int cols )
     char bed_buffer[ BED_BUFFER ];
     struct bed_entry12 *bed12 = NULL;
 
-    MEM_GET( bed12 );
+    bed12 = mem_get( sizeof( bed12 ) );
 
     if ( ( fgets( bed_buffer, sizeof( bed_buffer ), fp ) != NULL ) )
     {
index 6e7908a13a4c2a13ab88d611608bf83c7b2381b6..3c6f3406799381014e7a5c420a8a1dc2851d19d5 100644 (file)
@@ -68,7 +68,7 @@ uint *oligo_count( char *path )
 
     mask  = mask_create( OLIGO_SIZE );
 
-    MEM_GET( entry );
+    entry = mem_get( sizeof( entry ) );
 
     fp = read_open( path );
 
@@ -163,11 +163,12 @@ void oligo_count_output( char *path, uint *array )
     uint             *block;
     uint              block_pos;
     uint              block_beg;
+    uint              block_size;
     uint              chr_pos;
 
     mask = mask_create( OLIGO_SIZE );
 
-    MEM_GET( entry );
+    entry = mem_get( sizeof( entry ) );
 
     fp = read_open( path );
 
@@ -175,10 +176,11 @@ void oligo_count_output( char *path, uint *array )
     {
         fprintf( stderr, "Writing results for: %s ... ", entry->seq_name );
 
-        bin       = 0;
-        j         = 0;
-        block_pos = 0;
-        block     = mem_get_zero( sizeof( uint ) * ( entry->seq_len + OLIGO_SIZE ) );
+        bin        = 0;
+        j          = 0;
+        block_pos  = 0;
+        block_size = sizeof( uint ) * ( entry->seq_len + OLIGO_SIZE );
+        block      = mem_get_zero( block_size );
 
         for ( i = 0; entry->seq[ i ]; i++ )
         {
@@ -203,7 +205,7 @@ void oligo_count_output( char *path, uint *array )
 
                     if ( block_pos == 0 )
                     {
-                        MEM_ZERO( block );
+                        memset( block, '\0', block_size );
 
                         block_beg = chr_pos;
 
@@ -234,7 +236,7 @@ void oligo_count_output( char *path, uint *array )
         {
             fixedstep_put_entry( entry->seq_name, block_beg, 1, block, block_pos );
 
-            mem_free( block );
+            mem_free( ( void * ) &block );
         }
 
         fprintf( stderr, "done.\n" );
index 29ef64d9b4c991c1a00434a312247dde0ce8ebfb..faa6a9108133a20ed6ccffce1c577c3e5bcefc55 100644 (file)
@@ -3,6 +3,9 @@
 
 static void test_mem_get();
 static void test_mem_get_zero();
+static void test_mem_resize();
+static void test_mem_resize_zero();
+static void test_mem_clone();
 static void test_mem_free();
 
 
@@ -12,6 +15,9 @@ int main()
 
     test_mem_get();
     test_mem_get_zero();
+    test_mem_resize();
+    test_mem_resize_zero();
+    test_mem_clone();
     test_mem_free();
 
     fprintf( stderr, "Done\n\n" );
@@ -27,7 +33,7 @@ void test_mem_get()
     size_t  len = 1000000000;
     char   *pt  = mem_get( len );
 
-    mem_free( pt );
+    mem_free( ( void * ) &pt );
 
     fprintf( stderr, "OK\n" );
 }
@@ -45,7 +51,85 @@ void test_mem_get_zero()
         assert( pt[ i ] == '\0' );
     }
 
-    mem_free( pt );
+    mem_free( ( void * ) &pt );
+
+    fprintf( stderr, "OK\n" );
+}
+
+
+void test_mem_resize()
+{
+    fprintf( stderr, "   Testing mem_resize ... " );
+
+    char *pt0 = "foo";
+    char *pt1 = NULL;
+
+    pt1 = mem_get( 3 + 1 );
+
+    memcpy( pt1, pt0, 3 );
+
+    pt1 = mem_resize( pt1, 1 );
+
+    mem_free( ( void * ) &pt1 );
+
+    fprintf( stderr, "OK\n" );
+}
+
+
+void test_mem_resize_zero()
+{
+    fprintf( stderr, "   Testing mem_resize_zero ... " );
+
+    size_t i;
+    size_t size_before = 10;
+    size_t size_after  = 100000;
+
+    char *pt = NULL;
+
+    pt = mem_get( size_before );
+
+    memset( pt, '1', size_before );
+
+    assert( strlen( pt ) == size_before );
+
+    pt = mem_resize_zero( pt, size_before, size_after );
+
+    assert( strlen( pt ) == size_before );
+
+    for ( i = size_before; i <= size_after; i++ ) {
+        assert( pt[ i ] == '\0' );
+    }
+
+    mem_free( ( void * ) &pt );
+
+    fprintf( stderr, "OK\n" );
+}
+
+
+void test_mem_clone()
+{
+    fprintf( stderr, "   Testing mem_clone ... " );
+
+    char   *pt;
+    char   *pt_clone;
+    size_t  pt_size = 10000;
+    size_t  i;
+
+    pt = mem_get( pt_size );
+
+    memset( pt, 'X', pt_size );
+
+    pt_clone = mem_clone( pt, pt_size );
+
+    assert( pt_clone != pt );
+    assert( &pt_clone != &pt );
+
+    for ( i = 0; i < pt_size; i++ ) {
+        assert( pt[ i ] == pt_clone[ i ] );
+    }
+
+    mem_free( ( void * ) &pt );
+    mem_free( ( void * ) &pt_clone );
 
     fprintf( stderr, "OK\n" );
 }
@@ -55,13 +139,29 @@ void test_mem_free()
 {
     fprintf( stderr, "   Testing mem_free ... " );
 
-    void *pt = mem_get( 100 );
+    char *pt0 = "foo";
+    void *pt1 = NULL;
+    char *pt2 = NULL;
+
+    assert( pt0 != NULL );
+    assert( pt1 == NULL );
+    assert( pt2 == NULL );
+
+    pt1 = mem_get( 100 );
+    pt2 = mem_get( 100 );
+
+    assert( pt1 != NULL );
+    assert( pt2 != NULL );
 
-    mem_free( pt );
+    memcpy( pt2, pt0, 3 );
 
-    printf( "pt: %s\n", ( char * ) pt );
+    mem_free( &pt1 );
+    mem_free( &pt1 );
+    mem_free( ( void * ) &pt1 );
+    mem_free( ( void * ) &pt2 );
 
-    assert( pt == NULL );
+    assert( pt1 == NULL );
+    assert( pt2 == NULL );
 
     fprintf( stderr, "OK\n" );
 }