Module Name:    src
Committed By:   christos
Date:           Mon Nov 21 22:01:34 UTC 2022

Modified Files:
        src/distrib/sets/lists/base: shl.mi
        src/distrib/sets/lists/debug: mi
        src/distrib/sets/lists/man: mi
        src/distrib/sets/lists/tests: mi
        src/etc/mtree: NetBSD.dist.tests
        src/lib/lua: Makefile
        src/share/man/man3lua: Makefile
        src/tests/lib: Makefile
Added Files:
        src/lib/lua/libm: Makefile libm.c
        src/share/man/man3lua: libm.3lua
        src/tests/lib/lua: Makefile Makefile.inc
        src/tests/lib/lua/libm: Makefile h_lualibm.c lualibm.lua t_lualibm.sh

Log Message:
lua libm API from Phil Rulon


To generate a diff of this commit:
cvs rdiff -u -r1.941 -r1.942 src/distrib/sets/lists/base/shl.mi
cvs rdiff -u -r1.391 -r1.392 src/distrib/sets/lists/debug/mi
cvs rdiff -u -r1.1756 -r1.1757 src/distrib/sets/lists/man/mi
cvs rdiff -u -r1.1233 -r1.1234 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.196 -r1.197 src/etc/mtree/NetBSD.dist.tests
cvs rdiff -u -r1.7 -r1.8 src/lib/lua/Makefile
cvs rdiff -u -r0 -r1.1 src/lib/lua/libm/Makefile src/lib/lua/libm/libm.c
cvs rdiff -u -r1.7 -r1.8 src/share/man/man3lua/Makefile
cvs rdiff -u -r0 -r1.1 src/share/man/man3lua/libm.3lua
cvs rdiff -u -r1.34 -r1.35 src/tests/lib/Makefile
cvs rdiff -u -r0 -r1.1 src/tests/lib/lua/Makefile \
    src/tests/lib/lua/Makefile.inc
cvs rdiff -u -r0 -r1.1 src/tests/lib/lua/libm/Makefile \
    src/tests/lib/lua/libm/h_lualibm.c src/tests/lib/lua/libm/lualibm.lua \
    src/tests/lib/lua/libm/t_lualibm.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/base/shl.mi
diff -u src/distrib/sets/lists/base/shl.mi:1.941 src/distrib/sets/lists/base/shl.mi:1.942
--- src/distrib/sets/lists/base/shl.mi:1.941	Wed Oct  5 18:40:12 2022
+++ src/distrib/sets/lists/base/shl.mi	Mon Nov 21 17:01:32 2022
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.941 2022/10/05 22:40:12 christos Exp $
+# $NetBSD: shl.mi,v 1.942 2022/11/21 22:01:32 christos Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -966,6 +966,7 @@
 ./usr/lib/lua/5.1/syslog.so                    	base-obsolete		obsolete
 ./usr/lib/lua/5.3/bozohttpd.so			base-sys-shlib		compatfile
 ./usr/lib/lua/5.3/gpio.so                    	base-sys-shlib		compatfile
+./usr/lib/lua/5.3/libm.so 			base-sys-shlib		compatfile
 ./usr/lib/lua/5.3/netpgp.so 			base-sys-shlib		compatfile
 ./usr/lib/lua/5.3/sqlite.so                    	base-sys-shlib		compatfile
 ./usr/lib/lua/5.3/syslog.so                    	base-sys-shlib		compatfile

Index: src/distrib/sets/lists/debug/mi
diff -u src/distrib/sets/lists/debug/mi:1.391 src/distrib/sets/lists/debug/mi:1.392
--- src/distrib/sets/lists/debug/mi:1.391	Thu Nov 17 03:45:35 2022
+++ src/distrib/sets/lists/debug/mi	Mon Nov 21 17:01:32 2022
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.391 2022/11/17 08:45:35 ozaki-r Exp $
+# $NetBSD: mi,v 1.392 2022/11/21 22:01:32 christos Exp $
 ./etc/mtree/set.debug                           comp-sys-root
 ./usr/lib					comp-sys-usr		compatdir
 ./usr/lib/i18n/libBIG5_g.a			comp-c-debuglib		debuglib,compatfile
@@ -2400,6 +2400,10 @@
 ./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_dlvsym.debug		tests-libexec-debug	debug,atf,pic,compattestfile
 ./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_rtld_r_debug.debug	tests-libexec-debug	debug,atf,pic,compattestfile
 ./usr/libdata/debug/usr/tests/libexec/ld.elf_so/t_ifunc.debug	tests-libexec-debug	debug,atf,pic,compattestfile
+./usr/libdata/debug/usr/tests/lib				tests-libexec-debug	debug,atf,pic,compattestfile
+./usr/libdata/debug/usr/tests/lib/lua				tests-libexec-debug	debug,atf,pic,compattestfile
+./usr/libdata/debug/usr/tests/lib/lua/libm			tests-libexec-debug	debug,atf,pic,compattestfile
+./usr/libdata/debug/usr/tests/lib/lua/libm/h_lualibm.debug	tests-libexec-debug	debug,atf,pic,compattestfile
 ./usr/libdata/debug/usr/tests/net/bpf/t_bpf.debug		tests-net-debug		debug,atf,rump
 ./usr/libdata/debug/usr/tests/net/bpf/t_div-by-zero.debug		tests-net-debug		debug,atf,rump
 ./usr/libdata/debug/usr/tests/net/bpf/t_mbuf.debug		tests-net-debug		debug,atf,rump

