The roff(7) language is Turing-complete, even the part implemented
authorschwarze <schwarze@openbsd.org>
Thu, 1 Jan 2015 09:06:39 +0000 (09:06 +0000)
committerschwarze <schwarze@openbsd.org>
Thu, 1 Jan 2015 09:06:39 +0000 (09:06 +0000)
in mandoc(1).  So practice some recursive programming to make sure
it doesn't get broken.

regress/usr.bin/mandoc/roff/de/Makefile
regress/usr.bin/mandoc/roff/de/factorial.in [new file with mode: 0644]
regress/usr.bin/mandoc/roff/de/factorial.out_ascii [new file with mode: 0644]

index f186519..9e48a3b 100644 (file)
@@ -1,6 +1,6 @@
-# $OpenBSD: Makefile,v 1.6 2014/12/30 10:28:56 schwarze Exp $
+# $OpenBSD: Makefile,v 1.7 2015/01/01 09:06:39 schwarze Exp $
 
-REGRESS_TARGETS = append escname indir startde TH Dd
+REGRESS_TARGETS = append escname factorial indir startde TH Dd
 LINT_TARGETS   = escname indir
 
 .include <bsd.regress.mk>
diff --git a/regress/usr.bin/mandoc/roff/de/factorial.in b/regress/usr.bin/mandoc/roff/de/factorial.in
new file mode 100644 (file)
index 0000000..8d83714
--- /dev/null
@@ -0,0 +1,31 @@
+.Dd December 30, 2014
+.Dt FACTORIAL 1
+.Os OpenBSD
+.Sh NAME
+.Nm factorial
+.Nd factorial sequence
+.Sh DESCRIPTION
+.\" recursively calculate a single factorial
+.de rfac
+.  ie \\$1>1 \{\
+.    No \\$1 *
+.    nr i \\$1-1
+.    rfac \\ni
+.    nr acc \\n[acc]*\\$1
+.  \}
+.  el .nr acc 1
+..
+.\" recursively print a sequence of factorials
+.de fac
+.  No \\$1! =
+.  rfac \\$1
+.  if \\$1>1 1 =
+.  No \\n[acc]
+.  if \\$1 \{\
+.    br
+.    nr i \\$1-1
+.    fac \\ni
+.  \}
+..
+.\" main program
+.fac 9
diff --git a/regress/usr.bin/mandoc/roff/de/factorial.out_ascii b/regress/usr.bin/mandoc/roff/de/factorial.out_ascii
new file mode 100644 (file)
index 0000000..cdc019e
--- /dev/null
@@ -0,0 +1,18 @@
+FACTORIAL(1)                General Commands Manual               FACTORIAL(1)
+
+N\bNA\bAM\bME\bE
+     f\bfa\bac\bct\bto\bor\bri\bia\bal\bl - factorial sequence
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+     9! = 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 362880
+     8! = 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1 = 40320
+     7! = 7 * 6 * 5 * 4 * 3 * 2 * 1 = 5040
+     6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
+     5! = 5 * 4 * 3 * 2 * 1 = 120
+     4! = 4 * 3 * 2 * 1 = 24
+     3! = 3 * 2 * 1 = 6
+     2! = 2 * 1 = 2
+     1! = 1
+     0! = 1
+
+OpenBSD                        December 30, 2014                       OpenBSD