#include #include #include "struct.h" #include "../print/print.h" // C equivalent implementations of the funcitons written in k struct testStruct* cGetTestStruct(long a, bool b, long c) { struct testStruct* result = (struct testStruct*) malloc(sizeof(struct testStruct)); result->a = a; result->b = b; result->c = c; return result; } struct testStructRec* cGetTestStructRec(long a, struct testStructRec* b) { struct testStructRec* result = (struct testStructRec*) malloc(sizeof(struct testStructRec)); result->a = a; result->b = b; return result; } int struct_testExpected(char *name, long expected, long result) { if (expected == result) { succ(name, expected, result); return 0; } else { err(name, expected, result); return 1; } } int testStructCreation() { printf("\nStruct creation tests\n"); struct testStruct* result = getTestStruct(1, false, 23.3); struct_testExpected("init field a", 1, result->a); struct_testExpected("init field b", false, result->b); struct_testExpected("init field c", 23.3, result->c); free(result); printf("\n Recursive struct creation tests\n"); struct testStructRec* innerStruct = getTestStructRec(20, NULL); struct testStructRec* resultRec = getTestStructRec(10, innerStruct); struct_testExpected("init rec field a", 10, resultRec->a); struct_testExpected("init rec field b", innerStruct, resultRec->b); struct_testExpected("init inner field a", 20, resultRec->b->a); struct_testExpected("init inner field b", NULL, resultRec->b->b); free(resultRec); free(innerStruct); } int testStructGet() { printf("\nStruct getter tests\n"); struct testStruct* result = getTestStruct(1, false, 23.3); struct_testExpected("get field a", 1, getStructFieldA(result)); struct_testExpected("get field b", false, getStructFieldB(result)); struct_testExpected("get field c", 23.3, getStructFieldC(result)); free(result); printf("\nStruct getter tests\n"); struct testStructRec* innerStruct = getTestStructRec(1, NULL); struct testStructRec* resultRec = getTestStructRec(20, innerStruct); struct_testExpected("get rec field a", 20, getStructFieldRecA(resultRec)); struct_testExpected("get rec field b", innerStruct, getStructFieldRecB(resultRec)); struct_testExpected("get inner field a", 1, getStructFieldRecA(getStructFieldRecB(resultRec))); struct_testExpected("get inner field b", NULL, getStructFieldRecB(getStructFieldRecB(resultRec))); free(resultRec); free(innerStruct); } void runStructTests() { testStructCreation(); testStructGet(); }