Index: src/distrib/sets/lists/man/mi
diff -u src/distrib/sets/lists/man/mi:1.1756 src/distrib/sets/lists/man/mi:1.1757
--- src/distrib/sets/lists/man/mi:1.1756	Mon Nov 21 16:24:01 2022
+++ src/distrib/sets/lists/man/mi	Mon Nov 21 17:01:32 2022
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1756 2022/11/21 21:24:01 brad Exp $
+# $NetBSD: mi,v 1.1757 2022/11/21 22:01:32 christos Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -695,6 +695,7 @@
 ./usr/share/man/cat3lua/gpio.unset.0		man-sys-catman		.cat
 ./usr/share/man/cat3lua/gpio.write.0		man-sys-catman		.cat
 ./usr/share/man/cat3lua/intro.0			man-sys-catman		.cat
+./usr/share/man/cat3lua/libm.0			man-sys-catman		.cat
 ./usr/share/man/cat3lua/netpgp.0		man-sys-catman		.cat
 ./usr/share/man/cat3lua/sqlite.0		man-sys-catman		.cat
 ./usr/share/man/cat3lua/syslog.0		man-sys-catman		.cat
@@ -4013,6 +4014,7 @@
 ./usr/share/man/html3lua/gpio.unset.html	man-sys-htmlman		html
 ./usr/share/man/html3lua/gpio.write.html	man-sys-htmlman		html
 ./usr/share/man/html3lua/intro.html		man-sys-htmlman		html
+./usr/share/man/html3lua/libm.html		man-sys-htmlman		html
 ./usr/share/man/html3lua/netpgp.html		man-sys-htmlman		html
 ./usr/share/man/html3lua/sqlite.html		man-sys-htmlman		html
 ./usr/share/man/html3lua/syslog.html		man-sys-htmlman		html
@@ -7007,6 +7009,7 @@
 ./usr/share/man/man3lua/gpio.unset.3lua		man-sys-man		.man
 ./usr/share/man/man3lua/gpio.write.3lua		man-sys-man		.man
 ./usr/share/man/man3lua/intro.3lua		man-sys-man		.man
+./usr/share/man/man3lua/libm.3lua		man-sys-man		.man
 ./usr/share/man/man3lua/netpgp.3lua		man-sys-man		.man
 ./usr/share/man/man3lua/sqlite.3lua		man-sys-man		.man
 ./usr/share/man/man3lua/syslog.3lua		man-sys-man		.man

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1233 src/distrib/sets/lists/tests/mi:1.1234
--- src/distrib/sets/lists/tests/mi:1.1233	Thu Nov 17 04:58:42 2022
+++ src/distrib/sets/lists/tests/mi	Mon Nov 21 17:01:33 2022
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1233 2022/11/17 09:58:42 ozaki-r Exp $
+# $NetBSD: mi,v 1.1234 2022/11/21 22:01:33 christos Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -4035,6 +4035,13 @@
 ./usr/tests/lib/libutil/t_pidfile			tests-lib-tests		compattestfile,atf
 ./usr/tests/lib/libutil/t_snprintb			tests-lib-tests		compattestfile,atf
 ./usr/tests/lib/libutil/t_sockaddr_snprintf		tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua					tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/Atffile				tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/libm				tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/libm/Atffile			tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/libm/h_lualibm			tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/libm/lualibm.lua			tests-lib-tests		compattestfile,atf
+./usr/tests/lib/lua/libm/t_lualibm			tests-lib-tests		compattestfile,atf
 ./usr/tests/lib/semaphore				tests-lib-tests		compattestfile,atf
 ./usr/tests/lib/semaphore/Atffile			tests-lib-tests		compattestfile,atf
 ./usr/tests/lib/semaphore/Kyuafile			tests-lib-tests		compattestfile,atf,kyua

Index: src/etc/mtree/NetBSD.dist.tests
diff -u src/etc/mtree/NetBSD.dist.tests:1.196 src/etc/mtree/NetBSD.dist.tests:1.197
--- src/etc/mtree/NetBSD.dist.tests:1.196	Thu Nov 17 03:45:35 2022
+++ src/etc/mtree/NetBSD.dist.tests	Mon Nov 21 17:01:33 2022
@@ -1,4 +1,4 @@
-#	$NetBSD: NetBSD.dist.tests,v 1.196 2022/11/17 08:45:35 ozaki-r Exp $
+#	$NetBSD: NetBSD.dist.tests,v 1.197 2022/11/21 22:01:33 christos Exp $
 
 ./usr/libdata/debug/usr/tests
 ./usr/libdata/debug/usr/tests/atf
@@ -132,6 +132,8 @@
 ./usr/libdata/debug/usr/tests/lib/libtre
 ./usr/libdata/debug/usr/tests/lib/libusbhid
 ./usr/libdata/debug/usr/tests/lib/libutil
+./usr/libdata/debug/usr/tests/lib/lua
+./usr/libdata/debug/usr/tests/lib/lua/libm
 ./usr/libdata/debug/usr/tests/lib/semaphore
 ./usr/libdata/debug/usr/tests/lib/semaphore/pthread
 ./usr/libdata/debug/usr/tests/libexec
@@ -343,6 +345,8 @@
 ./usr/tests/lib/libtre/data
 ./usr/tests/lib/libusbhid
 ./usr/tests/lib/libutil
+./usr/tests/lib/lua
+./usr/tests/lib/lua/libm
 ./usr/tests/lib/semaphore
 ./usr/tests/lib/semaphore/pthread
 ./usr/tests/libexec

