Example #1
0
void test_create(){
	DESCRIBE("CRIA ARVORE");
	WHEN("Eu crio uma ARVORE");


	IF("Uma chave");
	THEN("Resultado deve ser ponteiro");
	struct node_avl * p = avl_insert(NULL,1);
	isNotNull(p);

	THEN("Deve ter altura 1");
	isEqual(avl_height(p),1);

	avl_destroy(p);
}
Example #2
0
void test_diverse(){
	int i;
	struct node_avl * p = NULL;

	DESCRIBE("Teste de diferentes balanceamentos");
	
	for(i=1; i<=8; i++){
		struct node_avl * new_root = avl_insert(p,i);
		isNotNull(new_root);
		p = new_root;
	}

	
	THEN("Altura da árvore deve ser 3");
	isEqual(avl_height(p),1);

	DESCRIBE("Remove 5 e 1");
	p = avl_delete(p,5);
	p = avl_delete(p,1);
	THEN("Altura deve ser 2");
	isEqual(avl_height(p),1);

	DESCRIBE("Remove 8 e 7");
	p = avl_delete(p,8);
	p = avl_delete(p,7);
	THEN("Altura deve ser 2");
	isEqual(avl_height(p),0);

	DESCRIBE("Remove 3 (raiz)");
	p = avl_delete(p,3);
	THEN("Altura deve ser 1");
	isEqual(avl_height(p),0);


	DESCRIBE("Remove 2, 4 e 6");
	p = avl_delete(p,2);
	p = avl_delete(p,4);
	p = avl_delete(p,6);
	THEN("Altura deve ser 0");
	isEqual(avl_height(p),0);

}
Example #3
0
void test_insert(){
	int i;
	struct node_avl * p = NULL;

	DESCRIBE("INSERE ELEMENTOS");
	WHEN("Eu insiro elementos");
	IF("Insiro um número razoável MAX");
	THEN("Deve inserir todos");
	for(i=1; i<=MAX; i++){
		struct node_avl * new_root = avl_insert(p,i);
		isNotNull(new_root);
		p = new_root;
	}

	THEN("Deve não estar vazia");
	isNotEqual(avl_height(p),0);


	THEN("Deve encontrar todas as chaves inseridas");
	
	for(i=1; i<=MAX; i++){
		isNotNull(avl_search(p,i));
		
	}

	THEN("Alturas da subárvore direita e esquerda não podem ter diferença maior que 1");
	if (p){
		int left, right, diff;
		left = avl_height(p->left);
		right = avl_height(p->right);
		diff = left>right?left-right:right-left;
		diff = diff>1? 0:1;
		isNotEqual(diff,0);
	}
	else isNotNull(NULL);

	THEN("Consegue imprimir INFIX");
	avl_print_infix(p);

	avl_destroy(p);
}
Example #4
0
void test_delete(){
	int i;
	struct node_avl * p = NULL;

	DESCRIBE("Remove elementos");

	for(i=1; i<=MAX; i++){
		struct node_avl * new_root = avl_insert(p,i);
		isNotNull(new_root);
		p = new_root;
	}


	THEN("Remove todas as chaves");
	for(i=1; i<=MAX; i++){
		struct node_avl * new_root = avl_delete(p,i);
		p = new_root;
	}
	isNull(p);
}
Example #5
0
void finit(){
	//push the address of the next open cell to the stack
	COLON(here);
	COMPPRIM(LIT);
	enter(0);
	COMPPRIM(PEEK);
	COMPPRIM(EXIT);
	//compile TOS
	COLON(comptos);
	enter(here);
	COMPPRIM(POKE);
	enter(here);
	COMPPRIM(LIT);
	enter(1);
	COMPPRIM(PLUS);
	COMPPRIM(LIT);
	enter(0);
	COMPPRIM(POKE);
	COMPPRIM(EXIT);
	//turn a nonzero value to -1, and keep zero values
	COLON(logify);
	COMPPRIM(LIT);
	enter(0);
	COMPPRIM(EQL);
	COMPPRIM(NOT);
	COMPPRIM(EXIT);
	//branch if false
	COLON(notbranch);
	COMPPRIM(LIT);  //I could have used logify and then not, but there's an extra 'not' in logify, so for efficiency I just implemented it inline.
	enter(0);
	COMPPRIM(EQL);
	COMPPRIM(PUSNXT);
	COMPPRIM(AND); //compute branch value depending on the boolean found on the stack.
	COMPPRIM(FROMR);
	COMPPRIM(PLUS);
	COMPPRIM(TOR);
	//add the branch value to the return value and store it back on the return stack, overwriting the old value.
	COMPPRIM(EXIT);
	//peek xt
	COLON(peekxt);
	COMPPRIM(LIT);
	enter(127);
	COMPPRIM(WORD);
	COMPPRIM(DUP);
	enter(comptos);
	COMPPRIM(FIND);
	enter(here);
	COMPPRIM(LIT);
	enter(1);
	COMPPRIM(MINUS);
	COMPPRIM(PEEK);
	COMPPRIM(LIT);
	enter(0);
	COMPPRIM(POKE);
	COMPPRIM(EXIT);
	//execute xt
	COLON(excut);
	int extspace = *dict + 3;
	COMPPRIM(LIT);
	enter(extspace);
	COMPPRIM(POKE);
	enter(0);
	COMPPRIM(EXIT);
	//interpret
	intern(DOCOL, -1);
	COMPPRIM(FROMR);
	COMPPRIM(FROMR);
	COMPPRIM(FROMR);
	COMPPRIM(PDROP);
	COMPPRIM(PDROP);
	COMPPRIM(PDROP);
	enter(*dict+1);
	enter(0);
	int intloop = *dict-1;
	enter(peekxt);
	COMPPRIM(LIT);
	enter(1);
	COMPPRIM(EQL);
	COMPPRIM(NOT);
	IF(intfound);
	enter(excut);
	ELSE(intfound);
	COMPPRIM(ATOI);
	THEN(intfound);
	COMPPRIM(LIT);
	enter((int)'\n');
	COMPPRIM(LIT);
	enter((int)'k');
	COMPPRIM(LIT);
	enter((int)'o');
	COMPPRIM(EMIT);
	COMPPRIM(EMIT);
	COMPPRIM(EMIT);
	COMPPRIM(FROMR);
	COMPPRIM(PDROP);
	enter(intloop);
	//compile
	intern(DOCOL, 0);
	COMPPRIM(FROMR);
	COMPPRIM(FROMR);
	COMPPRIM(FROMR);
	COMPPRIM(PDROP);
	COMPPRIM(PDROP);
	COMPPRIM(PDROP);
	enter(*dict+1);
	enter(0);
	int comploop = *dict-1;
	enter(peekxt);
	COMPPRIM(DUP);
	COMPPRIM(LIT);
	enter(1);
	COMPPRIM(EQL);
	COMPPRIM(NOT);
	IF(compfound);
	IF(compimm);
	enter(excut);
	ELSE(compimm);
	enter(comptos);
	ELSE(compfound);
	COMPPRIM(PDROP);
	COMPPRIM(LIT);
	COMPPRIM(LIT);
	enter(comptos);
	COMPPRIM(ATOI);
	enter(comptos);
	THEN(compfound); THEN(compimm);
	COMPPRIM(FROMR);
	COMPPRIM(PDROP);
	enter(comploop);
	//colon compiler
	COLON(colon);
	enter(here);
	COMPPRIM(LIT);
	enter(3);
	COMPPRIM(DUP);
	COMPPRIM(PEEK);
	enter(comptos);
	COMPPRIM(POKE);
	COMPPRIM(LIT);
	enter(127);
	COMPPRIM(WORD);
	COMPPRIM(PDROP);
	COMPPRIM(LIT);
	enter(0);
	COMPPRIM(DUP);
	enter(comptos);
	enter(comptos);
	COMPPRIM(EXIT);
	//cold start to setup interpreter
	mputs("cs @ ");
	puts(itoa(*dict));
	int coldstart = *dict;
	enter(DOCOL);
	enter(intloop);

	IP=coldstart;
	cs=coldstart;
}