diff --git a/c/CHANGELOG.rst b/c/CHANGELOG.rst index fdbbffd160..b30c95b003 100644 --- a/c/CHANGELOG.rst +++ b/c/CHANGELOG.rst @@ -7,6 +7,10 @@ - Change the type of genotypes to ``int32_t``, removing the TSK_16_BIT_GENOTYPES flag option. (:user:`benjeffery`, :issue:`463`, :pr:`2108`) +- ``tsk_variant_t`` now includes its ``tsk_site_t`` rather than pointing to it. + (:user:`benjeffery`, :issue:`2161`, :pr:`2162`) + + **Features** - Make dumping of tables and tree sequences to disk a zero-copy operation. diff --git a/c/tests/test_genotypes.c b/c/tests/test_genotypes.c index 465fa13652..ddbafac8ff 100644 --- a/c/tests/test_genotypes.c +++ b/c/tests/test_genotypes.c @@ -47,7 +47,7 @@ test_simplest_missing_data(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_TRUE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], TSK_MISSING_DATA); CU_ASSERT_EQUAL(var->genotypes[1], TSK_MISSING_DATA); @@ -59,7 +59,7 @@ test_simplest_missing_data(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 0); CU_ASSERT_EQUAL(var->genotypes[1], 0); @@ -91,7 +91,7 @@ test_simplest_missing_data_user_alleles(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_TRUE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], TSK_MISSING_DATA); CU_ASSERT_EQUAL(var->genotypes[1], TSK_MISSING_DATA); @@ -103,7 +103,7 @@ test_simplest_missing_data_user_alleles(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_TRUE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], TSK_MISSING_DATA); ret = tsk_vargen_next(&vargen, &var); @@ -114,7 +114,7 @@ test_simplest_missing_data_user_alleles(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 0); CU_ASSERT_EQUAL(var->genotypes[1], 0); @@ -148,7 +148,7 @@ test_simplest_missing_data_mutations(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_TRUE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); CU_ASSERT_EQUAL(var->genotypes[1], TSK_MISSING_DATA); @@ -161,7 +161,7 @@ test_simplest_missing_data_mutations(void) tsk_vargen_print_state(&vargen, _devnull); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); ret = tsk_vargen_next(&vargen, &var); @@ -172,7 +172,7 @@ test_simplest_missing_data_mutations(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); CU_ASSERT_EQUAL(var->genotypes[1], 0); @@ -207,7 +207,7 @@ test_simplest_missing_data_mutations_all_samples(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); CU_ASSERT_EQUAL(var->genotypes[1], 1); @@ -220,7 +220,7 @@ test_simplest_missing_data_mutations_all_samples(void) tsk_vargen_print_state(&vargen, _devnull); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); CU_ASSERT_EQUAL(var->genotypes[1], 1); @@ -232,7 +232,7 @@ test_simplest_missing_data_mutations_all_samples(void) CU_ASSERT_EQUAL_FATAL(ret, 0); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_FALSE(var->has_missing_data); CU_ASSERT_EQUAL(var->genotypes[0], 1); CU_ASSERT_EQUAL(var->genotypes[1], 1); @@ -273,7 +273,7 @@ test_single_tree_user_alleles(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_EQUAL_FATAL(var->num_alleles, 4); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -291,7 +291,7 @@ test_single_tree_user_alleles(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.125); + CU_ASSERT_EQUAL(var->site.position, 0.125); CU_ASSERT_EQUAL(var->num_alleles, 4); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -309,7 +309,7 @@ test_single_tree_user_alleles(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.25); + CU_ASSERT_EQUAL(var->site.position, 0.25); CU_ASSERT_EQUAL(var->num_alleles, 4); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -327,7 +327,7 @@ test_single_tree_user_alleles(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.5); + CU_ASSERT_EQUAL(var->site.position, 0.5); CU_ASSERT_EQUAL(var->num_alleles, 4); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -377,7 +377,7 @@ test_single_tree_char_alphabet(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.0); + CU_ASSERT_EQUAL(var->site.position, 0.0); CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -391,7 +391,7 @@ test_single_tree_char_alphabet(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.125); + CU_ASSERT_EQUAL(var->site.position, 0.125); CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 8); @@ -405,7 +405,7 @@ test_single_tree_char_alphabet(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.25); + CU_ASSERT_EQUAL(var->site.position, 0.25); CU_ASSERT_EQUAL(var->num_alleles, 4); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -423,7 +423,7 @@ test_single_tree_char_alphabet(void) ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(var->site->position, 0.5); + CU_ASSERT_EQUAL(var->site.position, 0.5); CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_EQUAL(var->allele_lengths[0], 1); CU_ASSERT_EQUAL(var->allele_lengths[1], 1); @@ -465,8 +465,8 @@ test_single_tree_binary_alphabet(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 1); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 1); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -477,8 +477,8 @@ test_single_tree_binary_alphabet(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 1); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 1); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -489,8 +489,8 @@ test_single_tree_binary_alphabet(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 2); - CU_ASSERT_EQUAL(var->site->mutations_length, 4); + CU_ASSERT_EQUAL(var->site.id, 2); + CU_ASSERT_EQUAL(var->site.mutations_length, 4); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 0); @@ -528,8 +528,8 @@ test_single_tree_non_samples(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 1); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 1); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -538,8 +538,8 @@ test_single_tree_non_samples(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 1); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 1); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -548,8 +548,8 @@ test_single_tree_non_samples(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 2); - CU_ASSERT_EQUAL(var->site->mutations_length, 4); + CU_ASSERT_EQUAL(var->site.id, 2); + CU_ASSERT_EQUAL(var->site.mutations_length, 4); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 0); @@ -661,8 +661,8 @@ test_single_tree_subsample(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 1); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 1); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -671,8 +671,8 @@ test_single_tree_subsample(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 1); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 1); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -681,8 +681,8 @@ test_single_tree_subsample(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 2); - CU_ASSERT_EQUAL(var->site->mutations_length, 4); + CU_ASSERT_EQUAL(var->site.id, 2); + CU_ASSERT_EQUAL(var->site.mutations_length, 4); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 0); @@ -700,24 +700,24 @@ test_single_tree_subsample(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 1); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 1); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 1); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 1); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 2); - CU_ASSERT_EQUAL(var->site->mutations_length, 4); + CU_ASSERT_EQUAL(var->site.id, 2); + CU_ASSERT_EQUAL(var->site.mutations_length, 4); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 0); @@ -827,8 +827,8 @@ test_single_tree_silent_mutations(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -839,8 +839,8 @@ test_single_tree_silent_mutations(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 1); - CU_ASSERT_EQUAL(var->site->mutations_length, 3); + CU_ASSERT_EQUAL(var->site.id, 1); + CU_ASSERT_EQUAL(var->site.mutations_length, 3); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -851,8 +851,8 @@ test_single_tree_silent_mutations(void) CU_ASSERT_EQUAL(var->num_alleles, 2); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 2); - CU_ASSERT_EQUAL(var->site->mutations_length, 4); + CU_ASSERT_EQUAL(var->site.id, 2); + CU_ASSERT_EQUAL(var->site.mutations_length, 4); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 1); @@ -863,8 +863,8 @@ test_single_tree_silent_mutations(void) CU_ASSERT_EQUAL(var->num_alleles, 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[0], "0", 1); CU_ASSERT_NSTRING_EQUAL(var->alleles[1], "1", 1); - CU_ASSERT_EQUAL(var->site->id, 3); - CU_ASSERT_EQUAL(var->site->mutations_length, 1); + CU_ASSERT_EQUAL(var->site.id, 3); + CU_ASSERT_EQUAL(var->site.mutations_length, 1); ret = tsk_vargen_next(&vargen, &var); CU_ASSERT_EQUAL_FATAL(ret, 0); @@ -874,7 +874,7 @@ test_single_tree_silent_mutations(void) } static void -test_multiple_tree_get_variant(void) +test_multiple_variant_decode(void) { int ret = 0; tsk_size_t k; @@ -933,7 +933,7 @@ test_multiple_tree_get_variant(void) } static void -test_tree_get_variant_errors(void) +test_variant_decode_errors(void) { int ret = 0; tsk_treeseq_t ts; @@ -948,6 +948,13 @@ test_tree_get_variant_errors(void) CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_OUT_OF_BOUNDS); tsk_variant_free(&var); + /* Site out of bounds */ + ret = tsk_variant_init(&var, &ts, NULL, 0, NULL, 0); + CU_ASSERT_EQUAL_FATAL(ret, 0); + ret = tsk_variant_decode(&var, 42, 0); + CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_SITE_OUT_OF_BOUNDS); + tsk_variant_free(&var); + tsk_treeseq_free(&ts); } @@ -970,8 +977,8 @@ main(int argc, char **argv) { "test_single_tree_subsample", test_single_tree_subsample }, { "test_single_tree_many_alleles", test_single_tree_many_alleles }, { "test_single_tree_silent_mutations", test_single_tree_silent_mutations }, - { "test_multiple_tree_get_variant", test_multiple_tree_get_variant }, - { "test_tree_get_variant_errors", test_tree_get_variant_errors }, + { "test_multiple_variant_decode", test_multiple_variant_decode }, + { "test_variant_decode_errors", test_variant_decode_errors }, { NULL, NULL }, }; diff --git a/c/tests/test_trees.c b/c/tests/test_trees.c index 411dc856e3..35f165cdee 100644 --- a/c/tests/test_trees.c +++ b/c/tests/test_trees.c @@ -506,9 +506,9 @@ verify_simplify_genotypes(tsk_treeseq_t *ts, tsk_treeseq_t *subset, CU_ASSERT_EQUAL_FATAL(ret, 1); ret = tsk_vargen_next(&subset_vargen, &subset_variant); CU_ASSERT_EQUAL_FATAL(ret, 1); - CU_ASSERT_EQUAL(variant->site->id, (tsk_id_t) j) - CU_ASSERT_EQUAL(subset_variant->site->id, (tsk_id_t) j) - CU_ASSERT_EQUAL(variant->site->position, subset_variant->site->position); + CU_ASSERT_EQUAL(variant->site.id, (tsk_id_t) j) + CU_ASSERT_EQUAL(subset_variant->site.id, (tsk_id_t) j) + CU_ASSERT_EQUAL(variant->site.position, subset_variant->site.position); for (k = 0; k < num_samples; k++) { CU_ASSERT_FATAL(sample_index_map[samples[k]] < (tsk_id_t) ts->num_samples); a1 = variant->genotypes[sample_index_map[samples[k]]]; @@ -1662,8 +1662,8 @@ test_simplest_back_mutations(void) CU_ASSERT_EQUAL(var->genotypes[0], 0); CU_ASSERT_EQUAL(var->genotypes[1], 1); CU_ASSERT_EQUAL(var->genotypes[2], 0); - CU_ASSERT_EQUAL(var->site->id, 0); - CU_ASSERT_EQUAL(var->site->mutations_length, 2); + CU_ASSERT_EQUAL(var->site.id, 0); + CU_ASSERT_EQUAL(var->site.mutations_length, 2); tsk_vargen_free(&vargen); tsk_treeseq_free(&ts); diff --git a/c/tskit/genotypes.c b/c/tskit/genotypes.c index 24a8478435..8fbc537bd5 100644 --- a/c/tskit/genotypes.c +++ b/c/tskit/genotypes.c @@ -141,11 +141,7 @@ tsk_variant_init(tsk_variant_t *self, const tsk_treeseq_t *tree_sequence, tsk_size_t num_samples_alloc; tsk_memset(self, 0, sizeof(tsk_variant_t)); - self->site = malloc(sizeof(*self->site)); - if (self->site == NULL) { - ret = TSK_ERR_BAD_PARAM_VALUE; - goto out; - } + self->tree_sequence = tree_sequence; ret = tsk_tree_init( &self->tree, tree_sequence, samples == NULL ? TSK_SAMPLE_LISTS : 0); @@ -274,7 +270,6 @@ tsk_variant_free(tsk_variant_t *self) tsk_safe_free(self->alt_samples); tsk_safe_free(self->alt_sample_index_map); tsk_safe_free(self->traversal_stack); - tsk_safe_free(self->site); return 0; } @@ -470,12 +465,12 @@ tsk_variant_decode( int (*update_genotypes)(tsk_variant_t *, tsk_id_t, tsk_id_t); tsk_size_t (*mark_missing)(tsk_variant_t *); - ret = tsk_treeseq_get_site(self->tree_sequence, site_id, self->site); + ret = tsk_treeseq_get_site(self->tree_sequence, site_id, &self->site); if (ret != 0) { goto out; } - ret = tsk_tree_seek(&self->tree, self->site->position, 0); + ret = tsk_tree_seek(&self->tree, self->site.position, 0); if (ret != 0) { goto out; } @@ -502,15 +497,15 @@ tsk_variant_decode( if (self->user_alleles) { allele_index = tsk_variant_get_allele_index( - self, self->site->ancestral_state, self->site->ancestral_state_length); + self, self->site.ancestral_state, self->site.ancestral_state_length); if (allele_index == -1) { ret = TSK_ERR_ALLELE_NOT_FOUND; goto out; } } else { /* Ancestral state is always allele 0 */ - self->alleles[0] = self->site->ancestral_state; - self->allele_lengths[0] = self->site->ancestral_state_length; + self->alleles[0] = self->site.ancestral_state; + self->allele_lengths[0] = self->site.ancestral_state_length; self->num_alleles = 1; allele_index = 0; } @@ -534,8 +529,8 @@ tsk_variant_decode( if (!impute_missing) { num_missing = mark_missing(self); } - for (j = 0; j < self->site->mutations_length; j++) { - mutation = self->site->mutations[j]; + for (j = 0; j < self->site.mutations_length; j++) { + mutation = self->site.mutations[j]; /* Compute the allele index for this derived state value. */ allele_index = tsk_variant_get_allele_index( self, mutation.derived_state, mutation.derived_state_length); diff --git a/c/tskit/genotypes.h b/c/tskit/genotypes.h index 8f006a1fdd..d906419622 100644 --- a/c/tskit/genotypes.h +++ b/c/tskit/genotypes.h @@ -36,7 +36,7 @@ extern "C" { typedef struct { const tsk_treeseq_t *tree_sequence; - tsk_site_t *site; + tsk_site_t site; tsk_tree_t tree; const char **alleles; tsk_size_t *allele_lengths; diff --git a/python/_tskitmodule.c b/python/_tskitmodule.c index 32afc2da8a..3483e2491d 100644 --- a/python/_tskitmodule.c +++ b/python/_tskitmodule.c @@ -592,7 +592,7 @@ make_variant(tsk_variant_t *variant, tsk_size_t num_samples) goto out; } memcpy(PyArray_DATA(genotypes), variant->genotypes, num_samples * sizeof(int32_t)); - ret = Py_BuildValue("iOO", variant->site->id, genotypes, alleles); + ret = Py_BuildValue("iOO", variant->site.id, genotypes, alleles); out: Py_XDECREF(genotypes); Py_XDECREF(alleles);