summaryrefslogtreecommitdiff
path: root/src/tests/difficulty_calc.c
diff options
context:
space:
mode:
authorphysick <mynameisgennadiy@vk.com>2026-08-29 15:01:27 +0500
committerphysick <mynameisgennadiy@vk.com>2026-08-29 15:01:27 +0500
commit935ed0235d0454cd18559fb0f6ee58e0647723fd (patch)
treed9ffad6961feadd17664057fd6bae7002d684b35 /src/tests/difficulty_calc.c
parenta6ce29f64683c63c5a42c000d60bc467aee3e84d (diff)
difficulty calcualtion fix + unit test
Diffstat (limited to 'src/tests/difficulty_calc.c')
-rw-r--r--src/tests/difficulty_calc.c57
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;
+}