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

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-gcc/] [gcc-4.1.1/] [libstdc++-v3/] [testsuite/] [26_numerics/] [complex/] [complex_inserters_extractors.cc] - Blame information for rev 19

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 19 jlechner
// 2000-02-10
2
// Petter Urkedal <petter@matfys.lth.se>
3
 
4
// Copyright (C) 2000, 2003 Free Software Foundation
5
//
6
// This file is part of the GNU ISO C++ Library.  This library is free
7
// software; you can redistribute it and/or modify it under the
8
// terms of the GNU General Public License as published by the
9
// Free Software Foundation; either version 2, or (at your option)
10
// any later version.
11
 
12
// This library is distributed in the hope that it will be useful,
13
// but WITHOUT ANY WARRANTY; without even the implied warranty of
14
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
// GNU General Public License for more details.
16
 
17
// You should have received a copy of the GNU General Public License along
18
// with this library; see the file COPYING.  If not, write to the Free
19
// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20
// USA.
21
 
22
 
23
#include <iostream>
24
#include <string>
25
#include <sstream>
26
#include <complex>
27
#include <testsuite_hooks.h>
28
#include <cmath>
29
 
30
template<typename R>
31
inline bool flteq(R x, R y)
32
{
33
  if (x == R(0)) return y == R(0);
34
  else return std::fabs(x-y) < 1e-6*std::fabs(x);
35
}
36
 
37
template<typename R>
38
int
39
test_good(std::string str, R x, R y)
40
{
41
  bool test __attribute__((unused)) = true;
42
  std::complex<R> z;
43
  char ch;
44
  std::istringstream iss(str);
45
  iss >> z >> ch;
46
  VERIFY( iss.good() );
47
  VERIFY( flteq(z.real(), x) );
48
  VERIFY( flteq(z.imag(), y) );
49
  VERIFY( ch == '#' );
50
  return 0;
51
}
52
 
53
template<typename R>
54
int
55
test_fail(std::string str)
56
{
57
  bool test __attribute__((unused)) = true;
58
  std::complex<R> z;
59
  std::istringstream iss(str);
60
  iss >> z;
61
  VERIFY( iss.fail() && !iss.bad() );
62
  return 0;
63
}
64
 
65
template<typename R>
66
int
67
testall()
68
{
69
  test_good<R>("(-1.1,3.7)#", -1.1, 3.7);
70
  test_good<R>("(  .7e6  ,  \n-3.1)#", .7e6, -3.1);
71
  test_good<R>("(\t0,-1)#", 0.0, -1.0);
72
  test_good<R>("(-3.14)#", -3.14, 0.0);
73
  test_good<R>("-.1#", -.1, 0.0);
74
  test_good<R>(" ( -2.7e3 )#", -2.7e3, 0.0);
75
  test_good<R>(" -.1#", -.1, 0.0);
76
  test_fail<R>("(a,1)");
77
  test_fail<R>("(,1)");
78
  test_fail<R>("(1,a)");
79
  test_fail<R>("(1, )");
80
  test_fail<R>("|1,1)");
81
  test_fail<R>("(1|1)");
82
  test_fail<R>("(1,1|");
83
  return 0;
84
}
85
 
86
// libstdc++/2970
87
void test01()
88
{
89
  using namespace std;
90
  bool test __attribute__((unused)) = true;
91
 
92
  complex<float> cf01(-1.1, -333.2);
93
  stringstream ss;
94
  ss << cf01;
95
  string str = ss.str();
96
  VERIFY( str == "(-1.1,-333.2)" );
97
}
98
 
99
// libstdc++/2985
100
struct gnu_char_traits : public std::char_traits<char>
101
{ };
102
 
103
typedef std::basic_ostringstream<char, gnu_char_traits> gnu_sstream;
104
template class std::basic_string<char, gnu_char_traits, std::allocator<char> >;
105
 
106
void test02()
107
{
108
  bool test __attribute__((unused)) = true;
109
 
110
  // Construct locale with specialized facets.
111
  typedef gnu_sstream::__num_put_type numput_type;
112
  typedef gnu_sstream::__num_get_type numget_type;
113
  std::locale loc_c = std::locale::classic();
114
  std::locale loc_1(loc_c, new numput_type);
115
  std::locale loc_2(loc_1, new numget_type);
116
  VERIFY( std::has_facet<numput_type>(loc_2) );
117
  VERIFY( std::has_facet<numget_type>(loc_2) );
118
 
119
  gnu_sstream sstr;
120
  sstr.imbue(loc_2);
121
 
122
 
123
  std::complex<double> x(3, 4);
124
  sstr << x;
125
  VERIFY( sstr.str() == "(3,4)" );
126
}
127
 
128
int
129
main()
130
{
131
  testall<float>();
132
  testall<double>();
133
  testall<long double>();
134
 
135
  test01();
136
  test02();
137
 
138
  return 0;
139
}
140
 
141
 
142
 
143
 

powered by: WebSVN 2.1.0

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