diff options
| author | tylo <[email protected]> | 2021-09-17 11:24:39 +0200 |
|---|---|---|
| committer | tylo <[email protected]> | 2021-09-17 11:24:39 +0200 |
| commit | 2bed88914afe24dc3a245f398b321e8f236d23d7 (patch) | |
| tree | 7724be6dff0e5d61189f3e890d4533e50309e48a /tests | |
| parent | ce75e57b326f6d6368b366760336b20e660f272f (diff) | |
| download | STC-modified-2bed88914afe24dc3a245f398b321e8f236d23d7.tar.gz STC-modified-2bed88914afe24dc3a245f398b321e8f236d23d7.zip | |
Moved tests and v1 files
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test_new_arr.c | 47 | ||||
| -rw-r--r-- | tests/test_new_deq.c | 57 | ||||
| -rw-r--r-- | tests/test_new_list.c | 57 | ||||
| -rw-r--r-- | tests/test_new_map.c | 60 | ||||
| -rw-r--r-- | tests/test_new_pque.c | 63 | ||||
| -rw-r--r-- | tests/test_new_queue.c | 43 | ||||
| -rw-r--r-- | tests/test_new_smap.c | 67 | ||||
| -rw-r--r-- | tests/test_new_sptr.c | 45 | ||||
| -rw-r--r-- | tests/test_new_vec.c | 57 |
9 files changed, 496 insertions, 0 deletions
diff --git a/tests/test_new_arr.c b/tests/test_new_arr.c new file mode 100644 index 00000000..7513903f --- /dev/null +++ b/tests/test_new_arr.c @@ -0,0 +1,47 @@ +#include <stdio.h> + +#define i_tag i +#define i_val int +#include <stc/carr2.h> + +#define i_val int +#include <stc/carr3.h> +#include <stdio.h> + +int main() +{ + int w = 7, h = 5, d = 3; + + c_forvar (carr2_i image = carr2_i_init(w, h), carr2_i_del(&image)) + { + int *dat = carr2_i_data(&image); + for (int i = 0; i < carr2_i_size(image); ++i) + dat[i] = i; + + for (int x = 0; x < image.xdim; ++x) + for (int y = 0; y < image.ydim; ++y) + printf(" %d", image.data[x][y]); + puts(""); + + c_foreach (i, carr2_i, image) + printf(" %d", *i.ref); + } + puts("\n"); + + c_forvar (carr3_int image = carr3_int_init(w, h, d), carr3_int_del(&image)) + { + int *dat = carr3_int_data(&image); + for (int i = 0; i < carr3_int_size(image); ++i) + dat[i] = i; + + for (int x = 0; x < image.xdim; ++x) + for (int y = 0; y < image.ydim; ++y) + for (int z = 0; z < image.zdim; ++z) + printf(" %d", image.data[x][y][z]); + puts(""); + + c_foreach (i, carr3_int, image) + printf(" %d", *i.ref); + } + puts(""); +} diff --git a/tests/test_new_deq.c b/tests/test_new_deq.c new file mode 100644 index 00000000..d1a5c2a6 --- /dev/null +++ b/tests/test_new_deq.c @@ -0,0 +1,57 @@ +#include <stc/cstr.h>
+#include <stc/forward.h>
+
+forward_cdeq(i32, int);
+forward_cdeq(pnt, struct Point);
+
+struct MyStruct {
+ cdeq_i32 intvec;
+ cdeq_pnt pntvec;
+} typedef MyStruct;
+
+
+#define F_tag i32
+#define i_val int
+#include <stc/cdeq.h>
+
+struct Point { int x, y; } typedef Point;
+int point_compare(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+#define F_tag pnt
+#define i_val Point
+#define i_cmp point_compare
+#include <stc/cdeq.h>
+
+#define i_val float
+#include <stc/cdeq.h>
+
+#define i_val_str
+#include <stc/cdeq.h>
+
+
+int main()
+{
+ cdeq_i32 vec = cdeq_i32_init();
+ cdeq_i32_push_back(&vec, 123);
+ cdeq_i32_del(&vec);
+
+ cdeq_float fvec = cdeq_float_init();
+ cdeq_float_push_back(&fvec, 123.3);
+ cdeq_float_del(&fvec);
+
+ cdeq_pnt pvec = cdeq_pnt_init();
+ cdeq_pnt_push_back(&pvec, (Point){42, 14});
+ cdeq_pnt_push_back(&pvec, (Point){32, 94});
+ cdeq_pnt_push_front(&pvec, (Point){62, 81});
+ cdeq_pnt_sort(&pvec);
+ c_foreach (i, cdeq_pnt, pvec)
+ printf(" (%d %d)", i.ref->x, i.ref->y);
+ puts("");
+ cdeq_pnt_del(&pvec);
+
+ cdeq_str svec = cdeq_str_init();
+ cdeq_str_emplace_back(&svec, "Hello, friend");
+ cdeq_str_del(&svec);
+}
\ No newline at end of file diff --git a/tests/test_new_list.c b/tests/test_new_list.c new file mode 100644 index 00000000..f0983b76 --- /dev/null +++ b/tests/test_new_list.c @@ -0,0 +1,57 @@ +#include "cstr.h" +#include "forward.h" + +forward_clist(i32, int); +forward_clist(pnt, struct Point); + +struct MyStruct { + clist_i32 intlst; + clist_pnt pntlst; +} typedef MyStruct; + + +#define F_tag i32 +#define i_val int +#include "clist.h" + +struct Point { int x, y; } typedef Point; +int point_compare(const Point* a, const Point* b) { + int c = c_default_compare(&a->x, &b->x); + return c ? c : c_default_compare(&a->y, &b->y); +} +#define F_tag pnt +#define i_val Point +#define i_cmp point_compare +#include "clist.h" + +#define i_val float +#include "clist.h" + +#define i_val_str +#include "clist.h" + + +int main() +{ + clist_i32 lst = clist_i32_init(); + clist_i32_push_back(&lst, 123); + clist_i32_del(&lst); + + clist_float flst = clist_float_init(); + clist_float_push_back(&flst, 123.3); + clist_float_del(&flst); + + clist_pnt plst = clist_pnt_init(); + clist_pnt_push_back(&plst, (Point){42, 14}); + clist_pnt_push_back(&plst, (Point){32, 94}); + clist_pnt_push_back(&plst, (Point){62, 81}); + clist_pnt_sort(&plst); + c_foreach (i, clist_pnt, plst) + printf(" (%d %d)", i.ref->x, i.ref->y); + puts(""); + clist_pnt_del(&plst); + + clist_str slst = clist_str_init(); + clist_str_emplace_back(&slst, "Hello, friend"); + clist_str_del(&slst); +}
\ No newline at end of file diff --git a/tests/test_new_map.c b/tests/test_new_map.c new file mode 100644 index 00000000..2c4ee3bb --- /dev/null +++ b/tests/test_new_map.c @@ -0,0 +1,60 @@ +#include <stc/cstr.h>
+#include <stc/forward.h>
+
+forward_cmap(pnt, struct Point, int);
+
+struct MyStruct {
+ cmap_pnt pntmap;
+ cstr name;
+} typedef MyStruct;
+
+// int => int map
+#define i_key int
+#define i_val int
+#include <stc/cmap.h>
+
+// Point => int map
+struct Point { int x, y; } typedef Point;
+int point_compare(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+#define F_tag pnt // F=forward declared
+#define i_key Point
+#define i_val int
+#define i_cmp point_compare
+#include <stc/cmap.h>
+
+// int => int map
+#define i_key_str
+#define i_val_str
+#include <stc/cmap.h>
+
+// string set
+#define i_key_str
+#include <stc/cset.h>
+
+
+int main()
+{
+ cmap_int map = cmap_int_init();
+ cmap_int_insert(&map, 123, 321);
+ cmap_int_del(&map);
+
+ cmap_pnt pmap = cmap_pnt_init();
+ cmap_pnt_insert(&pmap, (Point){42, 14}, 1);
+ cmap_pnt_insert(&pmap, (Point){32, 94}, 2);
+ cmap_pnt_insert(&pmap, (Point){62, 81}, 3);
+ c_foreach (i, cmap_pnt, pmap)
+ printf(" (%d,%d: %d)", i.ref->first.x, i.ref->first.y, i.ref->second);
+ puts("");
+ cmap_pnt_del(&pmap);
+
+ cmap_str smap = cmap_str_init();
+ cmap_str_emplace(&smap, "Hello, friend", "this is the mapped value");
+ cmap_str_del(&smap);
+
+ cset_str sset = cset_str_init();
+ cset_str_emplace(&sset, "Hello, friend");
+ cset_str_del(&sset);
+}
\ No newline at end of file diff --git a/tests/test_new_pque.c b/tests/test_new_pque.c new file mode 100644 index 00000000..b9750c44 --- /dev/null +++ b/tests/test_new_pque.c @@ -0,0 +1,63 @@ +#include <stc/forward.h>
+
+forward_cpque(pnt, struct Point);
+
+struct MyStruct {
+ cpque_pnt priority_queue;
+ int id;
+};
+
+#define i_val int
+#include "cstack.h"
+
+#define i_val int
+#include "cpque.h"
+
+struct Point { int x, y; } typedef Point;
+
+int Point_cmp(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+#define F_tag pnt // F: was forward declared.
+#define i_val Point
+#define i_cmp Point_cmp
+#include "cpque.h"
+
+#include <stdio.h>
+
+int main()
+{
+ cstack_int istk = cstack_int_init();
+ cstack_int_push(&istk, 123);
+ cstack_int_push(&istk, 321);
+ // print
+ c_foreach (i, cstack_int, istk)
+ printf(" %d", *i.ref);
+ cstack_int_del(&istk);
+ puts("");
+
+ cpque_pnt pque = cpque_pnt_init();
+ cpque_pnt_push(&pque, (Point){23, 80});
+ cpque_pnt_push(&pque, (Point){12, 32});
+ cpque_pnt_push(&pque, (Point){54, 74});
+ cpque_pnt_push(&pque, (Point){12, 62});
+ // print
+ while (!cpque_pnt_empty(pque)) {
+ cpque_pnt_value_t *v = cpque_pnt_top(&pque);
+ printf(" (%d,%d)", v->x, v->y);
+ cpque_pnt_pop(&pque);
+ }
+ // free
+ cpque_pnt_del(&pque);
+ puts("");
+
+ cpque_int ique = cpque_int_init();
+ cpque_int_push(&ique, 123);
+ cpque_int_push(&ique, 321);
+ // print
+ for (int i=0; i<cpque_int_size(ique); ++i)
+ printf(" %d", ique.data[i]);
+ cpque_int_del(&ique);
+ puts("");
+}
diff --git a/tests/test_new_queue.c b/tests/test_new_queue.c new file mode 100644 index 00000000..a76f4fde --- /dev/null +++ b/tests/test_new_queue.c @@ -0,0 +1,43 @@ +#include <stc/crandom.h>
+#include <stc/forward.h>
+#include <stdio.h>
+
+forward_cqueue(pnt, struct Point);
+
+struct Point { int x, y; } typedef Point;
+int point_compare(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+#define F_tag pnt
+#define i_val Point
+#define i_cmp point_compare
+#include <stc/cqueue.h>
+
+#define i_val int
+#include <stc/cqueue.h>
+#include <time.h>
+
+int main() {
+ int n = 60000000;
+ stc64_t rng = stc64_init(time(NULL));
+ stc64_uniform_t dist = stc64_uniform_init(0, n);
+
+ c_forauto (cqueue_int, Q)
+ {
+ // Push eight million random numbers onto the queue.
+ for (int i=0; i<n; ++i)
+ cqueue_int_push(&Q, stc64_uniform(&rng, &dist));
+
+ // Push or pop on the queue ten million times
+ printf("befor: size %zu, capacity %zu\n", cqueue_int_size(Q), cqueue_int_capacity(Q));
+ for (int i=n; i>0; --i) {
+ int r = stc64_uniform(&rng, &dist);
+ if (r & 1)
+ cqueue_int_push(&Q, r);
+ else
+ cqueue_int_pop(&Q);
+ }
+ printf("after: size %zu, capacity %zu\n", cqueue_int_size(Q), cqueue_int_capacity(Q));
+ }
+}
\ No newline at end of file diff --git a/tests/test_new_smap.c b/tests/test_new_smap.c new file mode 100644 index 00000000..033749ce --- /dev/null +++ b/tests/test_new_smap.c @@ -0,0 +1,67 @@ +#include <stc/cstr.h>
+#include <stc/forward.h>
+
+forward_csmap(pnt, struct Point, int);
+
+struct MyStruct {
+ csmap_pnt pntmap;
+ cstr name;
+} typedef MyStruct;
+
+// int => int map
+#define i_key int
+#define i_val int
+#include <stc/csmap.h>
+
+// Point => int map
+struct Point { int x, y; } typedef Point;
+int point_compare(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+
+#define i_fwd
+#define i_tag pnt
+#define i_key Point
+#define i_val int
+#define i_cmp point_compare
+#include <stc/csmap.h>
+
+// int => int map
+#define i_key_str
+#define i_val_str
+#include <stc/csmap.h>
+
+// string set
+#define i_key_str
+#include <stc/csset.h>
+
+
+int main()
+{
+ c_forauto (csmap_int, map)
+ csmap_int_insert(&map, 123, 321);
+
+ c_forauto (csmap_pnt, pmap) {
+ csmap_pnt_insert(&pmap, (Point){42, 14}, 1);
+ csmap_pnt_insert(&pmap, (Point){32, 94}, 2);
+ csmap_pnt_insert(&pmap, (Point){62, 81}, 3);
+ c_foreach (i, csmap_pnt, pmap)
+ printf(" (%d,%d: %d)", i.ref->first.x, i.ref->first.y, i.ref->second);
+ puts("");
+ }
+
+ c_forauto (csmap_str, smap) {
+ csmap_str_emplace(&smap, "Hello, friend", "this is the mapped value");
+ csmap_str_emplace(&smap, "The brown fox", "jumped");
+ csmap_str_emplace(&smap, "This is the time", "for all good things");
+ c_foreach (i, csmap_str, smap)
+ printf(" (%s: %s)\n", i.ref->first.str, i.ref->second.str);
+ }
+
+ c_forauto (csset_str, sset) {
+ csset_str_emplace(&sset, "Hello, friend");
+ csset_str_emplace(&sset, "Goodbye, foe");
+ printf("Found? %s\n", csset_str_contains(&sset, "Hello, friend") ? "true" : "false");
+ }
+}
\ No newline at end of file diff --git a/tests/test_new_sptr.c b/tests/test_new_sptr.c new file mode 100644 index 00000000..2ef31790 --- /dev/null +++ b/tests/test_new_sptr.c @@ -0,0 +1,45 @@ +#include <stc/cstr.h>
+
+#include <stc/forward.h>
+forward_csptr(person, struct Person);
+
+struct Person { cstr name, last; } typedef Person;
+
+Person Person_init(const char* name, const char* last) {
+ return (Person){.name = cstr_from(name), .last = cstr_from(last)};
+}
+void Person_del(Person* p) {
+ printf("del: %s %s\n", p->name.str, p->last.str);
+ c_del(cstr, &p->name, &p->last);
+}
+
+#define F_tag person
+#define i_val Person
+#define i_valdel Person_del
+#define i_cmp c_no_compare
+#include <stc/csptr.h>
+
+#define i_val int
+#include <stc/csptr.h>
+
+#define i_tag iptr
+#define i_key csptr_int
+#define i_cmp csptr_int_compare
+#include <stc/csset.h>
+
+int main(void) {
+ c_forvar (csptr_person p = csptr_person_make(Person_init("John", "Smiths")), csptr_person_del(&p))
+ c_forvar (csptr_person q = csptr_person_clone(p), csptr_person_del(&q)) // share the pointer
+ {
+ printf("%s %s. uses: %zu\n", q.get->name.str, q.get->last.str, *q.use_count);
+
+ c_forauto (csset_iptr, map) {
+ csset_iptr_insert(&map, csptr_int_make(2021));
+ csset_iptr_insert(&map, csptr_int_make(2033));
+
+ c_foreach (i, csset_iptr, map)
+ printf(" %d", *i.ref->get);
+ puts("");
+ }
+ }
+}
\ No newline at end of file diff --git a/tests/test_new_vec.c b/tests/test_new_vec.c new file mode 100644 index 00000000..ae1fd155 --- /dev/null +++ b/tests/test_new_vec.c @@ -0,0 +1,57 @@ +#include <stc/cstr.h>
+#include <stc/forward.h>
+
+forward_cvec(i32, int);
+forward_cvec(pnt, struct Point);
+
+struct MyStruct {
+ cvec_i32 intvec;
+ cvec_pnt pntvec;
+} typedef MyStruct;
+
+
+#define F_tag i32
+#define i_val int
+#include <stc/cvec.h>
+
+struct Point { int x, y; } typedef Point;
+int point_compare(const Point* a, const Point* b) {
+ int c = c_default_compare(&a->x, &b->x);
+ return c ? c : c_default_compare(&a->y, &b->y);
+}
+#define F_tag pnt
+#define i_val Point
+#define i_cmp point_compare
+#include <stc/cvec.h>
+
+#define i_val float
+#include <stc/cvec.h>
+
+#define i_val_str
+#include <stc/cvec.h>
+
+
+int main()
+{
+ cvec_i32 vec = cvec_i32_init();
+ cvec_i32_push_back(&vec, 123);
+ cvec_i32_del(&vec);
+
+ cvec_float fvec = cvec_float_init();
+ cvec_float_push_back(&fvec, 123.3);
+ cvec_float_del(&fvec);
+
+ cvec_pnt pvec = cvec_pnt_init();
+ cvec_pnt_push_back(&pvec, (Point){42, 14});
+ cvec_pnt_push_back(&pvec, (Point){32, 94});
+ cvec_pnt_push_back(&pvec, (Point){62, 81});
+ cvec_pnt_sort(&pvec);
+ c_foreach (i, cvec_pnt, pvec)
+ printf(" (%d %d)", i.ref->x, i.ref->y);
+ puts("");
+ cvec_pnt_del(&pvec);
+
+ cvec_str svec = cvec_str_init();
+ cvec_str_emplace_back(&svec, "Hello, friend");
+ cvec_str_del(&svec);
+}
\ No newline at end of file |
