aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/external/metalang99/tests/maybe.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2026-02-23 20:36:05 +0100
committerlemon <lsof@mailbox.org>2026-02-23 20:36:05 +0100
commit052144cabb126efe925a96f8a0597a0f2005d206 (patch)
tree4fd87244b9eef018b30e90fdff24c5b1a145a85e /test/external/metalang99/tests/maybe.c
parent4e9020dfb847d80475415f9f5914efaa50238767 (diff)
add metalang99 testsuite (preprocessor stress testing)
Diffstat (limited to 'test/external/metalang99/tests/maybe.c')
-rw-r--r--test/external/metalang99/tests/maybe.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/test/external/metalang99/tests/maybe.c b/test/external/metalang99/tests/maybe.c
new file mode 100644
index 0000000..f8b169b
--- /dev/null
+++ b/test/external/metalang99/tests/maybe.c
@@ -0,0 +1,58 @@
+#include <metalang99/assert.h>
+#include <metalang99/maybe.h>
+#include <metalang99/nat.h>
+
+int main(void) {
+
+#define MATCH_IMPL(maybe) ML99_match(v(maybe), v(MATCH_))
+#define MATCH_just_IMPL(x) v(ML99_ASSERT_UNEVAL(x == 87))
+#define MATCH_nothing_IMPL(_) v(ML99_ASSERT_UNEVAL(1))
+
+ // Pattern matching
+ {
+ ML99_EVAL(ML99_call(MATCH, ML99_just(v(87))));
+ ML99_EVAL(ML99_call(MATCH, ML99_nothing(~, ~, ~)));
+ }
+
+#undef MATCH_IMPL
+#undef MATCH_just_IMPL
+#undef MATCH_nothing_IMPL
+
+#define VAL v(abc ? +-148 % "hello world")
+
+ // ML99_isJust
+ {
+ ML99_ASSERT(ML99_isJust(ML99_just(VAL)));
+ ML99_ASSERT(ML99_not(ML99_isJust(ML99_nothing())));
+ }
+
+ // ML99_IS_JUST
+ {
+ ML99_ASSERT_UNEVAL(ML99_IS_JUST(ML99_JUST(VAL)));
+ ML99_ASSERT_UNEVAL(!ML99_IS_JUST(ML99_NOTHING()));
+ }
+
+ // ML99_isNothing
+ {
+ ML99_ASSERT(ML99_isNothing(ML99_nothing()));
+ ML99_ASSERT(ML99_not(ML99_isNothing(ML99_just(VAL))));
+ }
+
+ // ML99_IS_NOTHING
+ {
+ ML99_ASSERT_UNEVAL(ML99_IS_NOTHING(ML99_NOTHING()));
+ ML99_ASSERT_UNEVAL(!ML99_IS_NOTHING(ML99_JUST(VAL)));
+ }
+
+ // ML99_maybeEq
+ {
+ ML99_ASSERT(ML99_maybeEq(v(ML99_natEq), ML99_just(v(123)), ML99_just(v(123))));
+
+ ML99_ASSERT(ML99_not(ML99_maybeEq(v(ML99_natEq), ML99_just(v(123)), ML99_just(v(4)))));
+ ML99_ASSERT(ML99_not(ML99_maybeEq(v(ML99_natEq), ML99_just(v(123)), ML99_nothing())));
+ ML99_ASSERT(ML99_not(ML99_maybeEq(v(ML99_natEq), ML99_nothing(), ML99_just(v(123)))));
+ }
+
+ // ML99_maybeUnwrap
+ { ML99_ASSERT_EQ(ML99_maybeUnwrap(ML99_just(v(123))), v(123)); }
+}