const char * tree_string (NODE *node, int init) { static char buf[1024]; static int len; if (init) { len = 0; } if (node->type == N_OP) { if (node->left) { if (PRECEDENCE(node, node->left)) { len += sprintf(&buf[len], "("); } tree_string(node->left, 0); if (PRECEDENCE(node, node->left)) { len += sprintf(&buf[len], ")"); } len += sprintf(&buf[len], " %c ", node->val.ch); } else { len += sprintf(&buf[len], "%c", node->val.ch); } if (PRECEDENCE(node, node->right)) { len += sprintf(&buf[len], "("); } tree_string(node->right, 0); if (PRECEDENCE(node, node->right)) { len += sprintf(&buf[len], ")"); } } else { len += sprintf(&buf[len], "%s", node->val.name); } return buf; }
int test_point_crossover(void) { int i; struct test *t; struct tree *t1; struct tree *t2; char *t1_before; char *t2_before; char *t1_after; char *t2_after; /* setup */ t = malloc(sizeof(struct test)); test_setup_function_set(t); test_setup_terminal_set(t); for (i = 0; i < 1; i++) { /* generate tree 1 and 2 */ t1 = tree_generate(FULL, t->fs, t->ts, 1); t2 = tree_generate(FULL, t->fs, t->ts, 1); /* before crossover */ mu_print("BEFORE:\n"); t1_before = tree_string(t1); t2_before = tree_string(t2); mu_print("t1 tree: %s\n", t1_before); mu_print("t2 tree: %s\n", t2_before); mu_print("t1 size: %d depth %d\n", t1->size, t1->depth); mu_print("t2 size: %d depth %d\n", t2->size, t2->depth); /* crossover */ point_crossover(t1, t2); /* after crossover */ mu_print("AFTER:\n"); t1_after = tree_string(t1); t2_after = tree_string(t2); mu_print("t1 tree: %s\n", t1_after); mu_print("t2 tree: %s\n", t2_after); mu_print("t1 size: %d depth %d\n", t1->size, t1->depth); mu_print("t2 size: %d depth %d\n", t2->size, t2->depth); mu_print("\n"); /* clean up */ tree_destroy(t1); tree_destroy(t2); free(t1_before); free(t2_before); free(t1_after); free(t2_after); } /* clean up */ test_teardown_function_set(t); test_teardown_terminal_set(t); free(t); return 0; }
int test_point_crossover(void) { int i; char *t1_before; char *t2_before; char *t1_after; char *t2_after; for (i = 0; i < 1; i++) { setup(); mu_print("BEFORE:\n"); t1_before = tree_string(t1); t2_before = tree_string(t2); mu_print("t1 tree: %s\n", t1_before); mu_print("t2 tree: %s\n", t2_before); mu_print("t1 size: %d depth %d\n", t1->size, t1->depth); mu_print("t2 size: %d depth %d\n", t2->size, t2->depth); point_crossover(t1, t2); mu_print("AFTER:\n"); t1_after = tree_string(t1); t2_after = tree_string(t2); mu_print("t1 tree: %s\n", t1_after); mu_print("t2 tree: %s\n", t2_after); mu_print("t1 size: %d depth %d\n", t1->size, t1->depth); mu_print("t2 size: %d depth %d\n", t2->size, t2->depth); mu_print("\n"); teardown(); free(t1_before); free(t2_before); free(t1_after); free(t2_after); } setup(); mu_print("BEFORE:\n"); tree_print(t1); tree_print(t2); point_crossover(t1, t2); mu_print("AFTER:\n"); tree_print(t1); tree_print(t2); mu_print("\n\nBEFORE:\n"); tree_print(t1); tree_print(t2); point_crossover(t1, t2); mu_print("AFTER:\n"); tree_print(t1); tree_print(t2); teardown(); return 0; }
static char *prepare_line(struct wdgt *w, struct process *p) { char *tree, state = p->proc->state; int offset = 0; if (!p) return 0; tree = tree_string(tree_root, p->proc); if(state == 'S') state = ' '; if (show_linenr) offset = snprintf(w->mwin->gbuf, w->mwin->gbsize, "\x6%4d ", p->line + 1); if (offset < 0) return ""; if(show_owner) snprintf(w->mwin->gbuf+offset, w->mwin->gbsize-offset ,"\x3%5d %c%c \x3%-8s \x2%s \x3%s", p->proc->pid, get_state_color(state), state, get_owner_name(proc_pid_uid(p->proc->pid)), tree, get_cmdline(p->proc->pid)); else snprintf(w->mwin->gbuf+offset, w->mwin->gbsize-offset,"\x3%5d %c%c \x2%s \x3%s", p->proc->pid, get_state_color(state), state, tree, get_cmdline(p->proc->pid)); return w->mwin->gbuf; }