Index: src/lib/lua/Makefile
diff -u src/lib/lua/Makefile:1.7 src/lib/lua/Makefile:1.8
--- src/lib/lua/Makefile:1.7	Thu May  3 18:51:18 2018
+++ src/lib/lua/Makefile	Mon Nov 21 17:01:33 2022
@@ -1,10 +1,10 @@
-#	$NetBSD: Makefile,v 1.7 2018/05/03 22:51:18 sevan Exp $
+#	$NetBSD: Makefile,v 1.8 2022/11/21 22:01:33 christos Exp $
 
 .include <bsd.own.mk>
 
 .if ${MKPIC} != "no"
 # No support for shared libraries and pic code.
-SUBDIR+=	bozohttpd gpio sqlite syslog
+SUBDIR+=	bozohttpd gpio libm sqlite syslog
 .endif
 
 .include <bsd.subdir.mk>

Index: src/share/man/man3lua/Makefile
diff -u src/share/man/man3lua/Makefile:1.7 src/share/man/man3lua/Makefile:1.8
--- src/share/man/man3lua/Makefile:1.7	Sat May  5 09:31:48 2018
+++ src/share/man/man3lua/Makefile	Mon Nov 21 17:01:33 2022
@@ -1,6 +1,7 @@
-#	$NetBSD: Makefile,v 1.7 2018/05/05 13:31:48 sevan Exp $
+#	$NetBSD: Makefile,v 1.8 2022/11/21 22:01:33 christos Exp $
 
-MAN=	bozohttpd.3lua gpio.3lua intro.3lua netpgp.3lua sqlite.3lua syslog.3lua
+MAN=	bozohttpd.3lua gpio.3lua intro.3lua libm.3lua netpgp.3lua \
+	sqlite.3lua syslog.3lua
 
 MLINKS+=gpio.3lua gpio.open.3lua \
 	gpio.3lua gpio.info.3lua \

Index: src/tests/lib/Makefile
diff -u src/tests/lib/Makefile:1.34 src/tests/lib/Makefile:1.35
--- src/tests/lib/Makefile:1.34	Fri Dec 11 07:29:27 2020
+++ src/tests/lib/Makefile	Mon Nov 21 17:01:33 2022
@@ -1,11 +1,11 @@
-# $NetBSD: Makefile,v 1.34 2020/12/11 12:29:27 nia Exp $
+# $NetBSD: Makefile,v 1.35 2022/11/21 22:01:33 christos Exp $
 
 .include <bsd.own.mk>
 
 TESTS_SUBDIRS=	csu libarchive libbluetooth libc libcrypt libcurses \
 		libexecinfo libi386 libm libnvmm libobjc libposix libppath \
 		libprop libpthread librefuse librt libtre libusbhid libutil \
-		libossaudio semaphore
+		libossaudio lua semaphore
 
 TESTS_SUBDIR_INSTALL_ONLY=	libevent
 

Added files:

