From d96b8c7d12fc61ec609d6138627b9d6d18139a9a Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 28 Oct 2023 00:00:21 +0300 Subject: move to monorepo + Will probably have to make some changes to dir layout to make things make more sense --- core/tests/add.c | 23 +++++++++++++++++++++++ core/tests/comp.c | 6 ++++++ core/tests/diop.c | 21 +++++++++++++++++++++ core/tests/div.c | 22 ++++++++++++++++++++++ core/tests/from_to.c | 10 ++++++++++ core/tests/mul.c | 28 ++++++++++++++++++++++++++++ core/tests/sub.c | 22 ++++++++++++++++++++++ core/tests/unop.c | 24 ++++++++++++++++++++++++ 8 files changed, 156 insertions(+) create mode 100644 core/tests/add.c create mode 100644 core/tests/comp.c create mode 100644 core/tests/diop.c create mode 100644 core/tests/div.c create mode 100644 core/tests/from_to.c create mode 100644 core/tests/mul.c create mode 100644 core/tests/sub.c create mode 100644 core/tests/unop.c (limited to 'core/tests') diff --git a/core/tests/add.c b/core/tests/add.c new file mode 100644 index 0000000..3d733ce --- /dev/null +++ b/core/tests/add.c @@ -0,0 +1,23 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + assert(argc == 2); + char *s = argv[1]; + tri_t a = tri_parse_default(s, strlen(s)); + tri_t one = tri_from(1); + + int64_t ba = tri_to(a); + + for (size_t i = 0; i < 1000000000; ++i) { + a = tri_add(a, one); + } + + assert(ba + 1000000000 == tri_to(a)); + + char r[32]; + size_t l = tri_fmt_default(r, 32, a); + r[l] = '\0'; + printf("%s\n", r); +} diff --git a/core/tests/comp.c b/core/tests/comp.c new file mode 100644 index 0000000..b4ac94d --- /dev/null +++ b/core/tests/comp.c @@ -0,0 +1,6 @@ +#include + +int main() +{ + /* test comparisons */ +} diff --git a/core/tests/diop.c b/core/tests/diop.c new file mode 100644 index 0000000..1f9aea4 --- /dev/null +++ b/core/tests/diop.c @@ -0,0 +1,21 @@ +#include + +static tri_t f; + +static tri_t filter(tri_t t) +{ + tri_t r = tri_diop(OON, OOO, OOP, t, f); + return r; +} + +int main() +{ + /* very much not enough testing */ + f = tri_parse_default("111111111", 9); + + tri_t a = tri_parse_default("iii000111", 9); + tri_t b = tri_parse_default("i01i01i01", 9); + + tri_t r = tri_diop(NNN, NNN, NNN, a, b); + assert(tri_eq(filter(r), tri_parse_default("iiiiiiiii", 9))); +} diff --git a/core/tests/div.c b/core/tests/div.c new file mode 100644 index 0000000..07e429d --- /dev/null +++ b/core/tests/div.c @@ -0,0 +1,22 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + assert(argc == 2); + char *s = argv[1]; + tri_t a = tri_parse_default(s, strlen(s)); + tri_t one = tri_from(1); + + trival_t ba = tri_to(a); + + for (size_t i = 0; i < 1000000000; ++i) + a = tri_div(a, one); + + assert(ba == tri_to(a)); + + char r[32]; + size_t l = tri_fmt_default(r, 32, a); + r[l] = '\0'; + printf("%s\n", r); +} diff --git a/core/tests/from_to.c b/core/tests/from_to.c new file mode 100644 index 0000000..d6a392d --- /dev/null +++ b/core/tests/from_to.c @@ -0,0 +1,10 @@ +#include + +int main() +{ + /* increment by prime to hopefully somewhat randomly test patterns */ + for (int64_t i = TRI_MIN; i < TRI_MAX; i += 1048009) { + tri_t t = tri_from(i); + assert(tri_to(t) == i); + } +} diff --git a/core/tests/mul.c b/core/tests/mul.c new file mode 100644 index 0000000..55d3af6 --- /dev/null +++ b/core/tests/mul.c @@ -0,0 +1,28 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + assert(argc == 2); + char *s = argv[1]; + tri_t a = tri_parse_default(s, strlen(s)); + tri_t one = tri_from(1); + + for (int64_t i = -13; i <= 13; ++i) { + tri_t b = tri_from(i); + b = tri_mul(b, one); + assert(tri_to(b) == i); + } + + int64_t ba = tri_to(a); + + for (size_t i = 0; i < 1000000000; ++i) + a = tri_mul(a, one); + + assert(ba == tri_to(a)); + + char r[32]; + size_t l = tri_fmt_default(r, 32, a); + r[l] = '\0'; + printf("%s\n", r); +} diff --git a/core/tests/sub.c b/core/tests/sub.c new file mode 100644 index 0000000..41c4037 --- /dev/null +++ b/core/tests/sub.c @@ -0,0 +1,22 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + assert(argc == 2); + char *s = argv[1]; + tri_t a = tri_parse_default(s, strlen(s)); + tri_t one = tri_from(1); + + int64_t ba = tri_to(a); + + for (size_t i = 0; i < 1000000000; ++i) + a = tri_sub(a, one); + + assert(ba - 1000000000 == tri_to(a)); + + char r[32]; + size_t l = tri_fmt_default(r, 32, a); + r[l] = '\0'; + printf("%s\n", r); +} diff --git a/core/tests/unop.c b/core/tests/unop.c new file mode 100644 index 0000000..a63e420 --- /dev/null +++ b/core/tests/unop.c @@ -0,0 +1,24 @@ +#include + +int main() +{ + /* technically speaking there are only 27 cases to test, and they could + * potentially all checked for manually, but this is good enough for now + */ + tri_t t = tri_parse_default("i01", 3); + + tri_t r = tri_unop(NOP, t); + assert(tri_eq(r, t)); + + r = tri_unop(NNN, t); + assert(tri_eq(r, tri_from(TRI_MIN))); + + r = tri_unop(OOO, t); + assert(tri_eq(r, tri_from(0))); + + r = tri_unop(PPP, t); + assert(tri_eq(r, tri_from(TRI_MAX))); + + r = tri_unop(PON, t); + assert(tri_eq(r, tri_parse_default("10i", 3))); +} -- cgit v1.3