aboutsummaryrefslogtreecommitdiff
path: root/lib/lua
diff options
context:
space:
mode:
authorEnji Cooper <ngie@FreeBSD.org>2023-08-11 08:41:49 +0000
committerEnji Cooper <ngie@FreeBSD.org>2023-08-11 08:41:49 +0000
commitdc9c7dc6ec9ecb5449d71d79ae13f9782c866b73 (patch)
tree77811130a73711377eb46a3e3eb9fac15fdcf746 /lib/lua
parentd328162dcb73d9041fe8ceb9fbae7276c3dacb53 (diff)
Diffstat (limited to 'lib/lua')
-rw-r--r--lib/lua/Makefile9
-rw-r--r--lib/lua/Makefile.inc1
-rw-r--r--lib/lua/libm/Makefile20
-rw-r--r--lib/lua/libm/h_lualibm.c92
-rwxr-xr-xlib/lua/libm/lualibm.lua92
-rw-r--r--lib/lua/libm/t_lualibm.sh46
6 files changed, 260 insertions, 0 deletions
diff --git a/lib/lua/Makefile b/lib/lua/Makefile
new file mode 100644
index 000000000000..80cc7d6239c7
--- /dev/null
+++ b/lib/lua/Makefile
@@ -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>
diff --git a/lib/lua/Makefile.inc b/lib/lua/Makefile.inc
new file mode 100644
index 000000000000..01b5f23410c8
--- /dev/null
+++ b/lib/lua/Makefile.inc
@@ -0,0 +1 @@
+.include "../Makefile.inc"
diff --git a/lib/lua/libm/Makefile b/lib/lua/libm/Makefile
new file mode 100644
index 000000000000..9f0f42d673fe
--- /dev/null
+++ b/lib/lua/libm/Makefile
@@ -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>
diff --git a/lib/lua/libm/h_lualibm.c b/lib/lua/libm/h_lualibm.c
new file mode 100644
index 000000000000..6dca7fd7dd8a
--- /dev/null
+++ b/lib/lua/libm/h_lualibm.c
@@ -0,0 +1,92 @@
+#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(""));
+#ifdef notyet
+ // XXX: vax
+ TEST(nextafter(1.0e-14, 1.0));
+#endif
+ 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;
+}
diff --git a/lib/lua/libm/lualibm.lua b/lib/lua/libm/lualibm.lua
new file mode 100755
index 000000000000..0036bd704fbb
--- /dev/null
+++ b/lib/lua/libm/lualibm.lua
@@ -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(""))
+-- XXX vax 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))
diff --git a/lib/lua/libm/t_lualibm.sh b/lib/lua/libm/t_lualibm.sh
new file mode 100644
index 000000000000..8e2bc0ad4e73
--- /dev/null
+++ b/lib/lua/libm/t_lualibm.sh
@@ -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
+}