29 #if GWENHYWFAR_ENABLE_TESTCODE 32 #include <gwenhywfar/mdigest.h> 42 typedef struct TEST_TYPE TEST_TYPE;
60 static TEST_TYPE *TestType_new(
const char *s,
int pos);
61 static void TestType_Attach(TEST_TYPE *tt);
62 static void TestType_free(TEST_TYPE *tt);
64 static int TestType_CalcHash(TEST_TYPE *tt);
65 static int TestType_TestHash(
const TEST_TYPE *tt);
78 static TEST_TYPE *createTestType(
int num);
79 static void dumpTestTypeList(TEST_TYPE_LIST *ttList);
112 TEST_TYPE *TestType_new(
const char *s,
int pos)
120 tt->testStringPtr=strdup(s);
121 tt->testPosition=pos;
127 void TestType_Attach(TEST_TYPE *tt)
130 assert(tt->_refCounter);
132 if (tt && tt->_refCounter) {
143 void TestType_free(TEST_TYPE *tt)
145 if (tt && tt->_refCounter) {
147 if (tt->_refCounter==1) {
149 if (tt->testStringPtr)
150 free(tt->testStringPtr);
161 int TestType_CalcHash(TEST_TYPE *tt)
163 if (tt->testStringPtr && *(tt->testStringPtr)) {
169 (
const uint8_t *)tt->testStringPtr, strlen(tt->testStringPtr),
170 tt->testHash,
sizeof(tt->testHash));
183 int TestType_TestHash(
const TEST_TYPE *tt)
185 if (tt->testStringPtr && *(tt->testStringPtr)) {
192 (
const uint8_t *)tt->testStringPtr, strlen(tt->testStringPtr),
201 if (memcmp(hash, tt->testHash,
sizeof(hash))!=0) {
211 TEST_TYPE *createTestType(
int num)
214 char testString[256];
217 snprintf(testString,
sizeof(testString),
"This is test string number %d", num);
218 tt=TestType_new(testString, num);
223 rv=TestType_CalcHash(tt);
254 void dumpTestTypeList(TEST_TYPE_LIST *ttList)
258 tt=TestType_List_First(ttList);
260 fprintf(stderr,
"%5d: %3d: %s\n", tt->testPosition, tt->_refCounter, tt->testStringPtr);
261 tt=TestType_List_Next(tt);
283 if (pl->refCount!=1) {
289 if (pl->maxEntries!=128) {
295 if (pl->usedEntries!=0) {
301 if (pl->steps!=128) {
308 if (pl->entryList->refCounter!=1) {
314 if (pl->entryList->storedEntries!=128) {
321 for (i=0; i<128; i++) {
322 if (pl->entryList->entries[i]!=
NULL) {
348 for (i=0; i<1024; i++) {
352 tt=createTestType(i);
361 if (pl->maxEntries!=1024) {
367 if (pl->usedEntries!=1024) {
373 for (i=0; i<1024; i++) {
384 rv=TestType_TestHash(tt);
393 for (i=0; i<1024; i++) {
425 for (i=0; i<1000; i++) {
429 tt=createTestType(i);
446 if (!(plCopy->flags & GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE)) {
453 if (!(pl->flags & GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE)) {
460 if (plCopy->entryList != pl->entryList) {
467 if (pl->entryList->refCounter!=2) {
473 for (i=1000; i<1024; i++) {
477 tt=createTestType(i);
487 if (plCopy->flags & GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE) {
488 DBG_ERROR(
GWEN_LOGDOMAIN,
"Invalid object field: flags (should have cleared GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE)");
494 if (!(pl->flags & GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE)) {
496 "Invalid object field in old list: flags (should not have cleared GWEN_SIMPLEPTRLIST_FLAGS_COPYONWRITE)");
502 if (plCopy->entryList == pl->entryList) {
509 if (pl->entryList->refCounter!=1) {
515 if (plCopy->entryList->refCounter!=1) {
521 if (plCopy->maxEntries!=1024+128) {
527 if (plCopy->usedEntries!=1024) {
533 if (pl->maxEntries!=1024) {
539 if (pl->usedEntries!=1000) {
546 for (i=0; i<1024; i++) {
558 rv=TestType_TestHash(tt);
568 for (i=0; i<1024; i++) {
599 TEST_TYPE_LIST *ttList;
608 ttList=TestType_List_new();
610 for (i=0; i<1024; i++) {
614 tt=createTestType(i);
615 TestType_List_Add(tt, ttList);
629 tt=TestType_List_First(ttList);
631 if (tt->_refCounter!=2) {
633 TestType_List_free(ttList);
638 tt=TestType_List_Next(tt);
645 for (i=0; i<1024; i++) {
652 TestType_List_free(ttList);
657 rv=TestType_TestHash(tt);
660 TestType_List_free(ttList);
672 tt=TestType_List_First(ttList);
674 if (tt->_refCounter!=1) {
676 TestType_List_free(ttList);
680 tt=TestType_List_Next(tt);
687 TestType_List_free(ttList);
704 TEST_TYPE_LIST *ttList;
713 ttList=TestType_List_new();
714 for (i=0; i<1000; i++) {
718 tt=createTestType(i);
719 TestType_List_Add(tt, ttList);
738 "Invalid object field in list: flags (should have set GWEN_SIMPLEPTRLIST_FLAGS_ATTACHTOOBJECTS)");
746 "Invalid object field in list: flags (should have set GWEN_SIMPLEPTRLIST_FLAGS_DETACHFROMOBJECTS)");
753 for (i=1000; i<1024; i++) {
757 tt=createTestType(i);
758 TestType_List_Add(tt, ttList);
769 for (i=0; i<1024; i++) {
776 TestType_List_free(ttList);
782 rv=TestType_TestHash(tt);
785 TestType_List_free(ttList);
797 tt=TestType_List_First(ttList);
800 if (tt->_refCounter!=3) {
802 dumpTestTypeList(ttList);
803 TestType_List_free(ttList);
809 if (tt->_refCounter!=2) {
811 TestType_List_free(ttList);
817 tt=TestType_List_Next(tt);
831 tt=TestType_List_First(ttList);
834 if (tt->_refCounter!=2) {
836 TestType_List_free(ttList);
842 if (tt->_refCounter!=1) {
844 TestType_List_free(ttList);
850 tt=TestType_List_Next(tt);
864 tt=TestType_List_First(ttList);
866 if (tt->_refCounter!=1) {
868 TestType_List_free(ttList);
873 tt=TestType_List_Next(tt);
880 TestType_List_free(ttList);
897 TEST_TYPE_LIST *ttList;
906 ttList=TestType_List_new();
907 for (i=0; i<1024; i++) {
911 tt=createTestType(i);
912 TestType_List_Add(tt, ttList);
931 "Invalid object field in list: flags (should have set GWEN_SIMPLEPTRLIST_FLAGS_ATTACHTOOBJECTS)");
939 "Invalid object field in list: flags (should have set GWEN_SIMPLEPTRLIST_FLAGS_DETACHFROMOBJECTS)");
950 tt=createTestType(1024);
951 TestType_List_Add(tt, ttList);
962 for (i=0; i<1024; i++) {
969 TestType_List_free(ttList);
975 rv=TestType_TestHash(tt);
978 TestType_List_free(ttList);
990 tt=TestType_List_First(ttList);
992 if (cnt==1024 || cnt==100) {
993 if (tt->_refCounter!=2) {
995 TestType_List_free(ttList);
1002 if (tt->_refCounter!=3) {
1004 TestType_List_free(ttList);
1011 tt=TestType_List_Next(tt);
1024 if (!(tt1 && tt2 && tt1!=tt2)) {
1026 TestType_List_free(ttList);
1032 if (tt1->_refCounter!=2) {
1034 TestType_List_free(ttList);
1043 TestType_List_free(ttList);
void * GWEN_SimplePtrList_GetPtrAt(const GWEN_SIMPLEPTRLIST *pl, uint64_t idx)
int test5(int argc, char **argv)
int test3(int argc, char **argv)
void GWEN_MDigest_free(GWEN_MDIGEST *md)
#define GWEN_ERROR_INVALID
#define GWEN_FREE_OBJECT(varname)
int test6(int argc, char **argv)
int GWEN_MDigest_Digest(GWEN_MDIGEST *md, const uint8_t *srcBuf, unsigned int srcLen, uint8_t *dstBuf, unsigned int dstLen)
int GWEN_SimplePtrList_AddTests(GWEN_TEST_MODULE *mod)
#define GWEN_LIST_FUNCTION_DEFS(t, pr)
int test2(int argc, char **argv)
GWEN_TEST_MODULE * GWEN_Test_Module_AddTest(GWEN_TEST_MODULE *st, const char *tName, GWEN_TEST_MODULE_TEST_FN fn, const char *tDescr)
int GWEN_SimplePtrList_SetPtrAt(GWEN_SIMPLEPTRLIST *pl, uint64_t idx, void *p)
#define GWEN_LIST_ELEMENT(t)
#define GWEN_NEW_OBJECT(typ, varname)
GWENHYWFAR_API GWEN_MDIGEST * GWEN_MDigest_Rmd160_new(void)
GWEN_SIMPLEPTRLIST * GWEN_SimplePtrList_LazyCopy(GWEN_SIMPLEPTRLIST *oldList)
struct GWEN_TEST_MODULE GWEN_TEST_MODULE
#define GWEN_ERROR_GENERIC
struct GWEN_MDIGEST GWEN_MDIGEST
struct GWEN_SIMPLEPTRLIST GWEN_SIMPLEPTRLIST
#define GWEN_SIMPLEPTRLIST_FLAGS_ATTACHTOOBJECTS
#define DBG_ERROR(dbg_logger, format, args...)
void GWEN_SimplePtrList_AddFlags(GWEN_SIMPLEPTRLIST *pl, uint32_t f)
GWEN_SIMPLEPTRLIST * GWEN_SimplePtrList_new(uint64_t startEntries, uint64_t steps)
int test4(int argc, char **argv)
GWEN_SIMPLEPTRLIST_FREEOBJECT_FN GWEN_SimplePtrList_SetFreeObjectFn(GWEN_SIMPLEPTRLIST *pl, GWEN_SIMPLEPTRLIST_FREEOBJECT_FN fn)
#define DBG_INFO(dbg_logger, format, args...)
#define GWEN_LIST_INIT(t, element)
GWEN_SIMPLEPTRLIST_ATTACHOBJECT_FN GWEN_SimplePtrList_SetAttachObjectFn(GWEN_SIMPLEPTRLIST *pl, GWEN_SIMPLEPTRLIST_ATTACHOBJECT_FN fn)
#define GWEN_LIST_FUNCTIONS(t, pr)
GWEN_TEST_MODULE * GWEN_Test_Module_AddModule(GWEN_TEST_MODULE *st, const char *tName, const char *tDescr)
int64_t GWEN_SimplePtrList_AddPtr(GWEN_SIMPLEPTRLIST *pl, void *p)
#define GWEN_SIMPLEPTRLIST_FLAGS_DETACHFROMOBJECTS
#define GWEN_LIST_FINI(t, element)
void GWEN_SimplePtrList_free(GWEN_SIMPLEPTRLIST *pl)
const char * GWEN_Error_SimpleToString(int i)
Returns a (very) short string describing the given GWEN error code, or "Unknown error" for unknown co...