From 519b05f5281572ef9f6f686844af25159ca5896e Mon Sep 17 00:00:00 2001
From: Kaz Kylheku <kaz@kylheku.com>
Date: Mon, 20 Jan 2025 17:57:11 -0800
Subject: New macros for enumerated constants.

* autoload.c (enum_set_entries, enum_instantiate): New static
functions.
(autoload_init): Register autoload of stdlib/enum module
via new functions.

* stdlib/enum.tl: New file.

* tests/016/enum.tl: Likewise.

* txr.1: Documented.
---
 tests/016/enum.tl | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)
 create mode 100644 tests/016/enum.tl

(limited to 'tests')

diff --git a/tests/016/enum.tl b/tests/016/enum.tl
new file mode 100644
index 00000000..b8817f4b
--- /dev/null
+++ b/tests/016/enum.tl
@@ -0,0 +1,23 @@
+(load "../common.tl")
+
+(mtest
+  (macroexpand '(defenum)) (progn)
+  (macroexpand '(defenum nil)) :error
+  (macroexpand '(defenum t)) :error
+  (macroexpand '(defenum :key)) :error
+  (macroexpand '(defenum (a "x"))) :error
+  (macroexpand '(defenum a (b "x"))) :error
+  (macroexpand '(defenum a)) (progn (defsymacro a 0))
+  (macroexpand '(defenum a b)) (progn (defsymacro a 0) (defsymacro b 1))
+  (macroexpand '(defenum a (b 2))) (progn (defsymacro a 0) (defsymacro b 2))
+  (macroexpand '(defenum (a 5) b)) (progn (defsymacro a 5) (defsymacro b 6))
+  (macroexpand '(defenum (a 5) (b 7))) (progn (defsymacro a 5) (defsymacro b 7))
+  (macroexpand '(defenum a (b #\b))) (progn (defsymacro a 0) (defsymacro b #\b))
+  (macroexpand '(defenum (a #\a) b)) (progn (defsymacro a #\a) (defsymacro b #\b))
+  (macroexpand '(defenum (a #\a) (b #\x))) (progn (defsymacro a #\a) (defsymacro b #\x))
+  (macroexpand '(defenum a b c)) (progn (defsymacro a 0) (defsymacro b 1) (defsymacro c 2)))
+
+(mtest
+  (enumlet (a b c) (list a b c)) (0 1 2)
+  (enumlet ((a 10) b c) (list a b c)) (10 11 12)
+  (enumlet ((a #\a) b c) (list a b c)) (#\a #\b #\c))
-- 
cgit v1.2.3