OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [libstdc++-v3/] [testsuite/] [26_numerics/] [complex/] [13450.cc] - Diff between revs 816 and 826

Only display areas with differences | Details | Blame | View Log

Rev 816 Rev 826
// { dg-do run { xfail broken_cplxf_arg } }
// { dg-do run { xfail broken_cplxf_arg } }
 
 
// Copyright (C) 2004, 2009 Free Software Foundation
// Copyright (C) 2004, 2009 Free Software Foundation
//
//
// This file is part of the GNU ISO C++ Library.  This library is free
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// any later version.
 
 
// This library is distributed in the hope that it will be useful,
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// GNU General Public License for more details.
 
 
// You should have received a copy of the GNU General Public License along
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3.  If not see
// with this library; see the file COPYING3.  If not see
// <http://www.gnu.org/licenses/>.
// <http://www.gnu.org/licenses/>.
 
 
// 26.2.8 complex transcendentals
// 26.2.8 complex transcendentals
 
 
#include <complex>
#include <complex>
#include <limits>
#include <limits>
#include <testsuite_hooks.h>
#include <testsuite_hooks.h>
 
 
template<typename T>
template<typename T>
  void test01_do(T a, T b)
  void test01_do(T a, T b)
  {
  {
    using namespace std;
    using namespace std;
    bool test __attribute__((unused)) = true;
    bool test __attribute__((unused)) = true;
    typedef complex<T> cplx;
    typedef complex<T> cplx;
 
 
    T eps = numeric_limits<T>::epsilon() * 100;
    T eps = numeric_limits<T>::epsilon() * 100;
 
 
    cplx ref = pow(cplx(a, T()), cplx(b, T()));
    cplx ref = pow(cplx(a, T()), cplx(b, T()));
    cplx res1 = pow(a, cplx(b, T()));
    cplx res1 = pow(a, cplx(b, T()));
    cplx res2 = pow(cplx(a, T()), b);
    cplx res2 = pow(cplx(a, T()), b);
 
 
    VERIFY( abs(ref - res1) < eps );
    VERIFY( abs(ref - res1) < eps );
    VERIFY( abs(ref - res2) < eps );
    VERIFY( abs(ref - res2) < eps );
    VERIFY( abs(res1 - res2) < eps );
    VERIFY( abs(res1 - res2) < eps );
  }
  }
 
 
// libstdc++/13450
// libstdc++/13450
void test01()
void test01()
{
{
  float f1 = -1.0f;
  float f1 = -1.0f;
  float f2 = 0.5f;
  float f2 = 0.5f;
  test01_do(f1, f2);
  test01_do(f1, f2);
 
 
  f1 = -3.2f;
  f1 = -3.2f;
  f2 = 1.4f;
  f2 = 1.4f;
  test01_do(f1, f2);
  test01_do(f1, f2);
 
 
  double d1 = -1.0;
  double d1 = -1.0;
  double d2 = 0.5;
  double d2 = 0.5;
  test01_do(d1, d2);
  test01_do(d1, d2);
 
 
  d1 = -3.2;
  d1 = -3.2;
  d2 = 1.4;
  d2 = 1.4;
  test01_do(d1, d2);
  test01_do(d1, d2);
 
 
#if __LDBL_MANT_DIG__ != 106
#if __LDBL_MANT_DIG__ != 106
  /* For IBM long double, epsilon is too small (since 1.0 plus any
  /* For IBM long double, epsilon is too small (since 1.0 plus any
     double is representable) to be able to expect results within
     double is representable) to be able to expect results within
     epsilon * 100 (which may be much less than 1ulp for a particular
     epsilon * 100 (which may be much less than 1ulp for a particular
     long double value).  */
     long double value).  */
  long double ld1 = -1.0l;
  long double ld1 = -1.0l;
  long double ld2 = 0.5l;
  long double ld2 = 0.5l;
  test01_do(ld1, ld2);
  test01_do(ld1, ld2);
 
 
  ld1 = -3.2l;
  ld1 = -3.2l;
  ld2 = 1.4l;
  ld2 = 1.4l;
  test01_do(ld1, ld2);
  test01_do(ld1, ld2);
#endif
#endif
}
}
 
 
int main()
int main()
{
{
  test01();
  test01();
  return 0;
  return 0;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.