Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 51 additions & 34 deletions c/tests/test_tables.c
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ test_table_collection_equals_options(void)
CU_ASSERT(ret >= 0);
ret = tsk_node_table_add_row(&tc1.nodes, TSK_NODE_IS_SAMPLE, 1.0, 0, 0, NULL, 0);
CU_ASSERT(ret >= 0);
ret = tsk_individual_table_add_row(&tc1.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(&tc1.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT(ret >= 0);
ret = tsk_population_table_add_row(&tc1.populations, NULL, 0);
CU_ASSERT(ret >= 0);
Expand Down Expand Up @@ -2088,12 +2088,13 @@ test_individual_table(void)
tsk_individual_table_set_max_rows_increment(&table, 1);
tsk_individual_table_set_max_metadata_length_increment(&table, 1);
tsk_individual_table_set_max_location_length_increment(&table, 1);
tsk_individual_table_set_max_parents_length_increment(&table, 1);

tsk_individual_table_print_state(&table, _devnull);

for (j = 0; j < (tsk_id_t) num_rows; j++) {
ret = tsk_individual_table_add_row(&table, (tsk_flags_t) j, test_location,
spatial_dimension, test_metadata, test_metadata_length);
spatial_dimension, NULL, 0, test_metadata, test_metadata_length);
CU_ASSERT_EQUAL_FATAL(ret, j);
CU_ASSERT_EQUAL(table.flags[j], (tsk_flags_t) j);
for (k = 0; k < spatial_dimension; k++) {
Expand Down Expand Up @@ -2172,8 +2173,8 @@ test_individual_table(void)
for (j = 0; j < (tsk_id_t) num_rows + 1; j++) {
metadata_offset[j] = (tsk_size_t) j;
}
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, location, location_offset, metadata, metadata_offset);
ret = tsk_individual_table_set_columns(&table, num_rows, flags, location,
location_offset, NULL, NULL, metadata, metadata_offset);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(memcmp(table.flags, flags, num_rows * sizeof(uint32_t)), 0);
CU_ASSERT_EQUAL(
Expand All @@ -2192,8 +2193,8 @@ test_individual_table(void)
tsk_individual_table_print_state(&table, _devnull);

/* Append another num_rows onto the end */
ret = tsk_individual_table_append_columns(
&table, num_rows, flags, location, location_offset, metadata, metadata_offset);
ret = tsk_individual_table_append_columns(&table, num_rows, flags, location,
location_offset, NULL, NULL, metadata, metadata_offset);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(memcmp(table.flags, flags, num_rows * sizeof(uint32_t)), 0);
CU_ASSERT_EQUAL(
Expand Down Expand Up @@ -2235,38 +2236,39 @@ test_individual_table(void)
ret = tsk_individual_table_truncate(&table, num_rows + 1);
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_TABLE_POSITION);

// TODO: add tests for parent spec
/* flags can't be NULL */
ret = tsk_individual_table_set_columns(
&table, num_rows, NULL, location, location_offset, metadata, metadata_offset);
ret = tsk_individual_table_set_columns(&table, num_rows, NULL, location,
location_offset, NULL, NULL, metadata, metadata_offset);
CU_ASSERT_EQUAL(ret, TSK_ERR_BAD_PARAM_VALUE);
/* location and location offset must be simultaneously NULL or not */
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, location, NULL, metadata, metadata_offset);
&table, num_rows, flags, location, NULL, NULL, NULL, metadata, metadata_offset);
CU_ASSERT_EQUAL(ret, TSK_ERR_BAD_PARAM_VALUE);
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, NULL, location_offset, metadata, metadata_offset);
ret = tsk_individual_table_set_columns(&table, num_rows, flags, NULL,
location_offset, NULL, NULL, metadata, metadata_offset);
CU_ASSERT_EQUAL(ret, TSK_ERR_BAD_PARAM_VALUE);
/* metadata and metadata offset must be simultaneously NULL or not */
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, location, location_offset, NULL, metadata_offset);
ret = tsk_individual_table_set_columns(&table, num_rows, flags, location,
location_offset, NULL, NULL, NULL, metadata_offset);
CU_ASSERT_EQUAL(ret, TSK_ERR_BAD_PARAM_VALUE);
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, location, location_offset, metadata, NULL);
&table, num_rows, flags, location, location_offset, NULL, NULL, metadata, NULL);
CU_ASSERT_EQUAL(ret, TSK_ERR_BAD_PARAM_VALUE);

