added a primitive dictionary file loader. needs more work
This commit is contained in:
		| @ -170,6 +170,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| #define QSE_STRTONUM(value,nptr,endptr,base) do {\ | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_char_t* __ston_ptr = nptr; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	for (;;) { \ | ||||
| 		qse_char_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_T(' ') || \ | ||||
| @ -178,8 +179,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_T('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_CHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (*__ston_ptr == QSE_T('0')) { \ | ||||
| 		       if (*(__ston_ptr + 1) == QSE_T('x') || *(__ston_ptr + 1) == QSE_T('X')) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_CHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_char_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
| @ -190,7 +198,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_char_t* __ston_ptr = nptr; \ | ||||
| 	const qse_char_t* __ston_end = __ston_ptr + len; \ | ||||
| 	value = 0; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	while (__ston_ptr < __ston_end) { \ | ||||
| 		qse_char_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_T(' ') || __ston_c == QSE_T('\t')) { \ | ||||
| @ -200,9 +208,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_T('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && \ | ||||
| 	               (__ston_v = QSE_CHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (__ston_ptr < __ston_end && *__ston_ptr == QSE_T('0')) { \ | ||||
| 		       if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_T('x') || *(__ston_ptr + 1) == QSE_T('X'))) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_CHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_char_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
| @ -218,6 +232,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| #define QSE_MBSTONUM(value,nptr,endptr,base) do {\ | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_mchar_t* __ston_ptr = nptr; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	for (;;) { \ | ||||
| 		qse_mchar_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_MT(' ') || \ | ||||
| @ -226,8 +241,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_MT('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_MCHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (*__ston_ptr == QSE_MT('0')) { \ | ||||
| 		       if (*(__ston_ptr + 1) == QSE_MT('x') || *(__ston_ptr + 1) == QSE_MT('X')) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_MCHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_mchar_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
| @ -238,7 +260,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_mchar_t* __ston_ptr = nptr; \ | ||||
| 	const qse_mchar_t* __ston_end = __ston_ptr + len; \ | ||||
| 	value = 0; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	while (__ston_ptr < __ston_end) { \ | ||||
| 		qse_mchar_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_MT(' ') || __ston_c == QSE_MT('\t')) { \ | ||||
| @ -248,9 +270,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_MT('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && \ | ||||
| 	               (__ston_v = QSE_MCHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (__ston_ptr < __ston_end && *__ston_ptr == QSE_MT('0')) { \ | ||||
| 		       if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_MT('x') || *(__ston_ptr + 1) == QSE_MT('X'))) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_MCHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_mchar_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
| @ -266,6 +294,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| #define QSE_WCSTONUM(value,nptr,endptr,base) do {\ | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_wchar_t* __ston_ptr = nptr; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	for (;;) { \ | ||||
| 		qse_wchar_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_WT(' ') || \ | ||||
| @ -274,8 +303,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_WT('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_WCHARTONUM(*__ston_ptr, base)) < base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (*__ston_ptr == QSE_WT('0')) { \ | ||||
| 		       if (*(__ston_ptr + 1) == QSE_WT('x') || *(__ston_ptr + 1) == QSE_WT('X')) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; (__ston_v = QSE_WCHARTONUM(*__ston_ptr, __ston_base)) < __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_wchar_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
| @ -286,7 +322,7 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 	int __ston_f = 0, __ston_v; \ | ||||
| 	const qse_wchar_t* __ston_ptr = nptr; \ | ||||
| 	const qse_wchar_t* __ston_end = __ston_ptr + len; \ | ||||
| 	value = 0; \ | ||||
| 	int __ston_base = base; \ | ||||
| 	while (__ston_ptr < __ston_end) { \ | ||||
| 		qse_wchar_t __ston_c = *__ston_ptr; \ | ||||
| 		if (__ston_c == QSE_WT(' ') || __ston_c == QSE_WT('\t')) { \ | ||||
| @ -296,9 +332,15 @@ typedef qse_wchar_t* (*qse_wcssubst_t) ( | ||||
| 		else if (__ston_c == QSE_WT('+')) { __ston_ptr++; } \ | ||||
| 		break; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && \ | ||||
| 	               (__ston_v = QSE_WCHARTONUM(*__ston_ptr, base)) != base; __ston_ptr++) { \ | ||||
| 		value = value * base + __ston_v; \ | ||||
| 	if (base == 0) { \ | ||||
| 		if (__ston_ptr < __ston_end && *__ston_ptr == QSE_WT('0')) { \ | ||||
| 		       if ((__ston_ptr < __ston_end - 1) && (*(__ston_ptr + 1) == QSE_WT('x') || *(__ston_ptr + 1) == QSE_WT('X'))) { __ston_base = 16; __ston_ptr += 2; } \ | ||||
| 		       else { __ston_base = 8; __ston_ptr++; } \ | ||||
| 		} \ | ||||
| 		else __ston_base = 10; \ | ||||
| 	} \ | ||||
| 	for (value = 0; __ston_ptr < __ston_end && (__ston_v = QSE_WCHARTONUM(*__ston_ptr, __ston_base)) != __ston_base; __ston_ptr++) { \ | ||||
| 		value = value * __ston_base + __ston_v; \ | ||||
| 	} \ | ||||
| 	if (endptr) *((const qse_wchar_t**)endptr) = __ston_ptr; \ | ||||
| 	if (__ston_f > 0) value *= -1; \ | ||||
|  | ||||
| @ -30,6 +30,33 @@ | ||||
| #include <qse/types.h> | ||||
| #include <qse/macros.h> | ||||
|  | ||||
| enum qse_raddic_opt_t | ||||
| { | ||||
| 	QSE_RADDIC_TRAIT | ||||
| }; | ||||
| typedef enum qse_raddic_opt_t qse_raddic_opt_t; | ||||
|  | ||||
| enum qse_raddic_trait_t | ||||
| { | ||||
| 	QSE_RADDIC_ALLOW_CONST_WITHOUT_ATTR = (1 << 0) | ||||
| }; | ||||
| typedef enum qse_raddic_trait_t qse_raddic_trait_t; | ||||
|  | ||||
| enum qse_raddic_errnum_t | ||||
| { | ||||
| 	QSE_RADDIC_ENOERR, | ||||
| 	QSE_RADDIC_EOTHER, | ||||
| 	QSE_RADDIC_ENOIMPL, | ||||
| 	QSE_RADDIC_ESYSERR, | ||||
| 	QSE_RADDIC_EINTERN, | ||||
| 	QSE_RADDIC_ENOMEM, | ||||
| 	QSE_RADDIC_EINVAL, | ||||
| 	QSE_RADDIC_ENOENT, | ||||
| 	QSE_RADDIC_EEXIST, | ||||
| 	QSE_RADDIC_ESYNERR | ||||
| }; | ||||
| typedef enum qse_raddic_errnum_t qse_raddic_errnum_t; | ||||
|  | ||||
| #define QSE_RADDIC_ATTR_TYPE_STRING                  0 | ||||
| #define QSE_RADDIC_ATTR_TYPE_INTEGER                 1 | ||||
| #define QSE_RADDIC_ATTR_TYPE_IPADDR                  2 | ||||
| @ -66,7 +93,7 @@ typedef struct qse_raddic_attr_flags_t qse_raddic_attr_flags_t; | ||||
| typedef struct qse_raddic_attr_t qse_raddic_attr_t; | ||||
| struct qse_raddic_attr_t  | ||||
| { | ||||
| 	int                     attr; | ||||
| 	qse_uint32_t            attr; | ||||
| 	int                     type; | ||||
| 	int                     vendor; | ||||
| 	qse_raddic_attr_flags_t flags; | ||||
| @ -77,7 +104,7 @@ struct qse_raddic_attr_t | ||||
| typedef struct qse_raddic_const_t qse_raddic_const_t; | ||||
| struct qse_raddic_const_t | ||||
| { | ||||
| 	int                 attr;     /* vendor + attribute-value */ | ||||
| 	qse_uint32_t        attr;     /* vendor + attribute-value */ | ||||
| 	int                 value; | ||||
| 	qse_raddic_const_t* nextc; | ||||
| 	qse_char_t          name[1]; | ||||
| @ -96,9 +123,9 @@ struct qse_raddic_vendor_t | ||||
|  | ||||
| typedef struct qse_raddic_t qse_raddic_t; | ||||
|  | ||||
| #define QSE_RADDIC_ATTR_MAKE(vendor,value) ((((vendor) & 0xFFFF) << 8) | (value)) | ||||
| #define QSE_RADDIC_ATTR_VENDOR(attr)       (((attr) >> 8) & 0xFFFF) | ||||
| #define QSE_RADDIC_ATTR_VALUE(attr)        ((attr) & 0xFF) | ||||
| #define QSE_RADDIC_ATTR_MAKE(vendor,value) ((((vendor) & 0xFFFFu) << 16) | (value)) | ||||
| #define QSE_RADDIC_ATTR_VENDOR(attr)       (((attr) >> 16) & 0xFFFFu) | ||||
| #define QSE_RADDIC_ATTR_VALUE(attr)        ((attr) & 0xFFFFu) | ||||
|  | ||||
| #if defined(__cplusplus) | ||||
| extern "C" { | ||||
| @ -113,6 +140,47 @@ QSE_EXPORT void qse_raddic_close ( | ||||
| 	qse_raddic_t* dic | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT int qse_raddic_getopt ( | ||||
| 	qse_raddic_t*    raddic, | ||||
| 	qse_raddic_opt_t id, | ||||
| 	void*            value | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT int qse_raddic_setopt ( | ||||
| 	qse_raddic_t*    raddic, | ||||
| 	qse_raddic_opt_t id, | ||||
| 	const void*     value | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_raddic_errnum_t qse_raddic_geterrnum ( | ||||
| 	qse_raddic_t* dic | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT const qse_char_t* qse_raddic_geterrmsg ( | ||||
| 	qse_raddic_t* dic | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT void qse_raddic_seterrnum ( | ||||
| 	qse_raddic_t*       dic, | ||||
| 	qse_raddic_errnum_t errnum | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT void qse_raddic_seterrfmt ( | ||||
| 	qse_raddic_t*        dic, | ||||
| 	qse_raddic_errnum_t  errnum, | ||||
| 	const qse_char_t*    fmt, | ||||
| 	... | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT void qse_raddic_clear ( | ||||
| 	qse_raddic_t* dic | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT int qse_raddic_load ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	const qse_char_t* path | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_raddic_vendor_t* qse_raddic_findvendorbyname ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	const qse_char_t* name | ||||
| @ -149,7 +217,7 @@ QSE_EXPORT qse_raddic_attr_t* qse_raddic_findattrbyname ( | ||||
|  | ||||
| QSE_EXPORT qse_raddic_attr_t* qse_raddic_findattrbyvalue ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	int               attr | ||||
| 	qse_uint32_t      attr | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_raddic_attr_t* qse_raddic_addattr ( | ||||
| @ -172,16 +240,15 @@ QSE_EXPORT int qse_raddic_deleteattrbyvalue ( | ||||
| ); | ||||
|  | ||||
|  | ||||
|  | ||||
| QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyname ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	int               attr, | ||||
| 	qse_uint32_t      attr, | ||||
| 	const qse_char_t* name | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT qse_raddic_const_t* qse_raddic_findconstbyvalue ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	int               attr, | ||||
| 	qse_uint32_t      attr, | ||||
| 	int               value | ||||
| ); | ||||
|  | ||||
| @ -194,13 +261,13 @@ QSE_EXPORT qse_raddic_const_t* qse_raddic_addconst ( | ||||
|  | ||||
| QSE_EXPORT int qse_raddic_deleteconstbyname ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	int               attr, | ||||
| 	qse_uint32_t      attr, | ||||
| 	const qse_char_t* name | ||||
| ); | ||||
|  | ||||
| QSE_EXPORT int qse_raddic_deleteconstbyvalue ( | ||||
| 	qse_raddic_t*     dic, | ||||
| 	int               attr, | ||||
| 	qse_uint32_t      attr, | ||||
| 	int               value | ||||
| ); | ||||
|  | ||||
|  | ||||
| @ -340,6 +340,12 @@ int qse_htl_init (qse_htl_t* ht, qse_mmgr_t* mmgr, int keysize) | ||||
| } | ||||
|  | ||||
| void qse_htl_fini (qse_htl_t* ht) | ||||
| { | ||||
| 	qse_htl_clear (ht); | ||||
| 	QSE_MMGR_FREE (ht->mmgr, ht->buckets); | ||||
| } | ||||
|  | ||||
| void qse_htl_clear (qse_htl_t* ht) | ||||
| { | ||||
| 	int i; | ||||
| 	qse_htl_node_t* node, * next; | ||||
| @ -363,9 +369,10 @@ void qse_htl_fini (qse_htl_t* ht) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	QSE_MMGR_FREE (ht->mmgr, ht->buckets); | ||||
| 	QSE_MEMSET (ht->buckets, 0, sizeof(*ht->buckets) * ht->num_buckets); | ||||
| 	ht->buckets[0] = &ht->null; | ||||
| 	ht->num_elements = 0; | ||||
| } | ||||
|  | ||||
| /* ------------------------------------------------------------------------- */ | ||||
|  | ||||
| /* | ||||
|  | ||||
							
								
								
									
										1284
									
								
								qse/lib/rad/raddic.c
									
									
									
									
									
								
							
							
						
						
									
										1284
									
								
								qse/lib/rad/raddic.c
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @ -34,7 +34,7 @@ static qse_size_t hash_item (qse_htl_t* htl, const void* data) | ||||
| { | ||||
| 	item_t* item = (item_t*)data; | ||||
| 	//return item->a + 123445; | ||||
| 	return qse_genhash (&item->a, QSE_SIZEOF(item->a)); | ||||
| 	return qse_genhash32 (&item->a, QSE_SIZEOF(item->a)); | ||||
| } | ||||
|  | ||||
| static int comp_item (qse_htl_t* htl, const void* data1, const void* data2) | ||||
| @ -135,6 +135,7 @@ static int test2 () | ||||
| 	item_t x; | ||||
| 	qse_htl_t* htl; | ||||
| 	qse_htl_node_t* np; | ||||
| 	int count = 0; | ||||
|  | ||||
| 	htl = qse_htl_open (QSE_MMGR_GETDFL(), 0, QSE_SIZEOF(x)); | ||||
| 	if (htl == QSE_NULL) | ||||
| @ -148,6 +149,7 @@ static int test2 () | ||||
| 	qse_htl_setcopier (htl, copy_item); | ||||
| 	qse_htl_setfreeer (htl, free_item); | ||||
|  | ||||
| again: | ||||
| 	for (x.a = 9; x.a < 20; x.a++) | ||||
| 	{ | ||||
| 		x.x = x.a * 10; | ||||
| @ -195,6 +197,15 @@ static int test2 () | ||||
|  | ||||
| 	qse_printf (QSE_T("total %lu items\n"), (unsigned long)qse_htl_getsize(htl)); | ||||
| 	qse_htl_walk (htl, walk2, QSE_NULL); | ||||
|  | ||||
| 	qse_htl_clear (htl); | ||||
| 	if (count == 0)  | ||||
| 	{ | ||||
| 		count++; | ||||
| 		qse_printf (QSE_T("<<<TRAYING AGAIN ....>>>\n")); | ||||
| 		goto again; | ||||
| 	} | ||||
|  | ||||
| 	qse_htl_close (htl); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
| #include <qse/cmn/str.h> | ||||
| #include <qse/rad/raddic.h> | ||||
| #include <qse/si/sio.h> | ||||
| #include <string.h> | ||||
|  | ||||
| #define R(f) \ | ||||
| 	do { \ | ||||
| @ -9,7 +10,7 @@ | ||||
| 		if (f() == -1) return -1; \ | ||||
| 	} while (0) | ||||
|  | ||||
| #define FAIL(msg) qse_printf(QSE_T("FAILURE in %hs line %d - %hs\n"), __func__, __LINE__, msg) | ||||
| #define FAIL(msg) qse_printf(QSE_T("FAILURE in %hs line %d - %s\n"), __func__, __LINE__, msg) | ||||
| #define _assert(test,msg) do { if (!(test)) { FAIL(msg); return -1; } } while(0) | ||||
| #define _verify(test) do { int r=test(); tests_run++; if(r) return r; } while(0) | ||||
|  | ||||
| @ -17,33 +18,32 @@ static int test1 () | ||||
| { | ||||
| 	qse_raddic_t* dic; | ||||
| 	qse_raddic_vendor_t* vendor, * v;	 | ||||
| 	qse_raddic_attr_t* attr, * a; | ||||
| 	int i; | ||||
|  | ||||
| 	dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0); | ||||
| 	_assert (dic != QSE_NULL, "unable to create a radius dictionary"); | ||||
| 	_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary")); | ||||
|  | ||||
| 	vendor = qse_raddic_addvendor (dic, QSE_T("abiyo.net"), 12365); | ||||
| 	_assert (vendor != QSE_NULL, "unable to add the first vendor"); | ||||
| 	_assert (vendor->vendorpec == 12365, "the vendor value is not 12365"); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo.net")) == 0, "the vendor name is not abiyo.net"); | ||||
| 	_assert (vendor != QSE_NULL, QSE_T("unable to add the first vendor")); | ||||
| 	_assert (vendor->vendorpec == 12365, QSE_T("the vendor value is not 12365")); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo.net")) == 0, QSE_T("the vendor name is not abiyo.net")); | ||||
|  | ||||
| 	vendor = qse_raddic_addvendor (dic, QSE_T("abiyo.net"), 99999); | ||||
| 	_assert (vendor == QSE_NULL, "a duplicate name must not be allowed"); | ||||
| 	_assert (vendor == QSE_NULL, QSE_T("a duplicate name must not be allowed")); | ||||
|  | ||||
| 	vendor = qse_raddic_addvendor (dic, QSE_T("abiyo-aliased.net"), 12365); | ||||
| 	_assert (vendor != QSE_NULL, "unable to add a duplicate id"); | ||||
| 	_assert (vendor != QSE_NULL, QSE_T("unable to add a duplicate id")); | ||||
|  | ||||
| 	vendor = qse_raddic_findvendorbyname (dic, QSE_T("Abiyo.Net")); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor named Abiyo.Net"); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor named Abiyo.Net")); | ||||
|  | ||||
| 	vendor = qse_raddic_findvendorbyvalue (dic, 12365); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor of value 12365"); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, "unable to find a vendor of value 12365"); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor of value 12365")); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, QSE_T("unable to find a vendor of value 12365")); | ||||
|  | ||||
| 	vendor = qse_raddic_findvendorbyname (dic, QSE_T("Abiyo-aliased.Net")); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, "unable to find a vendor named Abiyo-aliased.Net"); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, "unable to find a vendor of value 12365"); | ||||
| 	_assert (vendor != QSE_NULL && vendor->vendorpec == 12365, QSE_T("unable to find a vendor named Abiyo-aliased.Net")); | ||||
| 	_assert (qse_strcasecmp(vendor->name, QSE_T("abiyo-aliased.net")) == 0, QSE_T("unable to find a vendor of value 12365")); | ||||
|  | ||||
| #define COUNT1 600 | ||||
| #define COUNT2 700 | ||||
| @ -53,9 +53,9 @@ static int test1 () | ||||
| 		qse_char_t tmp[64]; | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		vendor = qse_raddic_addvendor (dic, tmp, i); | ||||
| 		_assert (vendor != QSE_NULL, "unable to add a vendor"); | ||||
| 		_assert (vendor->vendorpec == i, "wrong vendor value"); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name"); | ||||
| 		_assert (vendor != QSE_NULL, QSE_T("unable to add a vendor")); | ||||
| 		_assert (vendor->vendorpec == i, QSE_T("wrong vendor value")); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = 1; i < COUNT1; i++) | ||||
| @ -63,9 +63,9 @@ static int test1 () | ||||
| 		qse_char_t tmp[64]; | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		vendor = qse_raddic_findvendorbyname (dic, tmp); | ||||
| 		_assert (vendor != QSE_NULL, "unable to find a vendor"); | ||||
| 		_assert (vendor->vendorpec == i, "wrong vendor value"); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name"); | ||||
| 		_assert (vendor != QSE_NULL, QSE_T("unable to find a vendor")); | ||||
| 		_assert (vendor->vendorpec == i, QSE_T("wrong vendor value")); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = 1; i < COUNT1; i++) | ||||
| @ -73,9 +73,9 @@ static int test1 () | ||||
| 		qse_char_t tmp[64]; | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		vendor = qse_raddic_findvendorbyvalue (dic, i); | ||||
| 		_assert (vendor != QSE_NULL, "unable to find a vendor"); | ||||
| 		_assert (vendor->vendorpec == i, "wrong vendor value"); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name"); | ||||
| 		_assert (vendor != QSE_NULL, QSE_T("unable to find a vendor")); | ||||
| 		_assert (vendor->vendorpec == i, QSE_T("wrong vendor value")); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = COUNT1; i < COUNT2; i++) | ||||
| @ -84,12 +84,12 @@ static int test1 () | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		vendor = qse_raddic_addvendor (dic, tmp, COUNT1);  | ||||
| 		// insert different items with the same value | ||||
| 		_assert (vendor != QSE_NULL, "unable to add a vendor"); | ||||
| 		_assert (vendor->vendorpec == COUNT1, "wrong vendor value"); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, "wrong vendor name"); | ||||
| 		_assert (vendor != QSE_NULL, QSE_T("unable to add a vendor")); | ||||
| 		_assert (vendor->vendorpec == COUNT1, QSE_T("wrong vendor value")); | ||||
| 		_assert (qse_strcasecmp(vendor->name, tmp) == 0, QSE_T("wrong vendor name")); | ||||
|  | ||||
| 		v = qse_raddic_findvendorbyvalue (dic, COUNT1); | ||||
| 		_assert (vendor == v, "unable to find a last added vendor by value"); | ||||
| 		_assert (vendor == v, QSE_T("unable to find a last added vendor by value")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = COUNT1; i < COUNT2 - 1; i++) | ||||
| @ -100,24 +100,24 @@ static int test1 () | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
|  | ||||
| 		n = qse_raddic_deletevendorbyname (dic, tmp);  | ||||
| 		_assert (n == 0, "unable to delete a vendor"); | ||||
| 		_assert (n == 0, QSE_T("unable to delete a vendor")); | ||||
|  | ||||
| 		v = qse_raddic_findvendorbyname (dic, tmp); | ||||
| 		_assert (v == QSE_NULL, "vendor found errorenously"); | ||||
| 		_assert (v == QSE_NULL, QSE_T("vendor found errorenously")); | ||||
|  | ||||
| 		if (i == COUNT2 - 1) | ||||
| 		{ | ||||
| 			v = qse_raddic_findvendorbyvalue (dic, COUNT1); | ||||
| 			_assert (v == QSE_NULL, "vendor of COUNT1 found errorenously"); | ||||
| 			_assert (v == QSE_NULL, QSE_T("vendor of COUNT1 found errorenously")); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i + 1); | ||||
| 			v = qse_raddic_findvendorbyname (dic, tmp); | ||||
| 			_assert (v != QSE_NULL && v->vendorpec == COUNT1 && qse_strcasecmp(tmp, v->name) == 0, "unable to find an expected vendor"); | ||||
| 			_assert (v != QSE_NULL && v->vendorpec == COUNT1 && qse_strcasecmp(tmp, v->name) == 0, QSE_T("unable to find an expected vendor")); | ||||
|  | ||||
| 			v = qse_raddic_findvendorbyvalue (dic, COUNT1); | ||||
| 			_assert (v != QSE_NULL && v->vendorpec == COUNT1, "unable to find the vendor of COUNT1"); | ||||
| 			_assert (v != QSE_NULL && v->vendorpec == COUNT1, QSE_T("unable to find the vendor of COUNT1")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -128,7 +128,7 @@ static int test1 () | ||||
|  | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		n = qse_raddic_deletevendorbyname (dic, tmp); | ||||
| 		_assert (n == 0, "unable to delete a vendor"); | ||||
| 		_assert (n == 0, QSE_T("unable to delete a vendor")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = 1; i < COUNT1; i++) | ||||
| @ -136,31 +136,31 @@ static int test1 () | ||||
| 		qse_char_t tmp[64]; | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d"), i); | ||||
| 		v = qse_raddic_addvendor (dic, tmp, i); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor"); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor")); | ||||
|  | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d"), i); | ||||
| 		v = qse_raddic_addvendor (dic, tmp, i); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor"); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor")); | ||||
|  | ||||
| 		qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testy-%d"), i); | ||||
| 		v = qse_raddic_addvendor (dic, tmp, i); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, "unable to add a vendor"); | ||||
| 		_assert (v != QSE_NULL && v->vendorpec == i, QSE_T("unable to add a vendor")); | ||||
| 	} | ||||
|  | ||||
| 	for (i = 1; i < COUNT1; i++) | ||||
| 	{ | ||||
| 		int n; | ||||
| 		n = qse_raddic_deletevendorbyvalue (dic, i); | ||||
| 		_assert (n == 0, "unable to delete a vendor by value"); | ||||
| 		_assert (n == 0, QSE_T("unable to delete a vendor by value")); | ||||
|  | ||||
| 		n = qse_raddic_deletevendorbyvalue (dic, i); | ||||
| 		_assert (n == 0, "unable to delete a vendor by value"); | ||||
| 		_assert (n == 0, QSE_T("unable to delete a vendor by value")); | ||||
|  | ||||
| 		n = qse_raddic_deletevendorbyvalue (dic, i); | ||||
| 		_assert (n == 0, "unable to delete a vendor by value"); | ||||
| 		_assert (n == 0, QSE_T("unable to delete a vendor by value")); | ||||
|  | ||||
| 		n = qse_raddic_deletevendorbyvalue (dic, i); | ||||
| 		_assert (n <= -1, "erroreneously successful vendor deletion by value"); | ||||
| 		_assert (n <= -1, QSE_T("erroreneously successful vendor deletion by value")); | ||||
| 	} | ||||
|  | ||||
| 	qse_raddic_close (dic); | ||||
| @ -177,7 +177,7 @@ static int test2 () | ||||
| 	int i, j; | ||||
|  | ||||
| 	dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0); | ||||
| 	_assert (dic != QSE_NULL, "unable to create a radius dictionary"); | ||||
| 	_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary")); | ||||
|  | ||||
| 	memset (&f, 0, QSE_SIZEOF(f)); | ||||
|  | ||||
| @ -188,9 +188,9 @@ static int test2 () | ||||
| 			qse_char_t tmp[64]; | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d-%d"), j, i); | ||||
| 			attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -201,14 +201,14 @@ static int test2 () | ||||
| 			qse_char_t tmp[64]; | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("test-%d-%d"), j, i); | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmp); | ||||
| 			_assert (attr != QSE_NULL, "unable to find an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to find an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i)); | ||||
| 			_assert (attr != QSE_NULL, "unable to find an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to find an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -219,15 +219,15 @@ static int test2 () | ||||
| 			qse_char_t tmp[64]; | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d-%d"), j, i); | ||||
| 			attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testy-%d-%d"), j, i); | ||||
| 			attr = qse_raddic_addattr (dic, tmp, j, QSE_RADDIC_ATTR_TYPE_STRING, i, &f); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -241,34 +241,34 @@ static int test2 () | ||||
| 			qse_strxfmt(tmpy, QSE_COUNTOF(tmpy), QSE_T("testy-%d-%d"), j, i); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmp); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmpx); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpx) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpx) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmpy); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i)); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			_assert (attr->nexta != QSE_NULL, "unable to find an old attribute"); | ||||
| 			_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->name, tmpx) == 0, "wrong attr name"); | ||||
| 			_assert (attr->nexta != QSE_NULL, QSE_T("unable to find an old attribute")); | ||||
| 			_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->name, tmpx) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			_assert (attr->nexta->nexta != QSE_NULL, "unable to find an old attribute"); | ||||
| 			_assert (attr->nexta->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->nexta->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr->nexta->nexta != QSE_NULL, QSE_T("unable to find an old attribute")); | ||||
| 			_assert (attr->nexta->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->nexta->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			_assert (attr->nexta->nexta->nexta == QSE_NULL, "wrong attribute chian"); | ||||
| 			_assert (attr->nexta->nexta->nexta == QSE_NULL, QSE_T("wrong attribute chian")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -281,7 +281,7 @@ static int test2 () | ||||
|  | ||||
| 			qse_strxfmt(tmp, QSE_COUNTOF(tmp), QSE_T("testx-%d-%d"), j, i); | ||||
| 			n = qse_raddic_deleteattrbyname (dic, tmp); | ||||
| 			_assert (n == 0, "erroreneous attribute deletion failure by name"); | ||||
| 			_assert (n == 0, QSE_T("erroreneous attribute deletion failure by name")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -295,28 +295,28 @@ static int test2 () | ||||
| 			qse_strxfmt(tmpy, QSE_COUNTOF(tmpy), QSE_T("testy-%d-%d"), j, i); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmp); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmpx); | ||||
| 			_assert (attr == QSE_NULL, "errorneous search success"); | ||||
| 			_assert (attr == QSE_NULL, QSE_T("errorneous search success")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyname (dic, tmpy); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			attr = qse_raddic_findattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i)); | ||||
| 			_assert (attr != QSE_NULL, "unable to add an attribute"); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, "wrong attr name"); | ||||
| 			_assert (attr != QSE_NULL, QSE_T("unable to add an attribute")); | ||||
| 			_assert (attr->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->name, tmpy) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			_assert (attr->nexta != QSE_NULL, "unable to find an old attribute"); | ||||
| 			_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong attr value"); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->name, tmp) == 0, "wrong attr name"); | ||||
| 			_assert (attr->nexta != QSE_NULL, QSE_T("unable to find an old attribute")); | ||||
| 			_assert (attr->nexta->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong attr value")); | ||||
| 			_assert (qse_strcasecmp(attr->nexta->name, tmp) == 0, QSE_T("wrong attr name")); | ||||
|  | ||||
| 			_assert (attr->nexta->nexta == QSE_NULL, "wrong attribute chian"); | ||||
| 			_assert (attr->nexta->nexta == QSE_NULL, QSE_T("wrong attribute chian")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -324,13 +324,13 @@ static int test2 () | ||||
| 	{ | ||||
| 		int n; | ||||
| 		n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0)); | ||||
| 		_assert (n == 0, "errorneous deletion failure by value"); | ||||
| 		_assert (n == 0, QSE_T("errorneous deletion failure by value")); | ||||
|  | ||||
| 		n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0)); | ||||
| 		_assert (n == 0, "errorneous deletion failure by value"); | ||||
| 		_assert (n == 0, QSE_T("errorneous deletion failure by value")); | ||||
|  | ||||
| 		n = qse_raddic_deleteattrbyvalue (dic, QSE_RADDIC_ATTR_MAKE(0, 0)); | ||||
| 		_assert (n <= -1, "errorneous deletion success by value"); | ||||
| 		_assert (n <= -1, QSE_T("errorneous deletion success by value")); | ||||
| 	} | ||||
|  | ||||
|  | ||||
| @ -342,9 +342,9 @@ static int test2 () | ||||
| 			qse_strxfmt(attrstr, QSE_COUNTOF(attrstr), QSE_T("test-%d-%d"), j, i); | ||||
| 			qse_strxfmt(constr, QSE_COUNTOF(constr), QSE_T("const-%d-%d"), j, i); | ||||
| 			con = qse_raddic_addconst (dic, constr, attrstr, 10); | ||||
| 			_assert (con != QSE_NULL, "unable to add an constant"); | ||||
| 			_assert (con->value == 10, "wrong constant value"); | ||||
| 			_assert (qse_strcasecmp(con->name, constr) == 0, "wrong constant name"); | ||||
| 			_assert (con != QSE_NULL, QSE_T("unable to add an constant")); | ||||
| 			_assert (con->value == 10, QSE_T("wrong constant value")); | ||||
| 			_assert (qse_strcasecmp(con->name, constr) == 0, QSE_T("wrong constant name")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -356,14 +356,14 @@ static int test2 () | ||||
| 			qse_strxfmt(constr, QSE_COUNTOF(constr), QSE_T("const-%d-%d"), j, i); | ||||
|  | ||||
| 			con = qse_raddic_findconstbyname (dic, QSE_RADDIC_ATTR_MAKE(j, i), constr); | ||||
| 			_assert (con != QSE_NULL, "unable to find an constant"); | ||||
| 			_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong constant value"); | ||||
| 			_assert (con->value == 10, "wrong constant value"); | ||||
| 			_assert (con != QSE_NULL, QSE_T("unable to find an constant")); | ||||
| 			_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong constant value")); | ||||
| 			_assert (con->value == 10, QSE_T("wrong constant value")); | ||||
|  | ||||
| 			con = qse_raddic_findconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(j, i), 10); | ||||
| 			_assert (con != QSE_NULL, "unable to find an constant"); | ||||
| 			_assert (con->value == 10, "wrong constant value"); | ||||
| 			_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), "wrong constant value"); | ||||
| 			_assert (con != QSE_NULL, QSE_T("unable to find an constant")); | ||||
| 			_assert (con->value == 10, QSE_T("wrong constant value")); | ||||
| 			_assert (con->attr == QSE_RADDIC_ATTR_MAKE(j, i), QSE_T("wrong constant value")); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @ -371,30 +371,50 @@ static int test2 () | ||||
| 	{ | ||||
| 		int n; | ||||
| 		n = qse_raddic_deleteconstbyname (dic, QSE_RADDIC_ATTR_MAKE(1,1), QSE_T("const-1-1")); | ||||
| 		_assert (n == 0, "errorneous constant deletion failure"); | ||||
| 		_assert (n == 0, QSE_T("errorneous constant deletion failure")); | ||||
|  | ||||
| 		n = qse_raddic_deleteconstbyname (dic, QSE_RADDIC_ATTR_MAKE(1,1), QSE_T("const-1-1")); | ||||
| 		_assert (n <= -1, "errorneous constant deletion success"); | ||||
| 		_assert (n <= -1, QSE_T("errorneous constant deletion success")); | ||||
|  | ||||
| 		n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 20); | ||||
| 		_assert (n <= -1, "errorneous constant deletion success"); | ||||
| 		_assert (n <= -1, QSE_T("errorneous constant deletion success")); | ||||
|  | ||||
| 		n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 10); | ||||
| 		_assert (n == 0, "errorneous constant deletion success"); | ||||
| 		_assert (n == 0, QSE_T("errorneous constant deletion success")); | ||||
|  | ||||
| 		n = qse_raddic_deleteconstbyvalue (dic, QSE_RADDIC_ATTR_MAKE(2,2), 10); | ||||
| 		_assert (n <= -1, "errorneous constant deletion success"); | ||||
| 		_assert (n <= -1, QSE_T("errorneous constant deletion success")); | ||||
| 	} | ||||
|  | ||||
| 	qse_raddic_close (dic); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int test3 () | ||||
| { | ||||
| 	qse_raddic_t* dic; | ||||
| 	int n, trait; | ||||
|  | ||||
| 	dic = qse_raddic_open (QSE_MMGR_GETDFL(), 0); | ||||
| 	_assert (dic != QSE_NULL, QSE_T("unable to create a radius dictionary")); | ||||
|  | ||||
| 	trait = QSE_RADDIC_ALLOW_CONST_WITHOUT_ATTR; | ||||
| 	n = qse_raddic_setopt (dic, QSE_RADDIC_TRAIT, &trait); | ||||
| 	_assert (n == 0, QSE_T("cannot set trait")); | ||||
|  | ||||
| 	n = qse_raddic_load (dic, QSE_T("dictionary")); | ||||
| 	_assert (n == 0, qse_raddic_geterrmsg(dic)); | ||||
|  | ||||
| 	qse_raddic_close (dic); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| int main () | ||||
| { | ||||
| 	qse_open_stdsios ();  | ||||
| 	R (test1); | ||||
| 	R (test2); | ||||
| 	R (test3); | ||||
| 	qse_close_stdsios (); | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user