Ejemplo n.º 1
0
/* rudimentary check for memory leaks */
static void
stress_test()
{
	struct sorted_points *sp;
	struct point dummy;
	static const int NINSERT = 1024;
	static const int NITER = 20 * 1024;
	int ii;
	int jj;
	int ret;

	sp = sp_init();
	printf("this test may take a minute.\n");

	for (ii = 0; ii < NITER; ii++) {
		for (jj = 0; jj < NINSERT; jj++) {
			sp_add_point(sp, (double)(NINSERT - jj), 1.0);
		}
		ret = sp_remove_by_index(sp, NINSERT, &dummy);
		assert(0 == ret);
		ret = sp_remove_by_index(sp, NINSERT - 1, &dummy);
		assert(1 == ret);
		for (jj = 0; jj < NINSERT - 1; jj++) {
			ret = sp_remove_first(sp, &dummy);
			assert(1 == ret);
		}
		ret = sp_remove_first(sp, &dummy);
		assert(0 == ret);
	}
	sp_destroy(sp);
}
Ejemplo n.º 2
0
int
sp_remove_by_index(struct sorted_points *sp, int index, struct point *ret)
{
	if(sp == NULL || sp->p == NULL){
		return 0;
	}
	if(index == 0){
		sp_remove_first(sp, ret);
		return 1;
	}
	int i = 0;
	struct sorted_points *temp, *prev;
	temp = sp;
	prev = sp;
	for(;i < index; i++){
		if(temp->next == NULL && i != index){
			return 0;
		}
		prev = temp;
		temp = temp->next;
	}
	prev->next = temp->next;
	ret->x = temp->p->x;
	ret->y = temp->p->y;
	temp->next = NULL;
	free(temp->p);
	temp->p = NULL;
	free(temp);
	temp = NULL;
	return 1;
}
Ejemplo n.º 3
0
static void
random_test()
{
	struct sorted_points *sp;
	static const int NRUNS = 512;
	static const int MAXSIZE = 1024;
	int i;
	int ret;


	printf("this test may also take a minute.\n");

	for (i = 0; i < NRUNS; i++) {
		struct point p1;
		int size = (int)(rand() % MAXSIZE);

		sp = alloc_random_list(size);
		ret = sp_delete_duplicates(sp);
		assert(ret >= 0);
		size -= ret;
		while (size > 0) {
			switch (rand() % 3) {
			case 0:
				ret = sp_remove_by_index(sp, 
							 (int)(rand() % size),
							 &p1);
				assert(ret);
				size--;
				break;
			case 1:
				ret = sp_remove_first(sp, &p1);
				assert(ret);
				size--;
				break;
			case 2:
				ret = sp_remove_last(sp, &p1);
				assert(ret);
				size--;
				break;
			default:
				assert(0);
			}
		}

		sp_destroy(sp);
	}
}
Ejemplo n.º 4
0
static void
basic_test()
{
	int ret;
	struct sorted_points *sp1;
	struct sorted_points *sp2;
	struct point p1;

	srand(0);
	sp1 = sp_init();
	sp2 = sp_init();

	// empty list checks
	ret = sp_remove_by_index(sp1, 1, &p1);
	assert(!ret);
	ret = sp_remove_by_index(sp1, 0, &p1);
	assert(!ret);
	ret = sp_remove_by_index(sp1, -1, &p1);
	assert(!ret);
	ret = sp_remove_first(sp1, &p1);
	assert(!ret);
	ret = sp_remove_last(sp1, &p1);
	assert(!ret);

	ret = sp_add_point(sp1, 1.0, 1.0);
	assert(ret);
	ret = sp_add_point(sp1, 1.0, 1.0);
	assert(ret);
	ret = sp_add_point(sp1, 1.0, 1.0);
	assert(ret);

	ret = sp_add_point(sp2, 3.0, 1.0);
	assert(ret);
	ret = sp_add_point(sp2, 2.0, 1.0);
	assert(ret);
	ret = sp_add_point(sp2, 1.0, 1.0);
	assert(ret);

	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);
	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);
	ret = sp_add_point(sp1, 4.0, 3.0);
	assert(ret);
	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);

	ret = sp_remove_last(sp1, &p1);
	assert(ret);
	assert(point_X(&p1) == 4.0);
	assert(point_Y(&p1) == 3.0);

	ret = sp_remove_first(sp1, &p1);
	assert(ret);
	assert(point_X(&p1) == 1.0);
	assert(point_Y(&p1) == 1.0);

	ret = sp_remove_by_index(sp1, 2, &p1);
	assert(ret);
	assert(point_X(&p1) == 2.0);
	assert(point_Y(&p1) == 2.0);

	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);
	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);
	ret = sp_add_point(sp1, 2.0, 2.0);
	assert(ret);

	ret = sp_remove_first(sp1, &p1);
	assert(ret);
	assert(point_X(&p1) == 1.0);
	assert(point_Y(&p1) == 1.0);

	ret = sp_delete_duplicates(sp1);
	assert(ret == 4);

	ret = sp_remove_first(sp1, &p1);
	assert(ret);
	assert(point_X(&p1) == 1.0);
	assert(point_Y(&p1) == 1.0);

	ret = sp_remove_first(sp1, &p1);
	assert(ret);
	assert(point_X(&p1) == 2.0);
	assert(point_Y(&p1) == 2.0);

	ret = sp_remove_first(sp1, &p1);
	assert(!ret);

	ret = sp_delete_duplicates(sp2);
	assert(ret == 0);

	ret = sp_add_point(sp2, 5.0, 2.0);
	assert(ret);
	ret = sp_add_point(sp2, 6.0, 3.0);
	assert(ret);
	ret = sp_add_point(sp2, 7.0, 4.0);
	assert(ret);
	ret = sp_add_point(sp2, 0.0, 1.0);
	assert(ret);

	ret = sp_remove_by_index(sp2, 5, &p1);
	assert(ret);
	assert(point_X(&p1) == 6.0);
	assert(point_Y(&p1) == 3.0);

	ret = sp_remove_by_index(sp2, 5, &p1);
	assert(ret);
	assert(point_X(&p1) == 7.0);
	assert(point_Y(&p1) == 4.0);

	ret = sp_remove_by_index(sp2, 5, &p1);
	assert(!ret);

	ret = sp_remove_by_index(sp2, 0, &p1);
	assert(ret);
	assert(point_X(&p1) == 0.0);
	assert(point_Y(&p1) == 1.0);

	sp_destroy(sp1);
	sp_destroy(sp2);
}