aboutsummaryrefslogtreecommitdiff
path: root/core/tests
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-10-28 00:00:21 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2023-10-28 00:00:21 +0300
commitd96b8c7d12fc61ec609d6138627b9d6d18139a9a (patch)
tree82bc9a4c2b22de6c021097fb79a57b6d7756a127 /core/tests
downloadtri-d96b8c7d12fc61ec609d6138627b9d6d18139a9a.tar.gz
tri-d96b8c7d12fc61ec609d6138627b9d6d18139a9a.zip
move to monorepo
+ Will probably have to make some changes to dir layout to make things make more sense
Diffstat (limited to 'core/tests')
-rw-r--r--core/tests/add.c23
-rw-r--r--core/tests/comp.c6
-rw-r--r--core/tests/diop.c21
-rw-r--r--core/tests/div.c22
-rw-r--r--core/tests/from_to.c10
-rw-r--r--core/tests/mul.c28
-rw-r--r--core/tests/sub.c22
-rw-r--r--core/tests/unop.c24
8 files changed, 156 insertions, 0 deletions
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 <tri.h>
+#include <string.h>
+
+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 <tri.h>
+
+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 <tri.h>
+
+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 <tri.h>
+#include <string.h>
+
+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 <tri.h>
+
+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 <tri.h>
+#include <string.h>
+
+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 <tri.h>
+#include <string.h>
+
+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 <tri.h>
+
+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)));
+}