implement struct tests

This commit is contained in:
2020-03-07 01:21:29 +01:00
parent 1403e0a231
commit 9adc48da82
2 changed files with 116 additions and 0 deletions

85
src/test/struct/struct.c Normal file
View File

@@ -0,0 +1,85 @@
#include <stdio.h>
#include <stdlib.h>
#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, 20);
struct_testExpected("init field a", 1, result->a);
struct_testExpected("init field b", false, result->b);
struct_testExpected("init field c", 20, 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, 20);
struct_testExpected("get field a", 1, getStructFieldA(result));
struct_testExpected("get field b", false, getStructFieldB(result));
struct_testExpected("get field c", 20, 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();
}

31
src/test/struct/struct.h Normal file
View File

@@ -0,0 +1,31 @@
#include <stdbool.h>
struct testStruct
{
long a;
bool b;
long c;
};
struct testStructRec
{
long a;
struct testStructRec *b;
};
struct testStruct* getTestStruct(long a, bool b, long c);
struct testStructRec* getTestStructRec(long a, struct testStructRec* b);
long getStructFieldA(struct testStruct *);
bool getStructFieldB(struct testStruct *);
long getStructFieldC(struct testStruct *);
struct testStruct *setStructFieldA(struct testStruct *t, long a);
struct testStruct *setStructFieldB(struct testStruct *t, bool b);
struct testStruct *setStructFieldC(struct testStruct *t, long c);
long getStructFieldRecA(struct testStructRec *t);
struct testStructRec *getStructFieldRecB(struct testStructRec *t);
struct testStructRec *setStructFieldRecA(struct testStructRec *t, long a);
struct testStructRec *setStructFieldRecB(struct testStructRec *t, struct testStructRec *b);