static int feature_index_lua_add_feature_node(lua_State *L) { GtFeatureIndex **fi; GtGenomeNode **gn; GtFeatureNode *fn; GtStr *seqid; GtError *err; bool has_seqid; gt_assert(L); fi = check_feature_index(L, 1); gn = check_genome_node(L, 2); fn = gt_feature_node_cast(*gn); luaL_argcheck(L, fn, 2, "not a feature node"); seqid = gt_genome_node_get_seqid(*gn); luaL_argcheck(L, seqid, 2, "feature does not have a sequence id"); err = gt_error_new(); if (gt_feature_index_has_seqid(*fi, &has_seqid, gt_str_get(seqid), err)) return gt_lua_error(L, err); gt_error_delete(err); luaL_argcheck(L, has_seqid, 2, "feature index does not contain corresponding sequence region"); err = gt_error_new(); if (gt_feature_index_add_feature_node(*fi, fn, err)) return gt_lua_error(L, err); gt_error_delete(err); return 0; }
int gt_diagram_unit_test(GtError *err) { int had_err = 0; GtGenomeNode *gn; GtDiagramTestShared sh; GtRange testrng = {100, 10000}; gt_error_check(err); gn = gt_feature_node_new_standard_gene(); sh.fi = gt_feature_index_memory_new(); sh.sty = gt_style_new(err); sh.err = err; sh.errstatus = 0; gt_feature_index_add_feature_node(sh.fi, gt_feature_node_cast(gn), err); gt_genome_node_delete(gn); sh.d = gt_diagram_new(sh.fi, "ctg123", &testrng, sh.sty, err); /* removed the multithreading test for now until it is fixed */ gt_diagram_unit_test_sketch_func(&sh); gt_ensure(sh.errstatus == 0); gt_style_delete(sh.sty); gt_diagram_delete(sh.d); gt_feature_index_delete(sh.fi); return had_err; }
static GtFeatureIndex *in_stream_test_data(GtError *error) { GtFeatureIndex *fi; GtFeatureNode *fn; GtGenomeNode *gn; GtRegionNode *rn; GtStr *seqid; fi = gt_feature_index_memory_new(); seqid = gt_str_new_cstr("chr1"); gn = gt_region_node_new(seqid, 1, 100000); rn = gt_region_node_cast(gn); gt_feature_index_add_region_node(fi, rn, error); gt_genome_node_delete(gn); gn = gt_feature_node_new(seqid, "region", 500, 5000, GT_STRAND_BOTH); fn = gt_feature_node_cast(gn); gt_feature_index_add_feature_node(fi, fn, error); gt_genome_node_delete(gn); gn = gt_feature_node_new(seqid, "region", 50000, 75000, GT_STRAND_BOTH); fn = gt_feature_node_cast(gn); gt_feature_index_add_feature_node(fi, fn, error); gt_genome_node_delete(gn); gt_str_delete(seqid); seqid = gt_str_new_cstr("scf0001"); gn = gt_region_node_new(seqid, 1, 10000); rn = gt_region_node_cast(gn); gt_feature_index_add_region_node(fi, rn, error); gt_genome_node_delete(gn); gn = gt_feature_node_new(seqid, "mRNA", 4000, 6000, GT_STRAND_REVERSE); fn = gt_feature_node_cast(gn); gt_feature_index_add_feature_node(fi, fn, error); gt_genome_node_delete(gn); gn = gt_feature_node_new(seqid, "mRNA", 7000, 9500, GT_STRAND_FORWARD); fn = gt_feature_node_cast(gn); gt_feature_index_add_feature_node(fi, fn, error); gt_genome_node_delete(gn); gt_str_delete(seqid); return fi; }
static int feature_visitor_feature_node(GtNodeVisitor *gv, GtFeatureNode *fn, GtError *err) { GtFeatureVisitor *v = feature_visitor_cast(gv); int rval = 0; gt_error_check(err); rval = gt_feature_index_add_feature_node(v->feature_index, fn, err); return rval; }
static int feature_index_lua_add_feature_node(lua_State *L) { GtFeatureIndex **fi; GtGenomeNode **gn; GtFeatureNode *gf; GtStr *seqid; gt_assert(L); fi = check_feature_index(L, 1); gn = check_genome_node(L, 2); gf = gt_genome_node_cast(gt_feature_node_class(), *gn); luaL_argcheck(L, gf, 2, "not a feature node"); seqid = gt_genome_node_get_seqid(*gn); luaL_argcheck(L, seqid, 2, "feature does not have a sequence id"); luaL_argcheck(L, gt_feature_index_has_seqid(*fi, gt_str_get(seqid)), 2, "feature index does not contain corresponding sequence region"); gt_feature_index_add_feature_node(*fi, gf); return 0; }
static void* gt_feature_index_unit_test_add(void *data) { GtFeatureNode *feature; GtFeatureIndexTestShared *shm = (GtFeatureIndexTestShared*) data; while (true) { gt_mutex_lock(shm->mutex); if (shm->next_node_idx == GT_FI_TEST_FEATURES_PER_THREAD * gt_jobs) { gt_mutex_unlock(shm->mutex); return NULL; } gt_assert(shm->next_node_idx < gt_array_size(shm->nodes)); feature = *(GtFeatureNode**) gt_array_get(shm->nodes, shm->next_node_idx++); gt_mutex_unlock(shm->mutex); gt_feature_index_add_feature_node(shm->fi, feature, shm->err); gt_genome_node_delete((GtGenomeNode*) feature); } return NULL; }