/* if location and location_offset are both null, all locations are zero length */
num_rows = 10;
memset(location_offset, 0, (num_rows + 1) * sizeof(tsk_size_t));
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, NULL, NULL, NULL, NULL);
&table, num_rows, flags, NULL, NULL, NULL, NULL, NULL, NULL);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(memcmp(table.location_offset, location_offset,
(num_rows + 1) * sizeof(tsk_size_t)),
0);
CU_ASSERT_EQUAL(table.num_rows, num_rows);
CU_ASSERT_EQUAL(table.location_length, 0);
ret = tsk_individual_table_append_columns(
&table, num_rows, flags, NULL, NULL, NULL, NULL);
&table, num_rows, flags, NULL, NULL, NULL, NULL, NULL, NULL);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(memcmp(table.location_offset, location_offset,
(num_rows + 1) * sizeof(tsk_size_t)),
Expand All @@ -2284,7 +2286,7 @@ test_individual_table(void)
num_rows = 10;
memset(metadata_offset, 0, (num_rows + 1) * sizeof(tsk_size_t));
ret = tsk_individual_table_set_columns(
&table, num_rows, flags, location, location_offset, NULL, NULL);
&table, num_rows, flags, location, location_offset, NULL, NULL, NULL, NULL);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(memcmp(table.flags, flags, num_rows * sizeof(uint32_t)), 0);
CU_ASSERT_EQUAL(
Expand All @@ -2296,7 +2298,7 @@ test_individual_table(void)
CU_ASSERT_EQUAL(table.num_rows, num_rows);
CU_ASSERT_EQUAL(table.metadata_length, 0);
ret = tsk_individual_table_append_columns(
&table, num_rows, flags, location, location_offset, NULL, NULL);
&table, num_rows, flags, location, location_offset, NULL, NULL, NULL, NULL);
CU_ASSERT_EQUAL(ret, 0);
CU_ASSERT_EQUAL(
memcmp(table.location, location, spatial_dimension * num_rows * sizeof(double)),
Expand Down Expand Up @@ -4311,7 +4313,7 @@ test_table_overflow(void)
/* Simulate overflows */
tables.individuals.max_rows = max_rows;
tables.individuals.num_rows = max_rows;
ret = tsk_individual_table_add_row(&tables.individuals, 0, 0, 0, NULL, 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, 0, 0, NULL, 0, NULL, 0);
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_TABLE_OVERFLOW);

tables.nodes.max_rows = max_rows;
Expand Down Expand Up @@ -4366,13 +4368,17 @@ test_column_overflow(void)

/* We can't trigger a column overflow with one element because the parameter
* value is 32 bit */
ret = tsk_individual_table_add_row(&tables.individuals, 0, &zero, 1, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, &zero, 1, NULL, 0, NULL, 0);
CU_ASSERT_EQUAL_FATAL(ret, 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, too_big, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, too_big, NULL, 0, NULL, 0);
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_COLUMN_OVERFLOW);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, zeros, 1);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, zeros, 1);
CU_ASSERT_EQUAL_FATAL(ret, 1);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, too_big);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, too_big);
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_COLUMN_OVERFLOW);

