#include #include #include #include "../puzzles/puzzle.h" extern size_t deriveDifficuty(Puzzle *puzzle); // we can't use the global version since we don't strdup here void free_puzzle(Puzzle *p) { if (p == NULL) return; if (p->Tests != NULL) free(p->Tests); free(p); } char *difficultyCalculator() { Puzzle *simple_puzzle = malloc(sizeof(Puzzle)); if (simple_puzzle == NULL) return "Puzzle allocation failed"; simple_puzzle->TestC = 2; simple_puzzle->Tests = malloc(sizeof(Test) * 2); if (simple_puzzle->Tests == NULL) return "Test array allocation failed"; simple_puzzle->Tests[0].MainMethodSignature = "sig"; simple_puzzle->Tests[0].RecieverName = "rec"; simple_puzzle->Tests[1].MainMethodSignature = "sig"; simple_puzzle->Tests[1].RecieverName = "rec"; size_t calcualted_diff = deriveDifficuty(simple_puzzle); if (calcualted_diff != 2) { free_puzzle(simple_puzzle); printf("Got: %zu, expected: %d\n", calcualted_diff, 2); return "The difficulty calculation for puzzles with one method is incorrect"; } simple_puzzle->Tests[1].MainMethodSignature = "sig1"; calcualted_diff = deriveDifficuty(simple_puzzle); if (calcualted_diff != 4) { free_puzzle(simple_puzzle); printf("Got: %zu, expected: %d\n", calcualted_diff, 4); return "The difficulty calculation for puzzles with two methods (different signature) is incorrect"; } simple_puzzle->Tests[1].MainMethodSignature = "sig"; simple_puzzle->Tests[1].RecieverName = "re1"; calcualted_diff = deriveDifficuty(simple_puzzle); if (calcualted_diff != 4) { free_puzzle(simple_puzzle); printf("Got: %zu, expected: %d\n", calcualted_diff, 4); return "The difficulty calculation for puzzles with two methods (different recievers) is incorrect"; } // FreePuzzle(simple_puzzle); free_puzzle(simple_puzzle); return NULL; }