From 052144cabb126efe925a96f8a0597a0f2005d206 Mon Sep 17 00:00:00 2001 From: lemon Date: Mon, 23 Feb 2026 20:36:05 +0100 Subject: add metalang99 testsuite (preprocessor stress testing) --- test/external/metalang99/tests/either.c | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/external/metalang99/tests/either.c (limited to 'test/external/metalang99/tests/either.c') diff --git a/test/external/metalang99/tests/either.c b/test/external/metalang99/tests/either.c new file mode 100644 index 0000000..4a29fb9 --- /dev/null +++ b/test/external/metalang99/tests/either.c @@ -0,0 +1,66 @@ +#include +#include +#include + +int main(void) { + +#define MATCH_IMPL(either) ML99_match(v(either), v(MATCH_)) +#define MATCH_left_IMPL(x) v(ML99_ASSERT_UNEVAL(x == 18)) +#define MATCH_right_IMPL(x) v(ML99_ASSERT_UNEVAL(x == 4)) + + // Pattern matching + { + ML99_EVAL(ML99_call(MATCH, ML99_left(v(18)))); + ML99_EVAL(ML99_call(MATCH, ML99_right(v(4)))); + } + +#undef MATCH_IMPL +#undef MATCH_left_IMPL +#undef MATCH_right_IMPL + +#define VAL v(abc ? +-148 % "hello world") + + // ML99_isLeft + { + ML99_ASSERT(ML99_isLeft(ML99_left(VAL))); + ML99_ASSERT(ML99_not(ML99_isLeft(ML99_right(VAL)))); + } + + // ML99_IS_LEFT + { + ML99_ASSERT_UNEVAL(ML99_IS_LEFT(ML99_LEFT(VAL))); + ML99_ASSERT_UNEVAL(!ML99_IS_LEFT(ML99_RIGHT(VAL))); + } + + // ML99_isRight + { + ML99_ASSERT(ML99_isRight(ML99_right(VAL))); + ML99_ASSERT(ML99_not(ML99_isRight(ML99_left(VAL)))); + } + + // ML99_IS_RIGHT + { + ML99_ASSERT_UNEVAL(ML99_IS_RIGHT(ML99_RIGHT(VAL))); + ML99_ASSERT_UNEVAL(!ML99_IS_RIGHT(ML99_LEFT(VAL))); + } + + // ML99_eitherEq + { + ML99_ASSERT(ML99_eitherEq(v(ML99_natEq), ML99_left(v(123)), ML99_left(v(123)))); + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_left(v(18)), ML99_left(v(123))))); + + ML99_ASSERT(ML99_eitherEq(v(ML99_natEq), ML99_right(v(123)), ML99_right(v(123)))); + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_right(v(18)), ML99_right(v(123))))); + + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_left(v(123)), ML99_right(v(123))))); + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_left(v(123)), ML99_right(v(4))))); + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_right(v(123)), ML99_left(v(123))))); + ML99_ASSERT(ML99_not(ML99_eitherEq(v(ML99_natEq), ML99_right(v(123)), ML99_left(v(4))))); + } + + // ML99_unwrapLeft + { ML99_ASSERT_EQ(ML99_unwrapLeft(ML99_left(v(123))), v(123)); } + + // ML99_unwrapRight + { ML99_ASSERT_EQ(ML99_unwrapRight(ML99_right(v(123))), v(123)); } +} -- cgit v1.2.3