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/examples/ackermann.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 test/external/metalang99/examples/ackermann.c (limited to 'test/external/metalang99/examples/ackermann.c') diff --git a/test/external/metalang99/examples/ackermann.c b/test/external/metalang99/examples/ackermann.c new file mode 100644 index 0000000..a3ea623 --- /dev/null +++ b/test/external/metalang99/examples/ackermann.c @@ -0,0 +1,22 @@ +#include + +#define ack(m, n) ML99_natMatchWithArgs(m, v(ack_), n) + +#define ack_Z_IMPL(n) ML99_inc(v(n)) +#define ack_S_IMPL(m, n) ML99_natMatchWithArgs(v(n), v(ack_S_), v(m)) +#define ack_S_Z_IMPL(m) ack(v(m), v(1)) +#define ack_S_S_IMPL(n, m) ack(v(m), ack(ML99_inc(v(m)), v(n))) + +ML99_ASSERT_EQ(ack(v(0), v(0)), v(1)); +ML99_ASSERT_EQ(ack(v(0), v(1)), v(2)); +ML99_ASSERT_EQ(ack(v(0), v(2)), v(3)); + +ML99_ASSERT_EQ(ack(v(1), v(0)), v(2)); +ML99_ASSERT_EQ(ack(v(1), v(1)), v(3)); +ML99_ASSERT_EQ(ack(v(1), v(2)), v(4)); + +ML99_ASSERT_EQ(ack(v(2), v(0)), v(3)); +ML99_ASSERT_EQ(ack(v(2), v(1)), v(5)); +ML99_ASSERT_EQ(ack(v(2), v(2)), v(7)); + +int main(void) {} -- cgit v1.2.3