summaryrefslogtreecommitdiff
path: root/myfind/myfind/tests/unit
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:07:58 +0200
commit967be9e750221ab2ab783f95df79bb26d290a45e (patch)
tree6802900a5e975f9f68b169f0f503f040056d6952 /myfind/myfind/tests/unit
add: added projectsHEADmain
Diffstat (limited to 'myfind/myfind/tests/unit')
-rw-r--r--myfind/myfind/tests/unit/eval.c32
-rw-r--r--myfind/myfind/tests/unit/lexing.c45
-rw-r--r--myfind/myfind/tests/unit/shunting.c30
3 files changed, 107 insertions, 0 deletions
diff --git a/myfind/myfind/tests/unit/eval.c b/myfind/myfind/tests/unit/eval.c
new file mode 100644
index 0000000..1debdbf
--- /dev/null
+++ b/myfind/myfind/tests/unit/eval.c
@@ -0,0 +1,32 @@
+#include <criterion/criterion.h>
+#include <criterion/assert.h>
+
+#include "lexer.h"
+#include "shunting_yard.h"
+#include "myfind.h"
+
+TestSuite(ast_eval);
+
+Test(ast_eval, ast_eval_basic)
+{
+ char *argv[] = {"-print", "-name", "*.c"};
+ int len = 3;
+ struct ast **tokens = lex(argv, &len);
+ struct ast *root = shunting_yard(tokens, len);
+ int ret = eval_expr(root, "src/myfind.c");
+ cr_expect(ret == 1, "Expected return value 1, got %d", ret);
+ ast_destroy(root);
+ free(tokens);
+}
+
+Test(ast_eval, ast_eval_basic2)
+{
+ char *argv[] = {"-print", "-name", "*.c", "-o", "-type", "f"};
+ int len = 6;
+ struct ast **tokens = lex(argv, &len);
+ struct ast *root = shunting_yard(tokens, len);
+ int ret = eval_expr(root, "src/myfind.c");
+ cr_expect(ret == 1, "Expected return value 1, got %d", ret);
+ ast_destroy(root);
+ free(tokens);
+}
diff --git a/myfind/myfind/tests/unit/lexing.c b/myfind/myfind/tests/unit/lexing.c
new file mode 100644
index 0000000..dfa876a
--- /dev/null
+++ b/myfind/myfind/tests/unit/lexing.c
@@ -0,0 +1,45 @@
+#include <criterion/criterion.h>
+#include <criterion/assert.h>
+
+#include "lexer.h"
+#include "myfind.h"
+
+TestSuite(lexer);
+
+Test(lex, lex_basic)
+{
+ char *argv[] = {"-print", "-name", "*.c"};
+ int len = 3;
+ struct ast **tokens = lex(argv, &len);
+ cr_assert(len == 2, "Expected size %d, got %d", 2, len);
+ enum type expected[] = {PRINT, NAME};
+ for (int i = 0; i < len; i++)
+ {
+ cr_expect(tokens[i]->type == expected[i], "Expected %d, got %d", expected[i], tokens[i]->type);
+ free(tokens[i]);
+ }
+ free(tokens);
+}
+
+Test(lex, lex_basic2)
+{
+ char *argv[] = {"-print", "-name", "*.c", "-o", "-type", "f"};
+ int len = 6;
+ struct ast **tokens = lex(argv, &len);
+ cr_assert(len == 4, "Expected size %d, got %d", 4, len);
+ enum type expected[] = {PRINT, NAME, OR, TYPE};
+ for (int i = 0; i < len; i++)
+ {
+ cr_expect(tokens[i]->type == expected[i], "Expected %d, got %d", expected[i], tokens[i]->type);
+ free(tokens[i]);
+ }
+ free(tokens);
+}
+
+Test(lex, lex_error)
+{
+ char *argv[] = {"-print", "-name"};
+ int len = 2;
+ struct ast **tokens = lex(argv, &len);
+ cr_expect(tokens == NULL, "Expected (null), got %p", tokens);
+}
diff --git a/myfind/myfind/tests/unit/shunting.c b/myfind/myfind/tests/unit/shunting.c
new file mode 100644
index 0000000..e69437a
--- /dev/null
+++ b/myfind/myfind/tests/unit/shunting.c
@@ -0,0 +1,30 @@
+#include <criterion/criterion.h>
+#include <criterion/assert.h>
+
+#include "lexer.h"
+#include "shunting_yard.h"
+#include "myfind.h"
+
+TestSuite(shunting_yard);
+
+Test(shunting_yard, shunting_basic)
+{
+ char *argv[] = {"-print", "-name", "*.c"};
+ int len = 3;
+ struct ast **tokens = lex(argv, &len);
+ struct ast *root = shunting_yard(tokens, len);
+ cr_expect(root->type == AND, "Expected AND as root node, got %d", root->type);
+ ast_destroy(root);
+ free(tokens);
+}
+
+Test(shunting_yard, shunting_basic2)
+{
+ char *argv[] = {"-print", "-name", "*.c", "-o", "-type", "f"};
+ int len = 6;
+ struct ast **tokens = lex(argv, &len);
+ struct ast *root = shunting_yard(tokens, len);
+ cr_expect(root->type == OR, "Expected OR as root node, got %d", root->type);
+ ast_destroy(root);
+ free(tokens);
+}