Example #1
0
static void
randomForest(void)
{
	int	i, b, k;
 
	for (i = 0; i < FOREST_ITERS; i++) {
		int		treeno;
		struct tree	*t;
 
		if (i % FOREST_GC == 0) {
			stoGc();
			stoAudit();
		}

		/* Select a random tree for replacement */
		treeno = rand() % FOREST_SIZE;
 
		/* Either make a new leaf, or construct a new root */
		/* One in 4 times make a leaf. */
		if ((rand() & 0x30) == 0) {
			/* LEAF: One in 8 times make a big one */
			long	r  = rand();
			int	fz = r % TREE_FUZZ;
			int	sz = 120 + fz;
			if ((r & 0x70) == 0) sz *= 100;
			treeCheck(forest[treeno], treeNo);
/*
			treeFree(forest[treeno]);
*/
			forest[treeno] = leafNewEmpty(rand() % sz);
		}
		else {
			/* ROOT: Fill with subtrees */
			t = treeNewEmpty(rand() % TREE_MAX_WIDTH);
 
/*
			treeFree(forest[treeno]);
*/
			treeCheck(forest[treeno], treeNo);
			forest[treeno] = 0;
			for (b = 0; b < t->argc; b++) {
				k = rand() % FOREST_SIZE;
				treeSetElt(t, b, forest[k]);
			}
			forest[treeno] = t;
		}
	}
	stoGc();
	stoAudit();
	stoShow();

}
Example #2
0
static void
treeCheck(tree_sTable *tp, tree_sNode *np, int *count, int *maxlevel,
          int *hight, int level, char *(*printKey)(tree_sNode *))
{
    int comp;
    int hleft;
    int hright;

    if (np == tp->null) {
        *hight = 0;
        return;
    }

    if (level > *maxlevel)
        *maxlevel = level;

    treeCheck(tp, np->left, count, maxlevel, &hleft, level+1, printKey);  
    if (np->left != tp->null) {
        if (np->left->parent != np) {
            printf("leftLinkerror: Node key: %s not linked to parent key: %s\n",
                   printKey(np->left), printKey(np));
        }
        comp = tp->compareFunc(tp, np, np->left);
        if (comp < 1) {
            printf("leftLink sort error: Node key: %s not less than key: %s\n",
                   printKey(np->left), printKey(np));
        }
    }

    (*count)++;
    treeCheck(tp, np->right, count, maxlevel, &hright, level+1, printKey); 
    if (np->right != tp->null) {
        if (np->right->parent != np) {
            printf("rightLinkerror: Node key: %s not linked to parent key: %s\n",
                   printKey(np->right), printKey(np));
        }
        comp = tp->compareFunc(tp, np, np->right);
        if (comp > -1) {
            printf("rightLink sort error: Node key: %s not greater than key: %s\n",
                   printKey(np->right), printKey(np));
        }
    }

    if ((hright - hleft) != np->bal) {
        printf("balerror key: %s, level: %d, hr: %d, hl: %d, bal: %d\n",
               printKey(np), level, hright, hleft, np->bal);
    }
    *hight = (hright > hleft ? hright : hleft) + 1;
}
Example #3
0
void
testStore2(void)
{
	int	i;
	long	bO, bF, grossBytes;
 
	bO = stoBytesAlloc - stoBytesFree - stoBytesGc;
 
	printforest = 1;
	grossBytes = 0;
 
	forest = (struct tree **)stoAlloc(int0,
					  FOREST_SIZE*sizeof(struct tree *));
	for (i = 0; i < FOREST_SIZE; i++) forest[i] = 0;
 
	randomForest();

	for (i = 0; i < FOREST_SIZE; i++) {
		long sz = treeSize(forest[i]);
		printf("%d: %ld bytes\n", i, sz);
		grossBytes += sz;
		if (printforest) treePrint(osStdout, forest[i]);
	}
 
	for (i = 0; i < FOREST_SIZE; i++) {
		treeCheck(forest[i], treeNo);
		treeFree(forest[i]);
	}

	bF = stoBytesAlloc - stoBytesFree - stoBytesGc;
	printf("Memory: %lu (owned) %lu (alloc) %ld (net) %ld (gross)\n",
	       stoBytesOwn, bF - bO, treeBytes, grossBytes);
 
	stoFree(forest);
}
Example #4
0
void
tree_PrintTable(pwr_tStatus *sts,
                tree_sTable *tp,
                void (*printNode)(tree_sNode *),
                char *(*printKey)(tree_sNode *))
{
    int count = 0;
    int maxlevel = 0;
    int hight = 0;

#if 1
    treePrintInorder(tp, tp->root, printNode);
#endif
    treeCheck(tp, tp->root, &count, &maxlevel, &hight, 0, printKey);
    printf("count: %d, maxlevel: %d, hight: %d\n", count, maxlevel, hight);
    printf("nNode.......: %d\n", tp->nNode);
    printf("nError......: %d\n", tp->nError);
    printf("nHZ.........: %d\n", tp->nHZ);
    printf("nHN.........: %d\n", tp->nHN);
    printf("nHP.........: %d\n", tp->nHP);
    printf("maxDepth....: %d\n", tp->maxDepth);
    printf("nLL.........: %d\n", tp->nLL);
    printf("nLR.........: %d\n", tp->nLR);
    printf("nRL.........: %d\n", tp->nRL);
    printf("nRR.........: %d\n", tp->nRR);
    printf("nMalloc.....: %d\n", tp->nMalloc);
    printf("nAlloc......: %d\n", tp->nAlloc);
    printf("nFree.......: %d\n", tp->nFree);
    printf("nInsert.....: %d\n", tp->nInsert);
    printf("nDelete.....: %d\n", tp->nDelete);
    printf("nSearch.....: %d\n", tp->nSearch);
}
Example #5
0
static void
treeCheck(struct tree *t, int treeno)
{
        if (!t) return;
 
	assert(t->treeno <= treeno);

	if (!t->isLeaf) {
		int		i;
		for (i = 0; i < t->argc; i++)
			treeCheck(t->u.argv[i], t->treeno);
	}
}