Index: src/lib/lua/libm/Makefile
diff -u /dev/null src/lib/lua/libm/Makefile:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/lib/lua/libm/Makefile	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,7 @@
+# $NetBSD: Makefile,v 1.1 2022/11/21 22:01:33 christos Exp $
+
+LUA_MODULES     = libm
+LUA_SRCS.libm   = libm.c
+LUA_DPLIBS     += m /usr/lib
+
+.include <bsd.lua.mk>
Index: src/lib/lua/libm/libm.c
diff -u /dev/null src/lib/lua/libm/libm.c:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/lib/lua/libm/libm.c	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,313 @@
+/* $NetBSD: libm.c,v 1.1 2022/11/21 22:01:33 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2022 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Phillip Rulon
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <sys/cdefs.h>
+__RCSID("$NetBSD: libm.c,v 1.1 2022/11/21 22:01:33 christos Exp $");
+
+#include <lua.h>
+#include <lauxlib.h>
+#include <math.h>
+
+const char	badarg[] = "argument to libm function not a number";
+
+/*-
+ * The majority of libm functions fall into a few forms:
+ *
+ *   int func(double);
+ *   double func(double);
+ *   double func(double, double);
+ * and,
+ *   double func(int, double);
+ *
+ * Accordingly, this lends itself to systematic declaration of the lua
+ * interface functions.  These macros set this up.
+ */
+#define BFUNC_DBL(fname)			\
+static int					\
+libm_##fname(lua_State *L)			\
+{						\
+	if (!lua_isnumber(L, 1))		\
+		return luaL_error(L, badarg);	\
+						\
+	double x = lua_tonumber(L, 1);		\
+	lua_pushboolean(L, fname(x));		\
+	return 1;				\
+}
+
+#define DFUNC_DBL(fname)			\
+static int					\
+libm_##fname(lua_State *L)			\
+{						\
+	if (!lua_isnumber(L, 1)) 		\
+    		return luaL_error(L, badarg);	\
+						\
+	double x = lua_tonumber(L, 1);		\
+	lua_pushnumber(L, fname(x));		\
+	return 1;				\
+}
+
+#define DFUNC_INT_DBL(fname)			\
+static int					\
+libm_##fname(lua_State *L)			\
+{						\
+	if (!lua_isinteger(L, 1) ||		\
+	    !lua_isnumber(L, 2))		\
+    		return luaL_error(L, badarg);	\
+						\
+	int i = (int)lua_tointeger(L, 1);	\
+	double x = lua_tonumber(L, 2);		\
+	lua_pushnumber(L, fname(i, x));		\
+	return 1;				\
+}
+
+#define DFUNC_DBL_DBL(fname)			\
+static int					\
+libm_##fname(lua_State *L)			\
+{						\
+	if (!lua_isnumber(L, 1) ||		\
+	    !lua_isnumber(L, 2))		\
+    		return luaL_error(L, badarg);	\
+	double x[] = {				\
+	    lua_tonumber(L, 1),			\
+	    lua_tonumber(L,2)			\
+	};					\
+	lua_pushnumber(L, fname(x[0], x[1]));   \
+	return 1;				\
+}
+
+int	luaopen_libm(lua_State *);
+
+DFUNC_DBL(acos)
+DFUNC_DBL(acosh)
+DFUNC_DBL(asin)
+DFUNC_DBL(asinh)
+DFUNC_DBL(atan)
+DFUNC_DBL(atanh)
+DFUNC_DBL_DBL(atan2)
+DFUNC_DBL(cbrt)
+DFUNC_DBL(ceil)
+DFUNC_DBL_DBL(copysign)
+DFUNC_DBL(cos)
+DFUNC_DBL(cosh)
+DFUNC_DBL(erf)
+DFUNC_DBL(erfc)
+DFUNC_DBL(exp)
+DFUNC_DBL(exp2)
+DFUNC_DBL(expm1)
+DFUNC_DBL(fabs)
+DFUNC_DBL_DBL(fdim)
+BFUNC_DBL(finite)
+DFUNC_DBL(floor)
+DFUNC_DBL_DBL(fmax)
+DFUNC_DBL_DBL(fmin)
+DFUNC_DBL_DBL(fmod)
+DFUNC_DBL(gamma)
+DFUNC_DBL_DBL(hypot)
+BFUNC_DBL(isfinite)
+BFUNC_DBL(isnan)
+BFUNC_DBL(isinf)
+DFUNC_DBL(j0)
+DFUNC_DBL(j1)
+DFUNC_INT_DBL(jn)
+DFUNC_DBL(lgamma)
+DFUNC_DBL(log)
+DFUNC_DBL(log10)
+DFUNC_DBL(log1p)
+DFUNC_DBL_DBL(nextafter)
+DFUNC_DBL_DBL(pow)
+DFUNC_DBL_DBL(remainder)
+DFUNC_DBL(rint)
+DFUNC_DBL(round)
+DFUNC_DBL(sin)
+DFUNC_DBL(sinh)
+DFUNC_DBL(sqrt)
+DFUNC_DBL(tan)
+DFUNC_DBL(tanh)
+DFUNC_DBL(trunc)
+DFUNC_DBL(y0)
+DFUNC_DBL(y1)
+DFUNC_INT_DBL(yn)
+
+/*
+ * The following interface functions are special cases which do not lend
+ * themseleves to the systematic declaration scheme above.
+ */
+static int
+libm_fma(lua_State *L)
+{
+	if (!lua_isnumber(L, 1) ||
+	    !lua_isnumber(L, 2) ||
+	    !lua_isnumber(L, 3))
+		return luaL_error(L, badarg);
+
+	double	x[] = {
+	    lua_tonumber(L, 1),
+	    lua_tonumber(L, 2),
+	    lua_tonumber(L, 3)
+	};
+	lua_pushnumber(L, fma(x[0], x[1], x[2]));
+	return 1;
+}
+
+static int
+libm_nan(lua_State *L)
+{
+	if (!lua_isstring(L, 1))
+		return luaL_error(L, badarg);
+
+	const char     *str = luaL_checkstring(L, 1);
+	lua_pushnumber(L, nan(str));
+	return 1;
+}
+
+static int
+libm_scalbn(lua_State *L)
+{
+	if (!lua_isnumber(L, 1) || !lua_isinteger(L, 2))
+		return luaL_error(L, badarg);
+
+	double		x = lua_tonumber(L, 1);
+	int		i = (int)lua_tointeger(L, 2);
+	lua_pushnumber(L, scalbn(x, i));
+	return 1;
+}
+
+static int
+libm_ilogb(lua_State *L)
+{
+	if (!lua_isnumber(L, 1))
+		return luaL_error(L, badarg);
+
+	double		x = lua_tonumber(L, 1);
+	lua_pushinteger(L, ilogb(x));
+	return 1;
+}
+
+/*
+ * set up a table for the math.h constants
+ */
+#define LIBM_CONST(K) {#K, K}
+struct kv {
+	const char     *k;
+	double		v;
+};
+
+static const struct kv libm_const[] = {
+	LIBM_CONST(M_E),
+	LIBM_CONST(M_LOG2E),
+	LIBM_CONST(M_LOG10E),
+	LIBM_CONST(M_LN2),
+	LIBM_CONST(M_LN10),
+	LIBM_CONST(M_PI),
+	LIBM_CONST(M_PI_2),
+	LIBM_CONST(M_PI_4),
+	LIBM_CONST(M_1_PI),
+	LIBM_CONST(M_2_PI),
+	LIBM_CONST(M_2_SQRTPI),
+	LIBM_CONST(M_SQRT2),
+	LIBM_CONST(M_SQRT1_2),
+	{ NULL, 0 }
+};
+
+
+static const struct luaL_Reg lualibm[] = {
+	{ "acos", libm_acos },
+	{ "acosh", libm_acosh },
+	{ "asin", libm_asin },
+	{ "asinh", libm_asinh },
+	{ "atan", libm_atan },
+	{ "atanh", libm_atanh },
+	{ "atan2", libm_atan2 },
+	{ "cbrt", libm_cbrt },
+	{ "ceil", libm_ceil },
+	{ "copysign", libm_copysign },
+	{ "cos", libm_cos },
+	{ "cosh", libm_cosh },
+	{ "erf", libm_erf },
+	{ "erfc", libm_erfc },
+	{ "exp", libm_exp },
+	{ "exp2", libm_exp2 },
+	{ "expm1", libm_expm1 },
+	{ "fabs", libm_fabs },
+	{ "fdim", libm_fdim },
+	{ "finite", libm_finite },
+	{ "floor", libm_floor },
+	{ "fma", libm_fma },
+	{ "fmax", libm_fmax },
+	{ "fmin", libm_fmin },
+	{ "fmod", libm_fmod },
+	{ "gamma", libm_gamma },
+	{ "hypot", libm_hypot },
+	{ "ilogb", libm_ilogb },
+	{ "isfinite", libm_isfinite },
+	{ "isinf", libm_isinf },
+	{ "isnan", libm_isnan },
+	{ "j0", libm_j0 },
+	{ "j1", libm_j1 },
+	{ "jn", libm_jn },
+	{ "lgamma", libm_lgamma },
+	{ "log", libm_log },
+	{ "log10", libm_log10 },
+	{ "log1p", libm_log1p },
+	{ "nan", libm_nan },
+	{ "nextafter", libm_nextafter },
+	{ "pow", libm_pow },
+	{ "remainder", libm_remainder },
+	{ "rint", libm_rint },
+	{ "round", libm_round },
+	{ "scalbn", libm_scalbn },
+	{ "sin", libm_sin },
+	{ "sinh", libm_sinh },
+	{ "sqrt", libm_sqrt },
+	{ "tan", libm_tan },
+	{ "tanh", libm_tanh },
+	{ "trunc", libm_trunc },
+	{ "y0", libm_y0 },
+	{ "y1", libm_y1 },
+	{ "yn", libm_yn },
+	{ NULL, NULL }
+};
+
+int
+luaopen_libm(lua_State *L)
+{
+	const struct kv *kvp = libm_const;
+
+	luaL_newlib(L, lualibm);
+
+	/* integrate the math.h constants */
+	while (kvp->k) {
+		lua_pushnumber(L, kvp->v);
+		lua_setfield(L, -2, kvp->k);
+		kvp++;
+	}
+
+	return 1;
+}

