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:
Benjamin Kosnik 2000-11-20 21:13:45 +00:00 committed by Benjamin Kosnik
parent 250333d0e0
commit 5e90dd7193
6 changed files with 620 additions and 638 deletions

View File

@ -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

View File

@ -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);

View File

@ -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)

View File

@ -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;
}

View 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;
}