ret = tsk_node_table_add_row(&tables.nodes, 0, 0, 0, 0, zeros, 1);
Expand Down Expand Up @@ -4925,9 +4931,11 @@ test_table_collection_subset_with_options(tsk_flags_t options)
ret = tsk_node_table_add_row(
&tables.nodes, TSK_NODE_IS_SAMPLE, 0.0, TSK_NULL, 1, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_population_table_add_row(&tables.populations, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
Expand Down Expand Up @@ -5018,9 +5026,11 @@ test_table_collection_subset_errors(void)
ret = tsk_node_table_add_row(
&tables.nodes, TSK_NODE_IS_SAMPLE, 0.0, TSK_NULL, 1, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_population_table_add_row(&tables.populations, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
Expand Down Expand Up @@ -5106,11 +5116,14 @@ test_table_collection_union(void)
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_node_table_add_row(&tables.nodes, TSK_NODE_IS_SAMPLE, 0.5, 1, 2, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_population_table_add_row(&tables.populations, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
Expand Down Expand Up @@ -5220,9 +5233,11 @@ test_table_collection_union_errors(void)
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_node_table_add_row(&tables.nodes, TSK_NODE_IS_SAMPLE, 0.5, 1, 1, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_population_table_add_row(&tables.populations, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
Expand Down Expand Up @@ -5311,9 +5326,11 @@ test_table_collection_clear_with_options(tsk_flags_t options)
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_node_table_add_row(&tables.nodes, TSK_NODE_IS_SAMPLE, 0.5, 1, 1, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
ret = tsk_population_table_add_row(&tables.populations, NULL, 0);
CU_ASSERT_FATAL(ret >= 0);
Expand Down
64 changes: 45 additions & 19 deletions c/tests/test_trees.c
Original file line number Diff line number Diff line change
Expand Up @@ -1074,11 +1074,11 @@ test_simplest_unary_with_individuals(void)
"0 2 4 2,3\n"
"0 1 5 4\n"
"1 2 6 4\n";
const char *individuals = "0 0.5\n"
"0 1.5,3.1\n"
"0 2.1\n"
"0 3.2\n"
"0 4.2\n";
const char *individuals = "0 0.5 -1,-1\n"
"0 1.5,3.1 -1,-1\n"
"0 2.1 -1,-1\n"
"0 3.2 -1,-1\n"
"0 4.2 -1,-1\n";
const char *nodes_expect = "1 0 0 -1\n"
"1 0 0 0\n"
"0 1 0 1\n"
Expand All @@ -1089,10 +1089,10 @@ test_simplest_unary_with_individuals(void)
"2 3 3 1\n"
"0 2 4 0,2\n"
"1 2 5 4\n";
const char *individuals_expect = "0 0.5\n"
"0 1.5,3.1\n"
"0 2.1\n"
"0 3.2\n";
const char *individuals_expect = "0 0.5 -1,-1\n"
"0 1.5,3.1 -1,-1\n"
"0 2.1 -1,-1\n"
"0 3.2 -1,-1\n";
tsk_treeseq_t ts, simplified, expected;
tsk_id_t sample_ids[] = { 0, 1 };

Expand Down Expand Up @@ -1887,28 +1887,32 @@ test_simplest_final_gap_tsk_treeseq_mutation_parents(void)
static void
test_simplest_individuals(void)
{
const char *individuals = "1 0.25\n"
"2 0.5,0.25\n";
const char *individuals = "1 0.25 -1,-1\n"
"2 0.5,0.25 -1,-1\n"
"3 0.3 0,1\n";
const char *nodes = "1 0 -1 -1\n"
"1 0 -1 1\n"
"0 0 -1 -1\n"
"1 0 -1 0\n"
"0 0 -1 1\n";
"0 0 -1 1\n"
"0 0 -1 2\n";
tsk_table_collection_t tables;
tsk_treeseq_t ts;
tsk_node_t node;
tsk_individual_t individual;
tsk_flags_t load_flags = TSK_BUILD_INDEXES;
int ret;
tsk_id_t pat_id, mat_id;

ret = tsk_table_collection_init(&tables, 0);
CU_ASSERT_EQUAL_FATAL(ret, 0);

tables.sequence_length = 1.0;
parse_individuals(individuals, &tables.individuals);
CU_ASSERT_EQUAL_FATAL(tables.individuals.num_rows, 2);
CU_ASSERT_EQUAL_FATAL(tables.individuals.num_rows, 3);

parse_nodes(nodes, &tables.nodes);
CU_ASSERT_EQUAL_FATAL(tables.nodes.num_rows, 5);
CU_ASSERT_EQUAL_FATAL(tables.nodes.num_rows, 6);

ret = tsk_treeseq_init(&ts, &tables, TSK_BUILD_INDEXES);
CU_ASSERT_EQUAL_FATAL(ret, 0);
Expand All @@ -1927,6 +1931,10 @@ test_simplest_individuals(void)
CU_ASSERT_EQUAL_FATAL(individual.flags, 1);
CU_ASSERT_EQUAL_FATAL(individual.location_length, 1);
CU_ASSERT_EQUAL_FATAL(individual.location[0], 0.25);
CU_ASSERT_EQUAL_FATAL(individual.parents_length, 2);
CU_ASSERT_EQUAL_FATAL(individual.parents[0], -1);
CU_ASSERT_EQUAL_FATAL(individual.parents[1], -1);
pat_id = individual.id;
CU_ASSERT_EQUAL_FATAL(individual.nodes_length, 1);
CU_ASSERT_EQUAL_FATAL(individual.nodes[0], 3);

Expand All @@ -1937,10 +1945,26 @@ test_simplest_individuals(void)
CU_ASSERT_EQUAL_FATAL(individual.location_length, 2);
CU_ASSERT_EQUAL_FATAL(individual.location[0], 0.5);
CU_ASSERT_EQUAL_FATAL(individual.location[1], 0.25);
CU_ASSERT_EQUAL_FATAL(individual.parents_length, 2);
CU_ASSERT_EQUAL_FATAL(individual.parents[0], -1);
CU_ASSERT_EQUAL_FATAL(individual.parents[1], -1);
mat_id = individual.id;
CU_ASSERT_EQUAL_FATAL(individual.nodes_length, 2);
CU_ASSERT_EQUAL_FATAL(individual.nodes[0], 1);
CU_ASSERT_EQUAL_FATAL(individual.nodes[1], 4);

ret = tsk_treeseq_get_individual(&ts, 2, &individual);
CU_ASSERT_EQUAL_FATAL(ret, 0);
CU_ASSERT_EQUAL_FATAL(individual.id, 2);
CU_ASSERT_EQUAL_FATAL(individual.flags, 3);
CU_ASSERT_EQUAL_FATAL(individual.location_length, 1);
CU_ASSERT_EQUAL_FATAL(individual.location[0], 0.3);
CU_ASSERT_EQUAL_FATAL(individual.parents_length, 2);
CU_ASSERT_EQUAL_FATAL(individual.parents[0], pat_id);
CU_ASSERT_EQUAL_FATAL(individual.parents[1], mat_id);
CU_ASSERT_EQUAL_FATAL(individual.nodes_length, 1);
CU_ASSERT_EQUAL_FATAL(individual.nodes[0], 5);

ret = tsk_treeseq_get_individual(&ts, 3, &individual);
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_INDIVIDUAL_OUT_OF_BOUNDS);
tsk_treeseq_free(&ts);
Expand Down Expand Up @@ -2005,9 +2029,11 @@ test_simplest_bad_individuals(void)
tables.nodes.individual[0] = TSK_NULL;

/* add two individuals */
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_EQUAL(ret, 0);
ret = tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0);
ret = tsk_individual_table_add_row(
&tables.individuals, 0, NULL, 0, NULL, 0, NULL, 0);
CU_ASSERT_EQUAL(ret, 1);

/* Bad individual ID */
Expand Down Expand Up @@ -2788,9 +2814,9 @@ test_simplest_individual_filter(void)
CU_ASSERT_EQUAL_FATAL(ret, 0);

tables.sequence_length = 1;
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, "0", 1);
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, "1", 1);
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, "2", 1);
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0, "0", 1);
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0, "1", 1);
tsk_individual_table_add_row(&tables.individuals, 0, NULL, 0, NULL, 0, "2", 1);
/* Two nodes referring to individual 1 */
tsk_node_table_add_row(&tables.nodes, TSK_NODE_IS_SAMPLE, 0.0, TSK_NULL, 1, NULL, 0);
tsk_node_table_add_row(&tables.nodes, TSK_NODE_IS_SAMPLE, 0.0, TSK_NULL, 1, NULL, 0);
Expand Down
Loading