void post_ev_alter_tree_structure(Model_t *m, ASTNode_t **node_p, ASTNode_t *parent, int child_order){ ASTNode_t *divide_node, *times_node; ASTNode_t *compartment_node; ASTNode_t *node, *next_node; unsigned int i; Species_t *sp; node = *node_p; for(i=0; i<ASTNode_getNumChildren(node); i++){ next_node = ASTNode_getChild(node, i); post_ev_alter_tree_structure(m, &next_node, *node_p, i); } if(ASTNode_getType(node) == AST_NAME){ for(i=0; i<Model_getNumSpecies(m); i++){ sp = (Species_t*)ListOf_get(Model_getListOfSpecies(m), i); if(strcmp(Species_getId(sp), ASTNode_getName(node)) == 0){ if(!Species_getHasOnlySubstanceUnits(sp) && Compartment_getSpatialDimensions(Model_getCompartmentById(m, Species_getCompartment(sp))) != 0){/* use val/comp in calculation */ divide_node = ASTNode_createWithType(AST_DIVIDE); compartment_node = ASTNode_createWithType(AST_NAME); ASTNode_setName(compartment_node, Compartment_getId(Model_getCompartmentById(m, Species_getCompartment(sp)))); ASTNode_addChild(divide_node, node); ASTNode_addChild(divide_node, compartment_node); if(parent != NULL){ ASTNode_replaceChild(parent, child_order, divide_node); }else{ *node_p = divide_node; } node = *node_p; break; }else if(Species_getHasOnlySubstanceUnits(sp) && Species_isSetInitialConcentration(sp) && Compartment_getSpatialDimensions(Model_getCompartmentById(m, Species_getCompartment(sp))) != 0){/* use val*comp in calculation */ times_node = ASTNode_createWithType(AST_TIMES); compartment_node = ASTNode_createWithType(AST_NAME); ASTNode_setName(compartment_node, Compartment_getId(Model_getCompartmentById(m, Species_getCompartment(sp)))); ASTNode_addChild(times_node, node); ASTNode_addChild(times_node, compartment_node); if(parent != NULL){ ASTNode_replaceChild(parent, child_order, times_node); }else{ *node_p = times_node; } node = *node_p; break; } } } } return; }
END_TEST START_TEST (test_ListOf_append) { Model_t *m = Model_create(2, 4); Model_createCompartment(m); ListOf_t *loc = Model_getListOfCompartments(m); fail_unless(ListOf_size(loc) == 1); SBase_t *c = (SBase_t*)Compartment_create(2, 4); int i = ListOf_append(loc, c); fail_unless(i == LIBSBML_OPERATION_SUCCESS); fail_unless(ListOf_size(loc) == 2); SBase_t *sp = (SBase_t*)Species_create(2, 4); i = ListOf_append(loc, sp); fail_unless(i == LIBSBML_INVALID_OBJECT); fail_unless(ListOf_size(loc) == 2); Model_t* m2 = Model_clone(m); ListOf_t* loc2 = Model_getListOfCompartments(m2); fail_unless(ListOf_size(loc2) == 2); i = ListOf_appendFrom(loc, loc2); fail_unless(i == LIBSBML_OPERATION_SUCCESS); fail_unless(ListOf_size(loc) == 4); ListOf_t* los = Model_getListOfSpecies(m); i = ListOf_appendFrom(loc, los); fail_unless(i == LIBSBML_INVALID_OBJECT); Model_free(m); Model_free(m2); Species_free((Species_t*)sp); Compartment_free((Compartment_t*)c); }