diff options
author | Philippe Theveny <philippe.theveny@laposte.net> | 2013-12-03 16:10:44 +0000 |
---|---|---|
committer | Philippe Theveny <philippe.theveny@laposte.net> | 2013-12-03 16:10:44 +0000 |
commit | 63cfab1b10cdb0d8d895442258ecfbcf6bc8e706 (patch) | |
tree | 3ff7a28fc8d88365f56aa887e690eb673686b272 | |
parent | 58bb7daf70f7690afa0774ed72c0b681ad253cc0 (diff) | |
download | mpc-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.am | 14 | ||||
-rw-r--r-- | tests/mul_i.dsc | 29 | ||||
-rw-r--r-- | tests/mul_si.dsc | 29 | ||||
-rw-r--r-- | tests/mul_ui.dsc | 29 | ||||
-rw-r--r-- | tests/tmul_i_tmpl.c | 103 | ||||
-rw-r--r-- | tests/tmul_si_tmpl.c | 40 | ||||
-rw-r--r-- | tests/tmul_ui_tmpl.c | 40 |
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; +} |