Пример #1
0
Файл: tnfa.c Проект: berkus/moto
char* tnfa_toString(TNFA* tnfa){
	StringBuffer* sb = buf_createDefault();
	char* result;
	int i;
	IntEnumeration* ie;
	
	buf_printf(sb,"\nStart state s%d\nFinish state s%d",tnfa->start,tnfa->finish);
	for(i=0;i<tnfa->laststate;i++){
		if(ihtab_contains(tnfa->states,i)){
			TFATrans* t;
			buf_printf(sb,"\ns%d in: %d out: ",i,itoi_get(tnfa->inputOrder,i));
			t= ihtab_get(tnfa->states, i);
			while(t!=NULL){
				if (t->c==0)
					buf_printf(sb,"<s%d,'\\0',%d,%c> ",t->to,t->tag,t->priority);
				else
					buf_printf(sb,"<s%d,'%c',%d,%c> ",t->to,t->c,t->tag,t->priority);
				t=t->next;
			}
		}
	}

	buf_printf(sb,"\n#Tags = %d #Minimized = %d Minimized Tags ={",tnfa->tagcount,iset_size(tnfa->minimized));
	ie = iset_elements(tnfa->minimized);
	while(ienum_hasNext(ie)){
	   buf_printf(sb,"%d",ienum_next(ie));
	   if(ienum_hasNext(ie)) buf_putc(sb,',');
	}
	buf_putc(sb,'}');
	result= buf_toString(sb);
	buf_free(sb);
	return(result);
}
Пример #2
0
int iset_comp(void* p1, void* p2) {
    IntSet* is1 = (IntSet*)p1;
    IntSet* is2 = (IntSet*)p2;
    int i;

    if (iset_size(is1) != iset_size(is2))
        return -1;

    for (i = 0; i < is1->cap; i++) {
        ISBucket *b = &is1->buckets[i];
        ISBucketNode *curnode = b->elements;
        while(curnode != NULL) {
            if (!iset_contains(is2,curnode->key))
                return -1;
            curnode = curnode->next;
        }
    }

    return 0;
}
Пример #3
0
static void set_test_basic_operation(_object* set, struct test_data_desc* td_desc) {
	address *test_data_addr   = td_desc->data_repo;
	//unknown_traits *td_traits = td_desc->data_traits;

	iset_clear(set);
	dbg_assert(iset_empty(set));

	{
		iset_insert(set, test_data_addr[4]);
		iset_insert(set, test_data_addr[5]);
		iset_insert(set, test_data_addr[3]);
		iset_insert(set, test_data_addr[6]);
		iset_insert(set, test_data_addr[2]);
		iset_insert(set, test_data_addr[7]);
		iset_insert(set, test_data_addr[1]);
		iset_insert(set, test_data_addr[8]);
	}
	/* now the set contains { 1, 2, 3, 4, 5, 6, 7, 8 } */
	dbg_assert(iset_size(set) == 8);
	{
		intptr_t current = 1;

		for (; current <= 8; current ++) {
			dbg_assert(iset_contains(set, test_data_addr[current]));
		}
		dbg_assert(iset_contains(set, test_data_addr[0]) == false);
		dbg_assert(iset_contains(set, test_data_addr[9]) == false);
	}

	/* test remove, delete the even ones */
	dbg_assert(iset_size(set) == 8);
	{
		/* now the set contains { 1, 2, 3, 4, 5, 6, 7, 8 } */
		intptr_t x;
		bool res;

		for (x = 2; x <= 8; x +=2) {
			res = iset_remove(set, test_data_addr[x]);
			dbg_assert(res == 1);
		}

		dbg_assert(iset_size(set) == 4);
		for (x = 1; x <= 8; x ++) {
			bool exist = x % 2 ? true : false;
			dbg_assert(iset_contains(set, test_data_addr[x]) == exist);
		}

		dbg_assert(iset_contains(set, test_data_addr[0]) == false);
	}

	dbg_assert(iset_size(set) == 4);
	{
		bool bool_res = false;

		/* remove elements one by one */

		bool_res = iset_remove(set, test_data_addr[3]);
		/* now the set is { 1,  5, 7 } */
		dbg_assert(bool_res == true);
		dbg_assert(iset_size(set) == 3);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[3]) == false);

		/* try to remove another 3, should failed */

		bool_res = iset_remove(set, test_data_addr[3]);
		/* now the set is { 1,  5, 7 } */
		dbg_assert(bool_res == false);
		dbg_assert(iset_size(set) == 3);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[3]) == false);


		bool_res = iset_remove(set, test_data_addr[5]);
		/* now the set is { 1,   7 } */
		dbg_assert(bool_res == true);
		dbg_assert(iset_size(set) == 2);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[5]) == false);
		

		bool_res = iset_remove(set, test_data_addr[1]);
		/* now the set is { 7 } */
		dbg_assert(bool_res == true);
		dbg_assert(iset_size(set) == 1);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[1]) == false);
		dbg_assert(iset_contains(set, test_data_addr[7]) == true);


		bool_res = iset_remove(set, test_data_addr[7]);
		/* now the set is { } */
		dbg_assert(bool_res == true);
		dbg_assert(iset_size(set) == 0);
		dbg_assert(iset_empty(set) == true);
		dbg_assert(iset_contains(set, test_data_addr[7]) == false);

		/* try to remove element from empty set */

		bool_res = iset_remove(set, test_data_addr[7]);
		/* now the set is { } */
		dbg_assert(bool_res == false);
		dbg_assert(iset_size(set) == 0);
		dbg_assert(iset_empty(set) == true);
		dbg_assert(iset_contains(set, test_data_addr[7]) == false);

		/* trying to add element into the set after removing from empty set */
		iset_insert(set, test_data_addr[2]);
		/* now the set is { 2 } */
		dbg_assert(iset_size(set) == 1);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[2]) == true);
		dbg_assert(iset_contains(set, test_data_addr[0]) == false);

		iset_insert(set, test_data_addr[3]);
		/* now the set is { 2, 3 } */
		dbg_assert(iset_size(set) == 2);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[2]) == true);
		dbg_assert(iset_contains(set, test_data_addr[3]) == true);

		iset_clear(set);
	}

	dbg_assert(iset_empty(set) == true);
	{
		/* try to add same element to the set */

		iset_insert(set, test_data_addr[1]);
		/* now the set is { 1 } */
		dbg_assert(iset_size(set) == 1);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[1]) == true);
		dbg_assert(iset_contains(set, test_data_addr[0]) == false);

		/* insert 1 again */

		iset_insert(set, test_data_addr[1]);
		/* now the set is { 1 } */
		dbg_assert(iset_size(set) == 1);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[1]) == true);
		dbg_assert(iset_contains(set, test_data_addr[0]) == false);

		/* insert 1 again and again */

		iset_insert(set, test_data_addr[1]);
		/* now the set is { 1 } */
		dbg_assert(iset_size(set) == 1);
		dbg_assert(iset_empty(set) == false);
		dbg_assert(iset_contains(set, test_data_addr[1]) == true);
		dbg_assert(iset_contains(set, test_data_addr[0]) == false);
	}

	/* test clear */
	{
		iset_clear(set);
		/* now the set is empty */
		dbg_assert(iset_empty(set));
		
		/* clear an empty set */
		iset_clear(set);
		dbg_assert(iset_empty(set));

		iset_insert(set, test_data_addr[1]);
		iset_insert(set, test_data_addr[1]);
		iset_insert(set, test_data_addr[1]);
		iset_insert(set, test_data_addr[1]);

		/* now the set is { 1 } */
		iset_clear(set);
		dbg_assert(iset_empty(set));
	}
}
Пример #4
0
static void set_test_basic_itr_operation(_object* set, struct test_data_desc* td_desc) {
	address *test_data_addr   = td_desc->data_repo;
	unknown_traits *td_traits = td_desc->data_traits;
	iset_clear(set);
	dbg_assert(iset_empty(set));

	iset_insert(set, test_data_addr[4]);
	iset_insert(set, test_data_addr[5]);
	iset_insert(set, test_data_addr[3]);
	iset_insert(set, test_data_addr[6]);
	iset_insert(set, test_data_addr[2]);
	iset_insert(set, test_data_addr[7]);
	iset_insert(set, test_data_addr[1]);
	iset_insert(set, test_data_addr[8]);
	/* now the set contains { 1, 2, 3, 4, 5, 6, 7, 8 } */

	dbg_assert(iset_size(set) == 8);
	{
		iterator itr = iset_itr_create(set, itr_begin);
		const_iterator end = iset_itr_end(set);
		intptr_t current = 1;
		const unknown* x = NULL;

		/* traverse the set */
		for (; !itr_equals(itr, end); itr_to_next(itr)) {
			x = itr_get_ref(itr);
			dbg_assert(td_traits->__equals(x, test_data_addr[current]));
			current ++;
		}

		/* test itr_assign */
		iset_itr_assign(set, itr, itr_begin);
		x = itr_get_ref(itr);
		dbg_assert(td_traits->__equals(x, test_data_addr[1]));
		iset_itr_assign(set, itr, itr_end);
		itr_to_prev(itr);
		x = itr_get_ref(itr);
		dbg_assert(td_traits->__equals(x, test_data_addr[8]));

		/* test itr_find */
		iset_itr_find(set, itr, test_data_addr[0]);
		dbg_assert(itr_equals(itr, iset_itr_end(set)));
		iset_itr_find(set, itr, test_data_addr[9]);
		dbg_assert(itr_equals(itr, iset_itr_end(set)));

		for (current = 1; current <= 8; current ++) {
			iset_itr_find(set, itr, test_data_addr[current]);
			dbg_assert(!itr_equals(itr, iset_itr_end(set)));
		}

		/* test itr_remove */
		iset_itr_find(set, itr, test_data_addr[4]);
		dbg_assert(!itr_equals(itr, iset_itr_end(set)));

		iset_itr_remove(set, itr);
		/* now the set is { 1, 2, 3,  , 5, 6, 7, 8 } */
		dbg_assert(iset_size(set) == 7);
		for (current = 0; current <= 9; current ++) {
			iset_itr_find(set, itr, test_data_addr[current]);
			if (current == 0 || current == 9 || current == 4) {
				dbg_assert(itr_equals(itr, iset_itr_end(set)));
			}
			else {
				dbg_assert(!itr_equals(itr, iset_itr_end(set)));
			}
		}

		/* test continuous itr_remove */
		iset_itr_find(set, itr, test_data_addr[5]);
		dbg_assert(!itr_equals(itr, iset_itr_end(set)));

		iset_itr_remove(set, itr);
		/* now the set is { 1, 2, 3,   6, 7, 8 } */
		dbg_assert(iset_size(set) == 6);
		for (current = 0; current <= 9; current ++) {
			iset_itr_find(set, itr, test_data_addr[current]);
			if (current == 0 || current == 9 || current == 4 || current == 5) {
				dbg_assert(itr_equals(itr, iset_itr_end(set)));
			}
			else {
				dbg_assert(!itr_equals(itr, iset_itr_end(set)));
			}
		}

		itr_destroy(itr);
	}

	return;
}