Skip to content

Commit 913329f

Browse files
committed
[test] adding tests and Github Action
1 parent d090d89 commit 913329f

File tree

5 files changed

+235
-1
lines changed

5 files changed

+235
-1
lines changed

.github/workflows/test.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
name: Test
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
pull_request:
8+
types:
9+
- opened
10+
- synchronize
11+
12+
jobs:
13+
test:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- uses: actions/checkout@v4
17+
- name: Install dependencies
18+
run: sudo apt-get update && sudo apt-get install -y libcurl4-gnutls-dev
19+
- name: Install clib
20+
run: |
21+
git clone https://github.com/clibs/clib.git
22+
cd clib
23+
make
24+
sudo make install
25+
- name: Run tests
26+
run: make test

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
2+
test:
3+
clib install --dev
4+
@$(CC) test.c src/cstring_array.c deps/char_array/char_array.c deps/utf8/utf8.c deps/utf8proc/utf8proc.c -std=c99 -I src -I deps -o $@
5+
@./$@
6+
7+
.PHONY: test

clib.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
"description": "Stores an array of NUL-terminated C strings as one contiguous array with index pointers",
66
"keywords": ["vector", "array", "string"],
77
"license": "MIT",
8+
"development": {
9+
"silentbicycle/greatest": "*"
10+
},
811
"dependencies": {
912
"goodcleanfun/char_array": "*",
1013
"goodcleanfun/num_array": "*"

src/cstring_array.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ cstring_array *cstring_array_from_char_array(char_array *str) {
6464
cstring_array *cstring_array_from_strings(char **strings, size_t n) {
6565
cstring_array *array = cstring_array_new();
6666
for (size_t i = 0; i < n; i++) {
67-
cstring_array_start_token(array);
6867
cstring_array_add_string(array, strings[i]);
6968
}
7069
return array;

test.c

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
#include "greatest/greatest.h"
2+
#include "cstring_array.h"
3+
4+
TEST test_cstring_array_new(void) {
5+
cstring_array *array = cstring_array_new();
6+
ASSERT(array != NULL);
7+
ASSERT_EQ(array->indices->n, 0);
8+
ASSERT_EQ(array->str->n, 0);
9+
cstring_array_destroy(array);
10+
PASS();
11+
}
12+
13+
TEST test_cstring_array_new_size(void) {
14+
cstring_array *array = cstring_array_new_size(10);
15+
ASSERT(array != NULL);
16+
ASSERT_EQ(array->indices->n, 0);
17+
ASSERT_EQ(array->str->m, 10);
18+
cstring_array_destroy(array);
19+
PASS();
20+
}
21+
22+
TEST test_cstring_array_capacity(void) {
23+
cstring_array *array = cstring_array_new_size(10);
24+
ASSERT_EQ(cstring_array_capacity(array), 10);
25+
cstring_array_destroy(array);
26+
PASS();
27+
}
28+
29+
TEST test_cstring_array_used(void) {
30+
cstring_array *array = cstring_array_new_size(10);
31+
ASSERT_EQ(cstring_array_used(array), 0);
32+
cstring_array_destroy(array);
33+
PASS();
34+
}
35+
36+
TEST test_cstring_array_num_strings(void) {
37+
cstring_array *array = cstring_array_new_size(10);
38+
ASSERT_EQ(cstring_array_num_strings(array), 0);
39+
cstring_array_destroy(array);
40+
PASS();
41+
}
42+
43+
TEST test_cstring_array_resize(void) {
44+
cstring_array *array = cstring_array_new_size(10);
45+
cstring_array_resize(array, 20);
46+
ASSERT_EQ(array->str->m, 20);
47+
cstring_array_destroy(array);
48+
PASS();
49+
}
50+
51+
TEST test_cstring_array_clear(void) {
52+
cstring_array *array = cstring_array_new_size(10);
53+
cstring_array_clear(array);
54+
ASSERT_EQ(array->str->n, 0);
55+
ASSERT_EQ(array->indices->n, 0);
56+
cstring_array_destroy(array);
57+
PASS();
58+
}
59+
60+
TEST test_cstring_array_start_token(void) {
61+
cstring_array *array = cstring_array_new_size(10);
62+
uint32_t index = cstring_array_start_token(array);
63+
ASSERT_EQ(index, 0);
64+
ASSERT_EQ(array->indices->n, 1);
65+
cstring_array_destroy(array);
66+
PASS();
67+
}
68+
69+
TEST test_cstring_array_terminate(void) {
70+
cstring_array *array = cstring_array_new_size(10);
71+
cstring_array_start_token(array);
72+
cstring_array_terminate(array);
73+
ASSERT_EQ(array->str->a[0], '\0');
74+
cstring_array_destroy(array);
75+
PASS();
76+
}
77+
78+
TEST test_cstring_array_add_string(void) {
79+
cstring_array *array = cstring_array_new_size(10);
80+
uint32_t index = cstring_array_add_string(array, "hello");
81+
ASSERT_EQ(index, 0);
82+
ASSERT_EQ(array->indices->n, 1);
83+
ASSERT_EQ(array->str->n, 6);
84+
ASSERT_EQ(array->str->a[5], '\0');
85+
cstring_array_destroy(array);
86+
PASS();
87+
}
88+
89+
TEST test_cstring_array_add_string_len(void) {
90+
cstring_array *array = cstring_array_new_size(10);
91+
uint32_t index = cstring_array_add_string_len(array, "hello", 5);
92+
ASSERT_EQ(index, 0);
93+
ASSERT_EQ(array->indices->n, 1);
94+
ASSERT_EQ(array->str->n, 6);
95+
ASSERT_EQ(array->str->a[5], '\0');
96+
cstring_array_destroy(array);
97+
PASS();
98+
}
99+
100+
TEST test_cstring_array_cat_string(void) {
101+
cstring_array *array = cstring_array_new_size(10);
102+
cstring_array_start_token(array);
103+
cstring_array_cat_string(array, "hello");
104+
ASSERT_EQ(array->indices->n, 1);
105+
ASSERT_EQ(array->str->n, 6);
106+
ASSERT_EQ(array->str->a[5], '\0');
107+
cstring_array_destroy(array);
108+
PASS();
109+
}
110+
111+
TEST test_cstring_array_cat_string_len(void) {
112+
cstring_array *array = cstring_array_new_size(10);
113+
cstring_array_start_token(array);
114+
cstring_array_cat_string_len(array, "hello", 5);
115+
ASSERT_EQ(array->indices->n, 1);
116+
ASSERT_EQ(array->str->n, 6);
117+
ASSERT_EQ(array->str->a[5], '\0');
118+
cstring_array_destroy(array);
119+
PASS();
120+
}
121+
122+
TEST test_cstring_array_from_char_array(void) {
123+
char_array *str = char_array_new();
124+
char_array_push(str, 'h');
125+
char_array_push(str, 'e');
126+
char_array_push(str, 'l');
127+
char_array_push(str, 'l');
128+
char_array_push(str, 'o');
129+
char_array_push(str, '\0');
130+
cstring_array *array = cstring_array_from_char_array(str);
131+
ASSERT_EQ(array->indices->n, 1);
132+
ASSERT_EQ(array->str->n, 6);
133+
ASSERT_EQ(array->str->a[5], '\0');
134+
cstring_array_destroy(array);
135+
PASS();
136+
}
137+
138+
TEST test_cstring_array_from_strings(void) {
139+
cstring_array *array = cstring_array_from_strings((char *[]){"hello", "world"}, 2);
140+
ASSERT_EQ(array->indices->n, 2);
141+
ASSERT_EQ(array->str->n, 12);
142+
ASSERT_EQ(array->str->a[11], '\0');
143+
cstring_array_destroy(array);
144+
PASS();
145+
}
146+
147+
TEST test_cstring_array_foreach(void) {
148+
cstring_array *array = cstring_array_new_size(10);
149+
cstring_array_add_string(array, "hello");
150+
cstring_array_add_string(array, "world");
151+
cstring_array_add_string(array, "foo");
152+
cstring_array_add_string(array, "bar");
153+
154+
int i = 0;
155+
char *s = NULL;
156+
cstring_array_foreach(array, i, s, {
157+
if (i == 0) {
158+
ASSERT_STR_EQ(s, "hello");
159+
} else if (i == 1) {
160+
ASSERT_STR_EQ(s, "world");
161+
} else if (i == 2) {
162+
ASSERT_STR_EQ(s, "foo");
163+
} else if (i == 3) {
164+
ASSERT_STR_EQ(s, "bar");
165+
}
166+
});
167+
168+
cstring_array_destroy(array);
169+
PASS();
170+
}
171+
172+
SUITE(cstring_array_suite) {
173+
RUN_TEST(test_cstring_array_new);
174+
RUN_TEST(test_cstring_array_new_size);
175+
RUN_TEST(test_cstring_array_capacity);
176+
RUN_TEST(test_cstring_array_used);
177+
RUN_TEST(test_cstring_array_num_strings);
178+
RUN_TEST(test_cstring_array_resize);
179+
RUN_TEST(test_cstring_array_clear);
180+
RUN_TEST(test_cstring_array_start_token);
181+
RUN_TEST(test_cstring_array_terminate);
182+
RUN_TEST(test_cstring_array_add_string);
183+
RUN_TEST(test_cstring_array_add_string_len);
184+
RUN_TEST(test_cstring_array_cat_string);
185+
RUN_TEST(test_cstring_array_cat_string_len);
186+
RUN_TEST(test_cstring_array_from_char_array);
187+
RUN_TEST(test_cstring_array_foreach);
188+
}
189+
190+
191+
192+
GREATEST_MAIN_DEFS();
193+
194+
int main(int argc, char **argv) {
195+
GREATEST_MAIN_BEGIN();
196+
RUN_SUITE(cstring_array_suite);
197+
GREATEST_MAIN_END();
198+
}
199+

0 commit comments

Comments
 (0)