Index: src/share/man/man3lua/libm.3lua
diff -u /dev/null src/share/man/man3lua/libm.3lua:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/share/man/man3lua/libm.3lua	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,151 @@
+.\"
+.\" Copyright (c) 2022 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Phillip Rulon
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in the
+.\"    documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd November 2, 2022
+.Dt LIBM 3lua
+.Os
+.Sh NAME
+.Nm libm
+.Nd Lua interface to the
+.Xr math 3
+library
+.Sh SYNOPSIS
+.Cd "local lm = require 'libm'"
+.Sh DESCRIPTION
+The
+.Nm
+Lua binding provides access to the
+.Xr math 3
+library.  If these functions are given an argument outside the domain
+of the function the return value will be NaN.  This can be checked with
+lm.isnan().
+.Pp
+Many of these functions have native equivalents in the Lua math library.
+Others, like
+.Xr round 3 ,
+.Xr cbrt 3 ,
+and the hyperbolic trigonometry functions, are not provided without an
+auxiliary module.  The functions that are redundant are provided for
+completeness.
+.Pp
+Since these functions map quite closely to the functions in the math
+library, detailed information about their behavior can be found in the
+man pages for each function in section 3 of the manual.
+.Ss List of Functions
+.Bl -column "copysignX" "gammaX3XX" "inverse trigonometric funcX"
+.It Sy Name Ta Sy Man page Ta Sy Description Ta
+.It lm.acos Ta Xr acos 3 Ta inverse trigonometric function Ta
+.It lm.acosh Ta Xr acosh 3 Ta inverse hyperbolic function Ta
+.It lm.asin Ta Xr asin 3 Ta inverse trigonometric function Ta
+.It lm.asinh Ta Xr asinh 3 Ta inverse hyperbolic function Ta
+.It lm.atan Ta Xr atan 3 Ta inverse trigonometric function Ta
+.It lm.atanh Ta Xr atanh 3 Ta inverse hyperbolic function Ta
+.It lm.atan2 Ta Xr atan2 3 Ta inverse trigonometric function Ta
+.It lm.cbrt Ta Xr sqrt 3 Ta cube root Ta
+.It lm.ceil Ta Xr ceil 3 Ta integer no less than Ta
+.It lm.copysign Ta Xr copysign 3 Ta copy sign bit Ta
+.It lm.cos Ta Xr cos 3 Ta trigonometric function Ta
+.It lm.cosh Ta Xr cosh 3 Ta hyperbolic function Ta
+.It lm.erf Ta Xr erf 3 Ta error function Ta
+.It lm.erfc Ta Xr erf 3 Ta complementary error function Ta
+.It lm.exp Ta Xr exp 3 Ta base e exponential Ta
+.It lm.exp2 Ta Xr exp2 3 Ta base 2 exponential Ta
+.It lm.expm1 Ta Xr expm1 3 Ta exp(x)\-1 Ta
+.It lm.fabs Ta Xr fabs 3 Ta absolute value Ta
+.It lm.fdim Ta Xr erf 3 Ta positive difference Ta
+.It lm.finite Ta Xr finite 3 Ta test for finity Ta
+.It lm.floor Ta Xr floor 3 Ta integer no greater than Ta
+.It lm.fma Ta Xr fmod 3 Ta fused multiply-add Ta
+.It lm.fmax Ta Xr fmax 3 Ta maximum Ta
+.It lm.fmin Ta Xr fmin 3 Ta minimum Ta
+.It lm.fmod Ta Xr fmod 3 Ta remainder Ta
+.It lm.hypot Ta Xr hypot 3 Ta Euclidean distance Ta
+.It lm.ilogb Ta Xr ilogb 3 Ta exponent extraction Ta
+.It lm.isinf Ta Xr isinf 3 Ta test for infinity Ta
+.It lm.isnan Ta Xr isnan 3 Ta test for not-a-number Ta
+.It lm.j0 Ta Xr j0 3 Ta Bessel function Ta
+.It lm.j1 Ta Xr j0 3 Ta Bessel function Ta
+.It lm.jn Ta Xr j0 3 Ta Bessel function Ta
+.It lm.lgamma Ta Xr lgamma 3 Ta log gamma function Ta
+.It lm.log Ta Xr log 3 Ta natural logarithm Ta
+.It lm.log10 Ta Xr log 3 Ta logarithm to base 10 Ta
+.It lm.log1p Ta Xr log 3 Ta log(1+x) Ta
+.It lm.nan Ta Xr nan 3 Ta return quiet \*(Na Ta
+.It lm.nextafter Ta Xr nextafter 3 Ta next representable number Ta
+.It lm.pow Ta Xr pow 3 Ta exponential x**y Ta
+.It lm.remainder Ta Xr remainder 3 Ta remainder Ta
+.It lm.rint Ta Xr rint 3 Ta round to nearest integer Ta
+.It lm.scalbn Ta Xr scalbn 3 Ta exponent adjustment Ta
+.It lm.sin Ta Xr sin 3 Ta trigonometric function Ta
+.It lm.sinh Ta Xr sinh 3 Ta hyperbolic function Ta
+.It lm.sqrt Ta Xr sqrt 3 Ta square root Ta
+.It lm.tan Ta Xr tan 3 Ta trigonometric function Ta
+.It lm.tanh Ta Xr tanh 3 Ta hyperbolic function Ta
+.It lm.trunc Ta Xr trunc 3 Ta nearest integral value Ta
+.It lm.y0 Ta Xr j0 3 Ta Bessel function Ta
+.It lm.y1 Ta Xr j0 3 Ta Bessel function Ta
+.It lm.yn Ta Xr j0 3 Ta Bessel function Ta
+.El
+.Ss List of Defined Values
+.Bl -column "M_2_SQRTPIXX" "1.12837916709551257390XX" "2/sqrt(pi)XXX"
+.It Sy Name Ta Sy Value Ta Sy Description
+.It lm.M_E	2.7182818284590452354	e
+.It lm.M_LOG2E	1.4426950408889634074	log 2e
+.It lm.M_LOG10E	0.43429448190325182765	log 10e
+.It lm.M_LN2	0.69314718055994530942	log e2
+.It lm.M_LN10	2.30258509299404568402	log e10
+.It lm.M_PI	3.14159265358979323846	pi
+.It lm.M_PI_2	1.57079632679489661923	pi/2
+.It lm.M_PI_4	0.78539816339744830962	pi/4
+.It lm.M_1_PI	0.31830988618379067154	1/pi
+.It lm.M_2_PI	0.63661977236758134308	2/pi
+.It lm.M_2_SQRTPI	1.12837916709551257390	2/sqrt(pi)
+.It lm.M_SQRT2	1.41421356237309504880	sqrt(2)
+.It lm.M_SQRT1_2	0.70710678118654752440	1/sqrt(2)
+.El
+.Sh NOTES
+The functions finite, isfinite, isinf, and isnan return integers in
+the math library, the results are converted to lua boolean values by
+this interface.
+.Sh BUGS
+The single precision float, and long double data types, implemented in
+several of the libm routines, are not supported by this interface.
+.Pp
+The math library has a long development history, but if a bug exists
+there, it will certainly exist in this interface as well.
+.Sh HISTORY
+A
+.Nm
+Lua binding appeared in
+.Nx 9.4 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+Lua binding was written by
+.An Phillip Rulon .

Index: src/tests/lib/lua/Makefile
diff -u /dev/null src/tests/lib/lua/Makefile:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/Makefile	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,9 @@
+# $NetBSD: Makefile,v 1.1 2022/11/21 22:01:33 christos Exp $
+
+.include <bsd.own.mk>
+
+TESTS_SUBDIRS=	libm
+
+TESTSDIR=	${TESTSBASE}/lib/lua
+
+.include <bsd.test.mk>
Index: src/tests/lib/lua/Makefile.inc
diff -u /dev/null src/tests/lib/lua/Makefile.inc:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/Makefile.inc	Mon Nov 21 17:01:33 2022
@@ -0,0 +1 @@
+.include "../Makefile.inc"

Index: src/tests/lib/lua/libm/Makefile
diff -u /dev/null src/tests/lib/lua/libm/Makefile:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/libm/Makefile	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,20 @@
+# $NetBSD: Makefile,v 1.1 2022/11/21 22:01:33 christos Exp $
+
+NOMAN=			# defined
+
+.include <bsd.own.mk>
+
+TESTSDIR=	${TESTSBASE}/lib/lua/libm
+TESTS_SH=	t_lualibm 
+
+BINDIR=		${TESTSDIR}
+PROGS+=		h_lualibm 
+DPADD+=		${LIBM}
+LDADD+=		-lm
+
+FILESDIR=	${TESTSDIR}
+FILESMODE=	0555
+FILES+=		lualibm.lua
+
+
+.include <bsd.test.mk>
Index: src/tests/lib/lua/libm/h_lualibm.c
diff -u /dev/null src/tests/lib/lua/libm/h_lualibm.c:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/libm/h_lualibm.c	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,89 @@
+#include <math.h>
+#include <stdio.h>
+
+#define TEST(M_) printf("%-24s%+2.13f\n", #M_, M_)
+#define TESTI(M_) printf("%-24s%d\n", #M_, M_)
+
+int
+main(void)
+{
+	TEST(M_E);
+	TEST(M_LOG2E);
+	TEST(M_LOG10E);
+	TEST(M_LN2);
+	TEST(M_LN10);
+	TEST(M_PI);
+	TEST(M_PI_2);
+	TEST(M_PI_4);
+	TEST(M_1_PI);
+	TEST(M_2_PI);
+	TEST(M_2_SQRTPI);
+	TEST(M_SQRT2);
+	TEST(M_SQRT1_2);
+
+	TEST(cos(M_PI_2));
+	TEST(acos(cos(M_PI_2)));
+	TEST(cosh(M_SQRT1_2));
+	TEST(acosh(cosh(M_SQRT1_2)));
+	TEST(sin(M_PI_2));
+	TEST(asin(sin(M_PI_2)));
+	TEST(sinh(M_PI_2));
+	TEST(asinh(sinh(M_PI_2)));
+	TEST(tan(M_SQRT2));
+	TEST(atan(tan(M_SQRT2)));
+	TEST(tanh(M_SQRT2));
+	TEST(atanh(tanh(M_SQRT2)));
+	TEST(atan2(M_SQRT2, M_SQRT2));
+	TEST(cbrt(8.0));
+	TEST(ceil(M_PI));
+	TEST(ceil(M_E));
+	TEST(copysign(-2.0, 10.0));
+	TEST(copysign(2.0, -10.0));
+	TEST(erf(M_SQRT1_2));
+	TEST(erfc(M_SQRT1_2));
+	TEST(exp(M_PI_4));
+	TEST(exp2(3.0));
+	TEST(expm1(M_PI_4));
+	TEST(fabs(-M_SQRT2));
+	TEST(fabs(M_SQRT2));
+	TEST(fdim(M_PI, M_PI_2));
+	TEST(fdim(M_PI, -M_PI_2));
+	TESTI(finite(1.0 / 0.0));
+	TEST(floor(M_PI));
+	TEST(floor(M_E));
+	TEST(fma(M_PI, M_E, M_SQRT2));
+	TEST(fmax(M_PI, M_E));
+	TEST(fmin(M_PI, M_E));
+	TEST(fmod(100.5, 10.0));
+	TEST(gamma(5.0));
+	TEST(hypot(3.0, 4.0));
+	printf("%-24s%d\n", "ilogb(10.0)", ilogb(10.0));
+	TESTI(isinf(1.0 / 0.0));
+	TESTI(isnan(log(-1.0)));
+	TEST(j0(M_PI));
+	TEST(j1(M_PI));
+	TEST(jn(3, M_PI));
+	TEST(lgamma(M_PI));
+	TEST(log(M_E));
+	TEST(log10(100.0));
+	TEST(log1p(M_PI));
+	TEST(nan(""));
+	TEST(nextafter(1.0e-14, 1.0));
+	TEST(pow(M_SQRT2, 2.0));
+	TEST(remainder(M_PI, M_E));
+	TEST(rint(M_PI));
+	TEST(rint(M_E));
+	printf("%-24s%+2.13f\n", "scalbn(1.0,2)", scalbn(1.0, 2));
+	TEST(sin(M_PI_4));
+	TEST(sinh(M_PI_4));
+	TEST(sqrt(9.0));
+	TEST(tan(M_PI_4));
+	TEST(tanh(M_PI_4));
+	TEST(trunc(M_PI));
+	TEST(trunc(M_E));
+	TEST(y0(M_PI));
+	TEST(y1(M_PI));
+	TEST(yn(3, M_PI));
+
+	return 0;
+}
Index: src/tests/lib/lua/libm/lualibm.lua
diff -u /dev/null src/tests/lib/lua/libm/lualibm.lua:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/libm/lualibm.lua	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,92 @@
+#!/usr/bin/lua
+
+local lm = require("libm")
+
+local fmtf = "%-24s%+2.13f"
+local fmti = "%-24s%d"
+
+local function test(s,x)
+   print(string.format(fmtf, s, x))
+end
+
+local function testb(s,x)
+   print(string.format(fmti, s, x and 1 or 0))
+end
+
+test("M_E",lm.M_E);
+test("M_LOG2E",lm.M_LOG2E)
+test("M_LOG10E",lm.M_LOG10E)
+test("M_LN2",lm.M_LN2)
+test("M_LN10",lm.M_LN10)
+test("M_PI",lm.M_PI)
+test("M_PI_2",lm.M_PI_2)
+test("M_PI_4",lm.M_PI_4)
+test("M_1_PI",lm.M_1_PI)
+test("M_2_PI",lm.M_2_PI)
+test("M_2_SQRTPI",lm.M_2_SQRTPI)
+test("M_SQRT2",lm.M_SQRT2)
+test("M_SQRT1_2",lm.M_SQRT1_2)
+
+test("cos(M_PI_2)", lm.cos(lm.M_PI_2))
+test("acos(cos(M_PI_2))",lm.acos(lm.cos(lm.M_PI_2)))
+test("cosh(M_SQRT1_2)",lm.cosh(lm.M_SQRT1_2))
+test("acosh(cosh(M_SQRT1_2))",lm.acosh(lm.cosh(lm.M_SQRT1_2)))
+test("sin(M_PI_2)",lm.sin(lm.M_PI_2))
+test("asin(sin(M_PI_2))",lm.asin(lm.sin(lm.M_PI_2)))
+test("sinh(M_PI_2)",lm.sinh(lm.M_PI_2))
+test("asinh(sinh(M_PI_2))",lm.asinh(lm.sinh(lm.M_PI_2)))
+test("tan(M_SQRT2)",lm.tan(lm.M_SQRT2))
+test("atan(tan(M_SQRT2))",lm.atan(lm.tan(lm.M_SQRT2)))
+test("tanh(M_SQRT2)",lm.tanh(lm.M_SQRT2))
+test("atanh(tanh(M_SQRT2))",lm.atanh(lm.tanh(lm.M_SQRT2)))
+test("atan2(M_SQRT2,M_SQRT2)",lm.atan2(lm.M_SQRT2,lm.M_SQRT2))
+test("cbrt(8.0)",lm.cbrt(8.0))
+test("ceil(M_PI)",lm.ceil(lm.M_PI))
+test("ceil(M_E)",lm.ceil(lm.M_E))
+test("copysign(-2.0,10.0)",lm.copysign(-2.0,10.0))
+test("copysign(2.0,-10.0)",lm.copysign(2.0,-10.0))
+test("erf(M_SQRT1_2)",lm.erf(lm.M_SQRT1_2))
+test("erfc(M_SQRT1_2)",lm.erfc(lm.M_SQRT1_2))
+test("exp(M_PI_4)",lm.exp(lm.M_PI_4))
+test("exp2(3.0)",lm.exp2(3.0))
+test("expm1(M_PI_4)",lm.expm1(lm.M_PI_4))
+test("fabs(-M_SQRT2)",lm.fabs(-lm.M_SQRT2))
+test("fabs(M_SQRT2)",lm.fabs(lm.M_SQRT2))
+test("fdim(M_PI,M_PI_2)",lm.fdim(lm.M_PI,lm.M_PI_2))
+test("fdim(M_PI,-M_PI_2)",lm.fdim(lm.M_PI,-lm.M_PI_2))
+testb("finite(1.0/0.0)",lm.finite(1.0/0.0))
+test("floor(M_PI)",lm.floor(lm.M_PI))
+test("floor(M_E)",lm.floor(lm.M_E))
+test("fma(M_PI,M_E,M_SQRT2)",lm.fma(lm.M_PI,lm.M_E,lm.M_SQRT2))
+test("fmax(M_PI,M_E)",lm.fmax(lm.M_PI,lm.M_E))
+test("fmin(M_PI,M_E)",lm.fmin(lm.M_PI,lm.M_E))
+test("fmod(100.5,10.0)",lm.fmod(100.5,10.0))
+test("gamma(5.0)",lm.gamma(5.0))
+test("hypot(3.0,4.0)",lm.hypot(3.0,4.0))
+print(string.format(fmti, "ilogb(10.0)", lm.ilogb(10.0)))
+testb("isinf(1.0/0.0)",lm.isinf(1.0/0.0))
+testb("isnan(log(-1.0))",lm.isnan(lm.log(-1.0)))
+test("j0(M_PI)",lm.j0(lm.M_PI))
+test("j1(M_PI)",lm.j1(lm.M_PI))
+test("jn(3,M_PI)",lm.jn(3,lm.M_PI))
+test("lgamma(M_PI)",lm.lgamma(lm.M_PI))
+test("log(M_E)",lm.log(lm.M_E))
+test("log10(100.0)",lm.log10(100.0))
+test("log1p(M_PI)",lm.log1p(lm.M_PI))
+test("nan(\"\")",lm.nan(""))
+test("nextafter(1.0e-14,1.0)",lm.nextafter(1.0e-14,1.0))
+test("pow(M_SQRT2,2.0)",lm.pow(lm.M_SQRT2,2.0))
+test("remainder(M_PI,M_E)",lm.remainder(lm.M_PI,lm.M_E))
+test("rint(M_PI)",lm.rint(lm.M_PI))
+test("rint(M_E)",lm.rint(lm.M_E))
+print(string.format(fmtf, "scalbn(1.0,2)", lm.scalbn(1.0,2)))
+test("sin(M_PI_4)",lm.sin(lm.M_PI_4))
+test("sinh(M_PI_4)",lm.sinh(lm.M_PI_4))
+test("sqrt(9.0)",lm.sqrt(9.0))
+test("tan(M_PI_4)",lm.tan(lm.M_PI_4))
+test("tanh(M_PI_4)",lm.tanh(lm.M_PI_4))
+test("trunc(M_PI)",lm.trunc(lm.M_PI))
+test("trunc(M_E)",lm.trunc(lm.M_E))
+test("y0(M_PI)",lm.y0(lm.M_PI))
+test("y1(M_PI)",lm.y1(lm.M_PI))
+test("yn(3,M_PI)",lm.yn(3,lm.M_PI))
Index: src/tests/lib/lua/libm/t_lualibm.sh
diff -u /dev/null src/tests/lib/lua/libm/t_lualibm.sh:1.1
--- /dev/null	Mon Nov 21 17:01:34 2022
+++ src/tests/lib/lua/libm/t_lualibm.sh	Mon Nov 21 17:01:33 2022
@@ -0,0 +1,46 @@
+# $NetBSD: t_lualibm.sh,v 1.1 2022/11/21 22:01:33 christos Exp $
+#
+# Copyright (c) 2008 The NetBSD Foundation, Inc.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+
+atf_test_case lualibm
+
+lualibm_head()
+{
+	atf_set "descr" "Checks libm implementation for lua"
+}
+
+lualibm_body()
+{
+	
+	"$(atf_get_srcdir)/h_lualibm" > expout
+	atf_check -o file:expout "$(atf_get_srcdir)/lualibm.lua"
+}
+
+
+atf_init_test_cases()
+{
+	atf_add_test_case lualibm
+}

Reply via email to