summaryrefslogtreecommitdiff
path: root/tests/lib/lua
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2022-11-21 22:01:32 +0000
committerchristos <christos@NetBSD.org>2022-11-21 22:01:32 +0000
commitaa8ee7f2ef496eff5f1f2b454405eafa4330a79e (patch)
tree0220f4ad660d0fa9c1eb29825430faf1bae220bc /tests/lib/lua
parent1a9fe3305d67bcec8f00f71582c2ea83fa493b53 (diff)
lua libm API from Phil Rulon
Diffstat (limited to 'tests/lib/lua')
-rw-r--r--tests/lib/lua/Makefile9
-rw-r--r--tests/lib/lua/Makefile.inc1
-rw-r--r--tests/lib/lua/libm/Makefile20
-rw-r--r--tests/lib/lua/libm/h_lualibm.c89
-rwxr-xr-xtests/lib/lua/libm/lualibm.lua92
-rw-r--r--tests/lib/lua/libm/t_lualibm.sh46
6 files changed, 257 insertions, 0 deletions
diff --git a/tests/lib/lua/Makefile b/tests/lib/lua/Makefile
new file mode 100644
index 00000000000..80cc7d6239c
--- /dev/null
+++ b/tests/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/tests/lib/lua/Makefile.inc b/tests/lib/lua/Makefile.inc
new file mode 100644
index 00000000000..01b5f23410c
--- /dev/null
+++ b/tests/lib/lua/Makefile.inc
@@ -0,0 +1 @@
+.include "../Makefile.inc"
diff --git a/tests/lib/lua/libm/Makefile b/tests/lib/lua/libm/Makefile
new file mode 100644
index 00000000000..9f0f42d673f
--- /dev/null
+++ b/tests/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/tests/lib/lua/libm/h_lualibm.c b/tests/lib/lua/libm/h_lualibm.c
new file mode 100644
index 00000000000..dca9bf2ce99
--- /dev/null
+++ b/tests/lib/lua/libm/h_lualibm.c
@@ -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;
+}
diff --git a/tests/lib/lua/libm/lualibm.lua b/tests/lib/lua/libm/lualibm.lua
new file mode 100755
index 00000000000..6c8e13c1114
--- /dev/null
+++ b/tests/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(""))
+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/tests/lib/lua/libm/t_lualibm.sh b/tests/lib/lua/libm/t_lualibm.sh
new file mode 100644
index 00000000000..8e2bc0ad4e7
--- /dev/null
+++ b/tests/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
+}