summaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2022-01-04 11:51:58 +0800
committerJSDurand <mmemmew@gmail.com>2022-01-04 11:51:58 +0800
commit55dc897da6e81f2a26cfc7e66ac942824773498b (patch)
treefce0d7d57832907c991d551833bf5eecde947dd2 /src/test
parent53b8b6ffab5a968db75e9babddf4e2dbb2c688a3 (diff)
temporary commit
Now we can read grammars from a file. But we need to check if it works for reading strings still.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/check_grammar.c36
-rw-r--r--src/test/check_list.c29
-rw-r--r--src/test/check_reader.c32
3 files changed, 77 insertions, 20 deletions
diff --git a/src/test/check_grammar.c b/src/test/check_grammar.c
index 39f66ee..98a07cd 100644
--- a/src/test/check_grammar.c
+++ b/src/test/check_grammar.c
@@ -37,8 +37,7 @@ main(U_ATTR int argc, U_ATTR char **argv)
List *rules = new_list();
List *names = new_list();
-
- for (int i = 0; i < 3; i++) {
+ for (int i = 0; i < 4; i++) {
tnt_string = new_tnt_string("ntn", 3,
(NT) 3*(i+1),
(T) 3*(i+1)*(i+1),
@@ -48,18 +47,41 @@ main(U_ATTR int argc, U_ATTR char **argv)
eprintf("i = %d, cannot create tnt string\n", i);
map_list(rules, destroy_rule_and_free_all);
-
destroy_list(rules, 0);
- destroy_list(names, 1);
+
+ map_list(names, destroy_cpa_and_free_all);
+ destroy_list(names, 0);
return 1;
}
- rule = new_rule(i, tnt_string);
+ rule = new_rule(i%3, tnt_string);
add_to_list(rules, rule);
char *name = MYALLOC(char, 7);
snprintf(name, 7, "Rule %d", i);
- add_to_list(names, name);
+
+ utf8* uname = new_utf8(name, 6);
+
+ str_info info = get_info((str *)uname, 0);
+
+ NUM *varray = MYALLOC(NUM, 6);
+ NUM vindex = 0;
+
+ for (NUM index = 0;
+ info.value >= 0 && index < str_length((str *) uname);
+ index += info.step, vindex++) {
+ info = get_info((str *)uname, index);
+
+ *(varray+vindex) = info.value;
+ }
+
+ destroy_str((str *) uname, 1);
+
+ cpa *cpap = MYALLOC(cpa, 1);
+ cpap->array = varray;
+ cpap->size = vindex;
+
+ add_to_list(names, cpap);
}
Grammar *g = new_grammar();
@@ -70,7 +92,7 @@ main(U_ATTR int argc, U_ATTR char **argv)
destroy_grammar(g, 1);
- free(g);
+ destroy_list(rules, 1);
return 0;
}
diff --git a/src/test/check_list.c b/src/test/check_list.c
index 8677cd3..fe23b2b 100644
--- a/src/test/check_list.c
+++ b/src/test/check_list.c
@@ -2,7 +2,7 @@
#include <stdlib.h>
#include "../list.h"
-void
+static void
print_int(void *p)
{
printf("%d\n", *((int *)p));
@@ -155,6 +155,8 @@ main(U_ATTR int argc, U_ATTR char **argv)
exit(1);
}
+ eprintf("Successfully created LS2!\n");
+
for (NUM i = 0; i < 5; i++) {
int *pointer = malloc(sizeof *pointer * 1);
@@ -197,7 +199,7 @@ main(U_ATTR int argc, U_ATTR char **argv)
}
NUM arr[10];
-
+
for (NUM i = 0; i < 10; i++) {
arr[i] = i*i-i+1;
if (add_to_list(ls, arr+i)) {
@@ -211,7 +213,28 @@ main(U_ATTR int argc, U_ATTR char **argv)
destroy_list(ls, 0);
+ /* test array_to_list */
+ int *arr3 = MYALLOC(int, 20);
+
+ void **arr2 = NULL;
+
+ for (NUM i = 0; i < 20; i++) {
+ *(arr3+i) = i*i+i+1;
+ }
+
+ arr2 = MYALLOC(void *, 20);
+
+ for (NUM i = 0; i < 20; i++) *(arr2+i) = arr3+i;
+
+ ls = array_to_list(arr2, 20);
+
+ printf("Printing a list from an array\n");
+
+ map_list(ls, print_int);
+
+ destroy_list(ls, 2);
+
printf("Every test is successful!\n");
-
+
return 0;
}
diff --git a/src/test/check_reader.c b/src/test/check_reader.c
index 1d73b3f..8769cd7 100644
--- a/src/test/check_reader.c
+++ b/src/test/check_reader.c
@@ -6,17 +6,29 @@
#include "../grammar.h"
#include "../reader.h"
-/* The test of reading grammars should be postponed till later. */
-
-/* Grammar *
- * read_grammar(List *args)
- * {
- *
- * } */
-
-
+/* TODO: check string */
int
main(U_ATTR int argc, U_ATTR char **argv)
{
- return 77;
+ /* return 77; */
+
+ char *file_name = "test.txt";
+ char *buffer = MYALLOC(char, 512);
+ NUM buffer_size = 0;
+
+ if (read_entire_file(file_name, &buffer, &buffer_size)) {
+ fleprintf("%s:%d, Cannot read file %s", file_name);
+ free(buffer);
+ return 1;
+ }
+
+ utf8 *s = new_utf8(buffer, buffer_size);
+
+ Grammar *g = read_grammar_from_bnf((str *) s);
+
+ print_grammar(g);
+ destroy_grammar(g, 2);
+ destroy_str((str *)s, 1);
+
+ return 0;
}