diff options
Diffstat (limited to 'src/tests/difficulty_calc.c')
| -rw-r--r-- | src/tests/difficulty_calc.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/tests/difficulty_calc.c b/src/tests/difficulty_calc.c new file mode 100644 index 0000000..24796e9 --- /dev/null +++ b/src/tests/difficulty_calc.c @@ -0,0 +1,57 @@ +#include <stddef.h> +#include <stdio.h> +#include <stdlib.h> +#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; +} |
