@@ -4049,6 +4049,87 @@ test_individual_table(void)
4049
4049
free (metadata_offset );
4050
4050
}
4051
4051
4052
+ static void
4053
+ test_individual_table_takeset (void )
4054
+ {
4055
+ int ret = 0 ;
4056
+ tsk_id_t ret_id ;
4057
+ tsk_individual_table_t source_table , table ;
4058
+ tsk_size_t num_rows = 100 ;
4059
+ tsk_id_t j ;
4060
+ tsk_size_t k ;
4061
+ tsk_flags_t * flags ;
4062
+ double * location ;
4063
+ tsk_id_t * parents ;
4064
+ char * metadata ;
4065
+ tsk_size_t * metadata_offset ;
4066
+ tsk_size_t * parents_offset ;
4067
+ tsk_size_t * location_offset ;
4068
+ tsk_size_t spatial_dimension = 2 ;
4069
+ tsk_size_t num_parents = 3 ;
4070
+ const char * test_metadata = "test" ;
4071
+ tsk_size_t test_metadata_length = 4 ;
4072
+ double test_location [spatial_dimension ];
4073
+ tsk_id_t test_parents [num_parents ];
4074
+
4075
+ /* Make a table to copy from */
4076
+ ret = tsk_individual_table_init (& source_table , 0 );
4077
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
4078
+ for (k = 0 ; k < spatial_dimension ; k ++ ) {
4079
+ test_location [k ] = (double ) k ;
4080
+ }
4081
+ for (k = 0 ; k < num_parents ; k ++ ) {
4082
+ test_parents [k ] = (tsk_id_t ) k + 42 ;
4083
+ }
4084
+ for (j = 0 ; j < (tsk_id_t ) num_rows ; j ++ ) {
4085
+ ret_id = tsk_individual_table_add_row (& source_table , (tsk_flags_t ) j ,
4086
+ test_location , spatial_dimension , test_parents , num_parents , test_metadata ,
4087
+ test_metadata_length );
4088
+ CU_ASSERT_EQUAL_FATAL (ret_id , j );
4089
+ }
4090
+
4091
+ /* Prepare arrays to be taken */
4092
+ flags = tsk_malloc (num_rows * sizeof (tsk_flags_t ));
4093
+ CU_ASSERT_FATAL (flags != NULL );
4094
+ tsk_memcpy (flags , source_table .flags , num_rows * sizeof (tsk_flags_t ));
4095
+ location = tsk_malloc (spatial_dimension * num_rows * sizeof (double ));
4096
+ CU_ASSERT_FATAL (location != NULL );
4097
+ tsk_memcpy (
4098
+ location , source_table .location , spatial_dimension * num_rows * sizeof (double ));
4099
+ location_offset = tsk_malloc ((num_rows + 1 ) * sizeof (tsk_size_t ));
4100
+ CU_ASSERT_FATAL (location_offset != NULL );
4101
+ tsk_memcpy (location_offset , source_table .location_offset ,
4102
+ (num_rows + 1 ) * sizeof (tsk_size_t ));
4103
+ parents = tsk_malloc (num_parents * num_rows * sizeof (tsk_id_t ));
4104
+ CU_ASSERT_FATAL (parents != NULL );
4105
+ tsk_memcpy (parents , source_table .parents , num_parents * num_rows * sizeof (tsk_id_t ));
4106
+ parents_offset = tsk_malloc ((num_rows + 1 ) * sizeof (tsk_size_t ));
4107
+ CU_ASSERT_FATAL (parents_offset != NULL );
4108
+ tsk_memcpy (parents_offset , source_table .parents_offset ,
4109
+ (num_rows + 1 ) * sizeof (tsk_size_t ));
4110
+ metadata = tsk_malloc (num_rows * test_metadata_length * sizeof (char ));
4111
+ CU_ASSERT_FATAL (metadata != NULL );
4112
+ tsk_memcpy (
4113
+ metadata , source_table .metadata , num_rows * test_metadata_length * sizeof (char ));
4114
+ metadata_offset = tsk_malloc ((num_rows + 1 ) * sizeof (tsk_size_t ));
4115
+ CU_ASSERT_FATAL (metadata_offset != NULL );
4116
+ tsk_memcpy (metadata_offset , source_table .metadata_offset ,
4117
+ (num_rows + 1 ) * sizeof (tsk_size_t ));
4118
+
4119
+ ret = tsk_individual_table_init (& table , 0 );
4120
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
4121
+
4122
+ ret = tsk_individual_table_takeset_columns (& table , num_rows , flags , location ,
4123
+ location_offset , parents , parents_offset , metadata , metadata_offset );
4124
+ CU_ASSERT_EQUAL_FATAL (ret , 0 );
4125
+ CU_ASSERT_TRUE (tsk_individual_table_equals (& source_table , & table , 0 ));
4126
+
4127
+ ret = tsk_individual_table_free (& table );
4128
+ CU_ASSERT_EQUAL (ret , 0 );
4129
+ ret = tsk_individual_table_free (& source_table );
4130
+ CU_ASSERT_EQUAL (ret , 0 );
4131
+ }
4132
+
4052
4133
static void
4053
4134
test_individual_table_update_row (void )
4054
4135
{
@@ -9235,6 +9316,7 @@ main(int argc, char **argv)
9235
9316
{ "test_migration_table" , test_migration_table },
9236
9317
{ "test_migration_table_update_row" , test_migration_table_update_row },
9237
9318
{ "test_individual_table" , test_individual_table },
9319
+ { "test_individual_table_takeset" , test_individual_table_takeset },
9238
9320
{ "test_individual_table_update_row" , test_individual_table_update_row },
9239
9321
{ "test_population_table" , test_population_table },
9240
9322
{ "test_population_table_update_row" , test_population_table_update_row },
0 commit comments