summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilippe Theveny <philippe.theveny@laposte.net>2013-12-03 16:10:44 +0000
committerPhilippe Theveny <philippe.theveny@laposte.net>2013-12-03 16:10:44 +0000
commit63cfab1b10cdb0d8d895442258ecfbcf6bc8e706 (patch)
tree3ff7a28fc8d88365f56aa887e690eb673686b272
parent58bb7daf70f7690afa0774ed72c0b681ad253cc0 (diff)
downloadmpc-git-63cfab1b10cdb0d8d895442258ecfbcf6bc8e706.tar.gz
[tests/] Add templated tests for mpc_mul_i, mpc_mul_si, and mpc_mul_ui.
git-svn-id: svn+ssh://scm.gforge.inria.fr/svnroot/mpc/branches/benchs_tests@1372 211d60ee-9f03-0410-a15a-8952a2c7a4e4
-rw-r--r--tests/Makefile.am14
-rw-r--r--tests/mul_i.dsc29
-rw-r--r--tests/mul_si.dsc29
-rw-r--r--tests/mul_ui.dsc29
-rw-r--r--tests/tmul_i_tmpl.c103
-rw-r--r--tests/tmul_si_tmpl.c40
-rw-r--r--tests/tmul_ui_tmpl.c40
7 files changed, 278 insertions, 6 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index b5a2c8b..39a96b7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -34,9 +34,10 @@ TEMPLATED = tabs_tmpl tacos_tmpl tacosh_tmpl tadd_fr_tmpl tadd_tmpl \
tdiv_2ui_tmpl tdiv_fr_tmpl tdiv_ui_tmpl texp_tmpl tfma_tmpl \
tfr_div_tmpl tfr_sub_tmpl timag_tmpl tlog10_tmpl tlog_tmpl \
tlog10_tmpl tmul_tmpl tmul_2si_tmpl tmul_2ui_tmpl tmul_fr_tmpl \
- tneg_tmpl tnorm_tmpl tpow_fr_tmpl tpow_si_tmpl tpow_tmpl tpow_ui_tmpl \
- tpow_z_tmpl tproj_tmpl treal_tmpl tsin_tmpl tsinh_tmpl tsub_fr_tmpl \
- tsub_tmpl ttan_tmpl ttanh_tmpl
+ tmul_i_tmpl tmul_si_tmpl tmul_ui_tmpl tneg_tmpl tnorm_tmpl \
+ tpow_fr_tmpl tpow_si_tmpl tpow_tmpl tpow_ui_tmpl tpow_z_tmpl \
+ tproj_tmpl treal_tmpl tsin_tmpl tsinh_tmpl tsub_fr_tmpl tsub_tmpl \
+ ttan_tmpl ttanh_tmpl
check_PROGRAMS = tabs tacos tacosh tadd tadd_fr tadd_si tadd_ui targ \
tasin tasinh tatan tatanh tconj tcos tcosh tdiv tdiv_2si tdiv_2ui \
tdiv_fr tdiv_ui texp tfma tfr_div tfr_sub timag tio_str tlog tlog10 \
@@ -57,9 +58,10 @@ DESCRIPTIONS = abs.dsc acos.dsc acosh.dsc add.dsc add_fr.dsc add_si.dsc \
add_ui.dsc arg.dsc asin.dsc asinh.dsc atan.dsc atanh.dsc conj.dsc \
cos.dsc cosh.dsc div.dsc div_2si.dsc div_2ui.dsc div_fr.dsc \
div_ui.dsc exp.dsc fma.dsc fr_div.dsc fr_sub.dsc imag.dsc log.dsc \
- log10.dsc mul.dsc mul_2si.dsc mul_2ui.dsc mul_fr.dsc neg.dsc norm.dsc \
- pow.dsc pow_fr.dsc pow_si.dsc pow_ui.dsc pow_z.dsc proj.dsc real.dsc \
- sin.dsc sinh.dsc sub.dsc sub_fr.dsc tan.dsc tanh.dsc
+ log10.dsc mul.dsc mul_2si.dsc mul_2ui.dsc mul_fr.dsc mul_i.dsc \
+ mul_si.dsc mul_ui.dsc neg.dsc norm.dsc pow.dsc pow_fr.dsc pow_si.dsc \
+ pow_ui.dsc pow_z.dsc proj.dsc real.dsc sin.dsc sinh.dsc sub.dsc \
+ sub_fr.dsc tan.dsc tanh.dsc
DATA_SETS = abs.dat acos.dat acosh.dat add.dat add_fr.dat arg.dat \
asin.dat asinh.dat atan.dat atanh.dat conj.dat cos.dat cosh.dat \
div.dat div_fr.dat exp.dat fma.dat fr_div.dat fr_sub.dat inp_str.dat \
diff --git a/tests/mul_i.dsc b/tests/mul_i.dsc
new file mode 100644
index 0000000..628cd1d
--- /dev/null
+++ b/tests/mul_i.dsc
@@ -0,0 +1,29 @@
+# Description file for mpc_mul_i
+#
+# Copyright (C) 2013 INRIA
+#
+# This file is part of GNU MPC.
+#
+# GNU MPC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at your
+#o ption) any later version.
+#
+# GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/ .
+#
+NAME:
+ mpc_mul_i
+RETURN:
+ mpc_inex
+OUTPUT:
+ mpc_ptr
+INPUT:
+ mpc_srcptr
+ int
+ mpc_rnd_t
diff --git a/tests/mul_si.dsc b/tests/mul_si.dsc
new file mode 100644
index 0000000..3d653c3
--- /dev/null
+++ b/tests/mul_si.dsc
@@ -0,0 +1,29 @@
+# Description file for mpc_mul_si
+#
+# Copyright (C) 2013 INRIA
+#
+# This file is part of GNU MPC.
+#
+# GNU MPC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at your
+#o ption) any later version.
+#
+# GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/ .
+#
+NAME:
+ mpc_mul_si
+RETURN:
+ mpc_inex
+OUTPUT:
+ mpc_ptr
+INPUT:
+ mpc_srcptr
+ unsigned long int
+ mpc_rnd_t
diff --git a/tests/mul_ui.dsc b/tests/mul_ui.dsc
new file mode 100644
index 0000000..e272149
--- /dev/null
+++ b/tests/mul_ui.dsc
@@ -0,0 +1,29 @@
+# Description file for mpc_mul_ui
+#
+# Copyright (C) 2013 INRIA
+#
+# This file is part of GNU MPC.
+#
+# GNU MPC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the
+# Free Software Foundation; either version 3 of the License, or (at your
+#o ption) any later version.
+#
+# GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+# more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program. If not, see http://www.gnu.org/licenses/ .
+#
+NAME:
+ mpc_mul_ui
+RETURN:
+ mpc_inex
+OUTPUT:
+ mpc_ptr
+INPUT:
+ mpc_srcptr
+ unsigned long int
+ mpc_rnd_t
diff --git a/tests/tmul_i_tmpl.c b/tests/tmul_i_tmpl.c
new file mode 100644
index 0000000..bf920af
--- /dev/null
+++ b/tests/tmul_i_tmpl.c
@@ -0,0 +1,103 @@
+/* tmul_i_tmpl.c -- templated test file for mpc_mul_i.
+
+Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 INRIA
+
+This file is part of GNU MPC.
+
+GNU MPC is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program. If not, see http://www.gnu.org/licenses/ .
+*/
+
+#include "templates.h"
+
+static void
+check_different_precisions(void)
+{
+ /* check reuse when real and imaginary part have different precisions. */
+ mpc_t z, expected, got;
+ int res;
+
+ mpc_init2(z, 128);
+ mpc_init2(expected, 128);
+ mpc_init2(got, 128);
+
+ /* change precision of one part */
+ mpfr_set_prec (mpc_imagref (z), 32);
+ mpfr_set_prec (mpc_imagref (expected), 32);
+ mpfr_set_prec (mpc_imagref (got), 32);
+
+ mpfr_set_str (mpc_realref (z), "0x100000000fp-32", 16, MPFR_RNDN);
+ mpfr_set_str (mpc_imagref (z), "-1", 2, MPFR_RNDN);
+ mpfr_set_str (mpc_realref (expected), "+1", 2, MPFR_RNDN);
+ mpfr_set_str (mpc_imagref (expected), "0x100000000fp-32", 16, MPFR_RNDN);
+
+ mpc_set (got, z, MPC_RNDNN);
+ res = mpc_mul_i (got, got, +1, MPC_RNDNN);
+ if (MPC_INEX_RE(res) != 0 || MPC_INEX_IM(res) >=0)
+ {
+ printf("Wrong inexact flag for mpc_mul_i(z, z, n)\n"
+ " got (re=%2d, im=%2d)\nexpected (re= 0, im=-1)\n",
+ MPC_INEX_RE(res), MPC_INEX_IM(res));
+ exit(1);
+ }
+ if (mpc_cmp(got, expected) != 0)
+ {
+ printf ("Error for mpc_mul_i(z, z, n) for\n");
+ MPC_OUT (z);
+ printf ("n=+1\n");
+ MPC_OUT (expected);
+ MPC_OUT (got);
+
+ exit (1);
+ }
+
+ mpc_neg (expected, expected, MPC_RNDNN);
+ mpc_set (got, z, MPC_RNDNN);
+ mpc_mul_i (got, got, -1, MPC_RNDNN);
+ if (mpc_cmp(got, expected) != 0)
+ {
+ printf ("Error for mpc_mul_i(z, z, n) for\n");
+ MPC_OUT (z);
+ printf ("n=-1\n");
+ MPC_OUT (expected);
+ MPC_OUT (got);
+
+ exit (1);
+ }
+
+ mpc_clear (z);
+ mpc_clear (expected);
+ mpc_clear (got);
+}
+
+
+#define MPC_FUNCTION_CALL \
+ P[0].mpc_inex = mpc_mul_i (P[1].mpc, P[2].mpc, P[3].i, P[4].mpc_rnd)
+#define MPC_FUNCTION_CALL_REUSE_OP1 \
+ P[0].mpc_inex = mpc_mul_i (P[1].mpc, P[1].mpc, P[3].i, P[4].mpc_rnd)
+
+#include "tgeneric.tpl"
+
+int
+main (void)
+{
+ test_start ();
+
+ check_different_precisions ();
+
+ tgeneric_template ("mul_i.dsc", 2, 1024, 7, 1024);
+
+ test_end ();
+
+ return 0;
+}
diff --git a/tests/tmul_si_tmpl.c b/tests/tmul_si_tmpl.c
new file mode 100644
index 0000000..6a63be1
--- /dev/null
+++ b/tests/tmul_si_tmpl.c
@@ -0,0 +1,40 @@
+/* tmul_si_tmpl.c -- templated test file for mpc_mul_si.
+
+Copyright (C) 2002, 2005, 2008, 2013 INRIA
+
+This file is part of GNU MPC.
+
+GNU MPC is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program. If not, see http://www.gnu.org/licenses/ .
+*/
+
+#include "templates.h"
+
+#define MPC_FUNCTION_CALL \
+ P[0].mpc_inex = mpc_mul_si (P[1].mpc, P[2].mpc, P[3].si, P[4].mpc_rnd)
+#define MPC_FUNCTION_CALL_REUSE_OP1 \
+ P[0].mpc_inex = mpc_mul_si (P[1].mpc, P[1].mpc, P[3].si, P[4].mpc_rnd)
+
+#include "tgeneric.tpl"
+
+int
+main (void)
+{
+ test_start ();
+
+ tgeneric_template ("mul_si.dsc", 2, 1024, 7, 1024);
+
+ test_end ();
+
+ return 0;
+}
diff --git a/tests/tmul_ui_tmpl.c b/tests/tmul_ui_tmpl.c
new file mode 100644
index 0000000..e13227a
--- /dev/null
+++ b/tests/tmul_ui_tmpl.c
@@ -0,0 +1,40 @@
+/* tmul_ui_tmpl.c -- templated test file for mpc_mul_ui.
+
+Copyright (C) 2002, 2005, 2008, 2013 INRIA
+
+This file is part of GNU MPC.
+
+GNU MPC is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the
+Free Software Foundation; either version 3 of the License, or (at your
+option) any later version.
+
+GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
+more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this program. If not, see http://www.gnu.org/licenses/ .
+*/
+
+#include "templates.h"
+
+#define MPC_FUNCTION_CALL \
+ P[0].mpc_inex = mpc_mul_ui (P[1].mpc, P[2].mpc, P[3].si, P[4].mpc_rnd)
+#define MPC_FUNCTION_CALL_REUSE_OP1 \
+ P[0].mpc_inex = mpc_mul_ui (P[1].mpc, P[1].mpc, P[3].si, P[4].mpc_rnd)
+
+#include "tgeneric.tpl"
+
+int
+main (void)
+{
+ test_start ();
+
+ tgeneric_template ("mul_ui.dsc", 2, 1024, 7, 1024);
+
+ test_end ();
+
+ return 0;
+}