std_complex.h: Tweaks, include cmath for abs overloads.
2000-11-20 Benjamin Kosnik <bkoz@redhat.com> * include/bits/std_complex.h: Tweaks, include cmath for abs overloads. * src/complex.cc: Remove cmath include, formatting tweaks, remove dead code. * include/c/bits/std_cmath.h: Formatting tweaks. * testsuite/26_numerics/complex_value.cc: New file, for catching bits gleaned from libstdc++/106. * testsuite/23_containers/vector_ctor.cc (test02): Add test from libstdc++/102. From-SVN: r37591
This commit is contained in:
parent
250333d0e0
commit
5e90dd7193
6 changed files with 620 additions and 638 deletions
|
@ -1,3 +1,17 @@
|
|||
2000-11-20 Benjamin Kosnik <bkoz@redhat.com>
|
||||
|
||||
* include/bits/std_complex.h: Tweaks, include cmath for abs overloads.
|
||||
* src/complex.cc: Remove cmath include, formatting tweaks, remove
|
||||
dead code.
|
||||
* include/c/bits/std_cmath.h: Formatting tweaks.
|
||||
* testsuite/26_numerics/complex_value.cc: New file, for catching
|
||||
bits gleaned from libstdc++/106.
|
||||
|
||||
* testsuite/23_containers/vector_ctor.cc (test02): Add test from
|
||||
libstdc++/102.
|
||||
|
||||
* src/string-inst.cc: Tweaks.
|
||||
|
||||
2000-11-20 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* include/bits/c++config, include/bits/ios_base.h,
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -296,7 +296,7 @@ namespace std
|
|||
abs(double __x) { return __builtin_fabs(__x); }
|
||||
#else
|
||||
inline double
|
||||
abs(double __x) { return fabs (__x); }
|
||||
abs(double __x) { return fabs(__x); }
|
||||
#endif
|
||||
|
||||
extern "C" double floor(double __x);
|
||||
|
|
|
@ -27,7 +27,6 @@
|
|||
// invalidate any other reasons why the executable file might be covered by
|
||||
// the GNU General Public License.
|
||||
|
||||
#include <bits/std_cmath.h>
|
||||
#include <bits/std_complex.h>
|
||||
|
||||
// This is a ISO C 9X header.
|
||||
|
@ -45,62 +44,6 @@
|
|||
|
||||
namespace std
|
||||
{
|
||||
// template<>
|
||||
// FLT
|
||||
// abs(const complex<FLT>& __x)
|
||||
// {
|
||||
// // We don't use cabs here because some systems (IRIX 6.5, for
|
||||
// // example) define their own incompatible version.
|
||||
// return hypot (__real__ __x._M_value, __imag__ __x._M_value);
|
||||
// }
|
||||
|
||||
// template<>
|
||||
// FLT
|
||||
// arg(const complex<FLT>& __x)
|
||||
// { return carg(__x._M_value); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// polar(const FLT& __rho, const FLT& __theta)
|
||||
// {
|
||||
// #if 0
|
||||
// // XXX
|
||||
// // defined(_GLIBCPP_HAVE_SINCOS) && !defined(__osf__)
|
||||
// // Although sincos does exist on OSF3.2 and OSF4.0 we cannot use it
|
||||
// // since the necessary types are not defined in the headers.
|
||||
// FLT __sinx, __cosx;
|
||||
// sincos(__theta, &__sinx, &__cosx);
|
||||
// return complex<FLT>(__rho * __cosx, __rho * __sinx);
|
||||
// #else
|
||||
// return complex<FLT>(__rho * cos(__theta), __rho * sin(__theta));
|
||||
// #endif
|
||||
// }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// cos(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(ccos(__x._M_value)); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// cosh(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(ccosh(__x._M_value)); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// exp(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(cexp(__x._M_value)); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// log(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(c_log(__x._M_value)); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// log10(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(clog10(__x._M_value)); }
|
||||
|
||||
template<>
|
||||
complex<FLT>
|
||||
pow(const complex<FLT>& __x, int __n)
|
||||
|
@ -121,16 +64,6 @@ namespace std
|
|||
pow(const FLT& __x, const complex<FLT>& __y)
|
||||
{ return complex<FLT>(cexp(__y._M_value * log(__x))); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// sin(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(csin(__x._M_value)); }
|
||||
|
||||
// template<>
|
||||
// complex<FLT>
|
||||
// sinh(const complex<FLT>& __x)
|
||||
// { return complex<FLT>(csinh(__x._M_value)); }
|
||||
|
||||
template<>
|
||||
complex<FLT>
|
||||
sqrt(const complex<FLT>& __x)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// 1999-06-29
|
||||
// bkoz
|
||||
|
||||
// Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
// Copyright (C) 1999, 2000 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
|
@ -29,7 +29,7 @@ template<typename T>
|
|||
|
||||
struct B { };
|
||||
|
||||
bool test01()
|
||||
void test01()
|
||||
{
|
||||
|
||||
// 1
|
||||
|
@ -43,18 +43,25 @@ bool test01()
|
|||
#ifdef DEBUG_ASSERT
|
||||
assert(test);
|
||||
#endif
|
||||
|
||||
return test;
|
||||
}
|
||||
|
||||
// 2
|
||||
template class std::vector<double>;
|
||||
template class std::vector< A<B> >;
|
||||
|
||||
|
||||
// libstdc++/102
|
||||
void test02
|
||||
{
|
||||
std::vector<int> v1;
|
||||
std::vector<int> v2 (v1);
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
|
||||
test02();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
64
libstdc++-v3/testsuite/26_numerics/complex_value.cc
Normal file
64
libstdc++-v3/testsuite/26_numerics/complex_value.cc
Normal file
|
@ -0,0 +1,64 @@
|
|||
// 2000-11-20
|
||||
// Benjamin Kosnik bkoz@redhat.com
|
||||
|
||||
// Copyright (C) 2000 Free Software Foundation, Inc.
|
||||
//
|
||||
// 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
|
||||
// terms of the GNU General Public License as published by the
|
||||
// Free Software Foundation; either version 2, or (at your option)
|
||||
// any later version.
|
||||
|
||||
// This library 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 General Public License for more details.
|
||||
|
||||
// You should have received a copy of the GNU General Public License along
|
||||
// with this library; see the file COPYING. If not, write to the Free
|
||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
||||
// USA.
|
||||
|
||||
#include <complex>
|
||||
#include <debug_assert.h>
|
||||
|
||||
void test01()
|
||||
{
|
||||
using namespace std;
|
||||
bool test = true;
|
||||
typedef complex<double> complex_type;
|
||||
const double cd1 = -11.451;
|
||||
const double cd2 = -442.1533;
|
||||
|
||||
complex_type a(cd1, cd2);
|
||||
double d;
|
||||
d = a.real();
|
||||
VERIFY( d == cd1);
|
||||
|
||||
d = a.imag();
|
||||
VERIFY(d == cd2);
|
||||
|
||||
complex_type c(cd1, cd2);
|
||||
double d6 = abs(c);
|
||||
VERIFY( d6 >= 0);
|
||||
|
||||
double d7 = arg(c);
|
||||
double d8 = atan2(c.imag(), c.real());
|
||||
VERIFY( d7 == d8);
|
||||
|
||||
double d9 = norm(c);
|
||||
double d10 = d6 * d6;
|
||||
VERIFY(d9 - d10 == 0);
|
||||
|
||||
complex_type e = conj(c);
|
||||
|
||||
complex_type f = polar(c.imag(), 0.0);
|
||||
VERIFY(f.real() != 0);
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
test01();
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue