Exemple #1
0
void Testbst_tree_lookup(CuTest *tc)
  {
    test_bst_tree_t *root;
    test_bst_tree_t *elem;
    int i;
    int j;
    bool ret;
    void *pret;

    root = NULL;
    for (i = 0, j = 30; i < j; i++, j--)
      {
        elem = malloc(sizeof(*elem));
        elem->key = i;
        ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
        elem = malloc(sizeof(*elem));
        elem->key = j;
        ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
      }
    CuAssertPtrNotNull(tc, root);
    for (i = 0, j = 30; i < j; i++, j--)
      {
        pret = bst_tree_lookup(root, i, btree, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
        pret = bst_tree_lookup(root, j, btree, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
      }
  }
Exemple #2
0
void Testbst_tree_prune(CuTest *tc)
  {
    test_bst_tree_t *root;
    test_bst_tree_t *grafted;
    test_bst_tree_t *elem;
    int i;
    int j;
    bool ret;
    void *pret;

    root = NULL;
    for (i = 0, j = 6; i < j; i++, j--)
      {
        elem = malloc(sizeof(*elem));
        elem->key = i;
        ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
        elem = malloc(sizeof(*elem));
        elem->key = j;
        ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
      }
    grafted = bst_tree_prune(root, j, btree, BTREE_COMPARE_KEY);
    CuAssertPtrEquals(tc, NULL, grafted);
    grafted = bst_tree_prune(root, 5, btree, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, grafted);
    pret = bst_tree_lookup(grafted, 1, btree, BTREE_COMPARE_KEY);
    CuAssertPtrEquals(tc, NULL, pret);
    pret = bst_tree_lookup(grafted, 5, btree, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);
    ret = bst_tree_graft(root, grafted, btree, BTREE_COMPARE_KEY);
    CuAssertTrue(tc, ret);
    for (i = 0, j = 6; i < j; i++, j--)
      {
        pret = bst_tree_remove(root, i, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
        ret = bst_tree_remove(root, j, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
      }
    CuAssertPtrEquals(tc, NULL, root);
  }
Exemple #3
0
void Testbst_tree_remove(CuTest *tc)
  {
  test_bst_tree_t *root;
   test_bst_tree_t *elem;
   void        *pret;
   bool        ret;

   root = NULL;

   elem = malloc(sizeof(*elem));
   elem->key = 4;
   ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
   CuAssertTrue(tc, ret);

   elem = malloc(sizeof(*elem));
   elem->key = 5;
   ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
   CuAssertTrue(tc, ret);

   elem = malloc(sizeof(*elem));
   elem->key = 2;
   ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
   CuAssertTrue(tc, ret);

   elem = malloc(sizeof(*elem));
   elem->key = 3;
   ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
   CuAssertTrue(tc, ret);

   elem = malloc(sizeof(*elem));
   elem->key = 1;
   ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
   CuAssertTrue(tc, ret);

   pret = bst_tree_remove(root, 2, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
   CuAssertPtrNotNull(tc, pret);
   CuAssertIntEquals(tc, 4, root->key);
   CuAssertIntEquals(tc, 5, ((test_bst_tree_t *)root->btree.right)->key);
   CuAssertIntEquals(tc, 3, ((test_bst_tree_t *)root->btree.left)->key);
   CuAssertIntEquals(tc, 1, ((test_bst_tree_t *)((test_bst_tree_t *)root->btree.left)->btree.left)->key);
  }
Exemple #4
0
void Testbst_tree_graft(CuTest *tc)
  {
    test_bst_tree_t *root1;
    test_bst_tree_t *root2;
    test_bst_tree_t *elem;
    int i;
    int j;
    bool ret;
    void *pret;

    root1 = NULL;
    root2 = NULL;
    for (i = 0, j = 6; i < j; i++, j--)
      {
        elem = malloc(sizeof(*elem));
        elem->key = i;
        ret = bst_tree_insert(root1, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
        elem = malloc(sizeof(*elem));
        elem->key = j;
        ret = bst_tree_insert(root2, elem, btree, BTREE_COMPARE);
        CuAssertTrue(tc, ret);
      }
    pret = bst_tree_lookup(root1, i + 1, btree, BTREE_COMPARE_KEY);
    CuAssertPtrEquals(tc, NULL, pret);
    ret = bst_tree_graft(root1, NULL, btree, BTREE_COMPARE);
    CuAssertTrue(tc, !ret);
    ret = bst_tree_graft(root1, root2, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);
    pret = bst_tree_lookup(root1, j + 1, btree, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);
    for (i = 0, j = 6; i < j; i++, j--)
      {
        pret = bst_tree_remove(root1, i, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
        pret = bst_tree_remove(root1, j, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
        CuAssertPtrNotNull(tc, pret);
      }
  }
Exemple #5
0
bst_node *bst_tree_init(int a[],int length){
	int i=0;
	bst_node * root = (bst_node *)malloc(sizeof(bst_node));
	root->data = a[0];
	root->left = null;
	root->right = null;
	for(i = 1;i<length;i++){
		bst_node *node = (bst_node *)malloc(sizeof(bst_node));
		node->data = a[i];
		node->left = null;
		node->right = null;
		bst_tree_insert(root,node);
	}
	return root ;
}
Exemple #6
0
void Testbst_tree_insert(CuTest *tc)
  {
    test_bst_tree_t *root;
    test_bst_tree_t *elem;
    bool ret;

    root = NULL;
    elem = NULL;
    ret = _bst_tree_insert(NULL, elem, 0, BTREE_COMPARE);
    CuAssertTrue(tc, !ret);
    ret = bst_tree_insert(root, NULL, btree, BTREE_COMPARE);
//    ret = _bst_tree_insert(&(root),
//            (NULL),
//             (unsigned int)offsetof(typeof(*(root)), btree),
//             BTREE_COMPARE);
    CuAssertTrue(tc, !ret);
    ret = bst_tree_insert(root, elem, btree, NULL);
    CuAssertTrue(tc, !ret);
    elem = malloc(sizeof(*elem));
    elem->key = 2;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);
    elem = malloc(sizeof(*elem));
    elem->key = 1;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);
    elem = malloc(sizeof(*elem));
    elem->key = 1;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, !ret);
    elem = malloc(sizeof(*elem));
    elem->key = 3;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);
    elem = root;
    CuAssertIntEquals(tc, 2, elem->key);
    CuAssertIntEquals(tc, 1, ((test_bst_tree_t *)elem->btree.left)->key);
    CuAssertIntEquals(tc, 3, ((test_bst_tree_t *)elem->btree.right)->key);
  }
Exemple #7
0
void Testbst_tree_walk_postorder(CuTest *tc)
  {
 	test_bst_tree_t *root;
    test_bst_tree_t *elem;
    void		*pret;
    bool		ret;

	root = NULL;
    elem = malloc(sizeof(*elem));
    elem->key = 8;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 6;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 5;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 7;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 10;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 9;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    elem = malloc(sizeof(*elem));
    elem->key = 11;
    ret = bst_tree_insert(root, elem, btree, BTREE_COMPARE);
    CuAssertTrue(tc, ret);

    walk_state = true;
	prev_value = -1;
	bst_tree_walk_postorder(root, btree, btree_walk_postorder_cb, NULL);
	CuAssertIntEquals(tc,true, walk_state);

    pret = bst_tree_remove(root, 8, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 6, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 5, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 7, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 10, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 9, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    pret = bst_tree_remove(root, 11, btree, BTREE_COMPARE, BTREE_COMPARE_KEY);
    CuAssertPtrNotNull(tc, pret);

    CuAssertPtrEquals(tc, NULL, root);
  }