⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsut.c

📁 Mysql for Windows最新源码
💻 C
字号:
/************************************************************************The test module for the utilities(c) 1995 Innobase OyCreated 10/28/1995 Heikki Tuuri*************************************************************************/#include "../ut0lst.h"#include "../ut0mem.h"#include "../ut0byte.h"#include "../ut0sort.h"#include "../ut0rnd.h"typedef	struct node_struct	node_t;struct node_struct {	ulint			index;	ulint			zyx;	UT_LIST_NODE_T(node_t)	list1;	ulint			yzx;	UT_LIST_NODE_T(node_t)	list2;};/* Arrays to be sorted */ulint	uarr[100000];ulint	aux_uarr[100000];dulint	duarr[100000];dulint	aux_duarr[100000];/*********************************************************************Tests for two-way lists. */voidtest1(void)/*=======*/{	ulint				i;	UT_LIST_BASE_NODE_T(node_t)	base1;	UT_LIST_BASE_NODE_T(node_t)	base2;	node_t*				node;	node_t*				node2;		printf("-------------------------------------------\n");	printf("TEST 1. Test of two-way lists \n");	UT_LIST_INIT(base1);	UT_LIST_INIT(base2);		for (i = 0; i < 1000; i++) {		node = ut_malloc(sizeof(node_t));		node->index = 999 - i;		UT_LIST_ADD_FIRST(list1, base1, node);		UT_LIST_ADD_LAST(list2, base2, node);	}	UT_LIST_VALIDATE(list1, node_t, base1);	UT_LIST_VALIDATE(list2, node_t, base2);	node = UT_LIST_GET_FIRST(base1);		for (i = 0; i < 1000; i++) {		ut_a(node);		ut_a(node->index == i);		node = UT_LIST_GET_NEXT(list1, node);	}	ut_a(node == NULL);	node = UT_LIST_GET_FIRST(base2);		for (i = 0; i < 1000; i++) {		ut_a(node);		ut_a(node->index == 999 - i);		node = UT_LIST_GET_NEXT(list2, node);	}	ut_a(node == NULL);	UT_LIST_VALIDATE(list1, node_t, base1);	UT_LIST_VALIDATE(list2, node_t, base2);		node = UT_LIST_GET_FIRST(base1);		for (i = 0; i < 500; i++) {		ut_a(node);		ut_a(node->index == i);		node = UT_LIST_GET_NEXT(list1, node);	}	for (i = 0; i < 100; i++) {		node2 = ut_malloc(sizeof(node_t));		node2->index = 99 - i;				UT_LIST_INSERT_AFTER(list1, base1, node, node2);		UT_LIST_VALIDATE(list1, node_t, base1);	}	node2 = ut_malloc(sizeof(node_t));	node2->index = 1000;	UT_LIST_INSERT_AFTER(list1, base1, UT_LIST_GET_LAST(base1), node2);	node2 = node;	for (i = 0; i < 100; i++) {		node2 = UT_LIST_GET_NEXT(list1, node2);		ut_a(node2);		ut_a(node2->index == i);	}	UT_LIST_VALIDATE(list1, node_t, base1);	for (i = 0; i < 600; i++) {		node2 = UT_LIST_GET_NEXT(list1, node);		UT_LIST_REMOVE(list1, base1, node2);		UT_LIST_VALIDATE(list1, node_t, base1);	}	node2 = UT_LIST_GET_NEXT(list1, node);	UT_LIST_VALIDATE(list1, node_t, base1);	UT_LIST_VALIDATE(list2, node_t, base2);	ut_a(UT_LIST_GET_LEN(base1) == 501);			ut_a(UT_LIST_GET_LAST(base1) == node);	for (i = 0; i < 500; i++) {		node = UT_LIST_GET_PREV(list1, node);	}	ut_a(UT_LIST_GET_FIRST(base1) == node);	for (i = 0; i < 501; i++) {		node2 = UT_LIST_GET_FIRST(base1);		UT_LIST_REMOVE(list1, base1, node2);	}	UT_LIST_VALIDATE(list1, node_t, base1);	UT_LIST_VALIDATE(list2, node_t, base2);	ut_a(UT_LIST_GET_LEN(base1) == 0);	ut_a(UT_LIST_GET_LEN(base2) == 1000);}/*********************************************************************Tests for dulints. */voidtest2(void)/*=======*/{	dulint				a, b;		printf("-------------------------------------------\n");	printf("TEST 2. Test of dulints \n");	a = ut_dulint_create(0xFFFFFFFF, 0xFFFFFFFF);	b = a;	ut_a(ut_dulint_cmp(a, b) == 0);	ut_a(ut_dulint_get_low(b) == 0xFFFFFFFF);	ut_a(ut_dulint_get_high(b) == 0xFFFFFFFF);	a = ut_dulint_create(0xFFFFFFFE, 0xFFFFFFFF);	ut_a(ut_dulint_cmp(a, b) == -1);	ut_a(ut_dulint_cmp(b, a) == 1);	a = ut_dulint_create(0xFFFFFFFF, 0xFFFFFFFE);	ut_a(ut_dulint_cmp(a, b) == -1);	ut_a(ut_dulint_cmp(b, a) == 1);	a = ut_dulint_create(5, 0xFFFFFFFF);	a = ut_dulint_add(a, 5);	ut_a(ut_dulint_get_low(a) == 4);	ut_a(ut_dulint_get_high(a) == 6);		a = ut_dulint_create(5, 0x80000000);	a = ut_dulint_add(a, 0x80000000);	ut_a(ut_dulint_get_low(a) == 0);	ut_a(ut_dulint_get_high(a) == 6);	a = ut_dulint_create(5, 10);	a = ut_dulint_add(a, 20);	ut_a(ut_dulint_get_low(a) == 30);	ut_a(ut_dulint_get_high(a) == 5);}/***************************************************************Comparison function for ulints. */UNIV_INLINEintcmp_ulint(ulint a, ulint b)/*=======================*/{	if (a < b) {		return(-1);	} else if (b < a) {		return(1);	} else {		return(0);	}}/****************************************************************Sort function for ulint arrays. */voidsort_ulint(ulint* arr, ulint* aux_arr, ulint low, ulint high)/*=========================================================*/{	ut_ad(high <= 100000);		UT_SORT_FUNCTION_BODY(sort_ulint, arr, aux_arr, low, high,				cmp_ulint);}/****************************************************************Sort function for dulint arrays. */voidsort_dulint(dulint* arr, dulint* aux_arr, ulint low, ulint high)/*=========================================================*/{	ut_ad(high <= 100000);		UT_SORT_FUNCTION_BODY(sort_dulint, arr, aux_arr, low, high,				ut_dulint_cmp);}/*********************************************************************Tests for sorting. */voidtest3(void)/*=======*/{	ulint	i, j;	ulint	tm, oldtm;		printf("-------------------------------------------\n");	printf("TEST 3. Test of sorting \n");	for (i = 0; i < 100000; i++) {		uarr[i] = ut_rnd_gen_ulint();	}	oldtm = ut_clock();    for (j = 0; j < 1; j++) {	i = 100000;		sort_ulint(uarr, aux_uarr, 0, i);    }	tm = ut_clock();	printf("Wall clock time for sort of %lu ulints %lu millisecs\n",			j * i, tm - oldtm);		for (i = 1; i < 100000; i++) {		ut_a(uarr[i - 1] < uarr[i]);	}	for (i = 0; i < 100000; i++) {		uarr[i] = 99999 - i;	}	sort_ulint(uarr, aux_uarr, 0, 100000);	for (i = 1; i < 100000; i++) {		ut_a(uarr[i] == i);	}	sort_ulint(uarr, aux_uarr, 0, 100000);	for (i = 1; i < 100000; i++) {		ut_a(uarr[i] == i);	}	sort_ulint(uarr, aux_uarr, 5, 6);	for (i = 1; i < 100000; i++) {		ut_a(uarr[i] == i);	}	for (i = 0; i < 100000; i++) {		uarr[i] = 5;	}	sort_ulint(uarr, aux_uarr, 0, 100000);	for (i = 1; i < 100000; i++) {		ut_a(uarr[i] == 5);	}	for (i = 0; i < 100000; i++) {		duarr[i] = ut_dulint_create(ut_rnd_gen_ulint() & 0xFFFFFFFF,					    ut_rnd_gen_ulint() & 0xFFFFFFFF);	}	oldtm = ut_clock();	i = 100000;		sort_dulint(duarr, aux_duarr, 0, i);	tm = ut_clock();	printf("Wall clock time for sort of %lu dulints %lu millisecs\n",			j * i, tm - oldtm);		for (i = 1; i < 100000; i++) {		ut_a(ut_dulint_cmp(duarr[i - 1], duarr[i]) < 0);	}}void main(void) {	test1();	test2();	test3();	printf("TEST SUCCESSFULLY COMPLETED!\n");} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -