diff options
author | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-22 10:52:14 +0000 |
---|---|---|
committer | paolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-22 10:52:14 +0000 |
commit | 6f830f08ae32ede4a07a42d0b5155655100e31cc (patch) | |
tree | d5ca66b8369279fbfb404c53f7ff2f278d70db4b /libstdc++-v3/testsuite/26_numerics/valarray | |
parent | c4110044fba9990bcdf7e56ea5cd413719c8c148 (diff) | |
download | ppe42-gcc-6f830f08ae32ede4a07a42d0b5155655100e31cc.tar.gz ppe42-gcc-6f830f08ae32ede4a07a42d0b5155655100e31cc.zip |
2004-06-22 Paolo Carlini <pcarlini@suse.de>
* testsuite/26_numerics/complex_inserters_extractors.cc,
complex_value.cc, buggy_complex.cc: Move to...
* testsuite/26_numerics/complex/: ... here.
* testsuite/26_numerics/c99_classification_macros_c++.cc,
c99_classification_macros_c.cc, c_math.cc, c_math_dynamic.cc,
fabs_inline.cc: Move to...
* testsuite/26_numerics/cmath/: ... here.
* testsuite/26_numerics/binary_closure.cc, slice.cc,
slice_array_assignment.cc, valarray.cc, valarray_const_bracket.cc,
valarray_name_lookup.cc, valarray_operators.cc,
valarray_subset_assignment.cc: Move to...
* testsuite/26_numerics/valarray/: ... here (new dir).
* testsuite/26_numerics/sum_diff.cc: Move to...
* testsuite/26_numerics/numeric/: ... here (new dir).
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83489 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/testsuite/26_numerics/valarray')
8 files changed, 542 insertions, 0 deletions
diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc b/libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc new file mode 100644 index 00000000000..7dbcfbd5228 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/binary_closure.cc @@ -0,0 +1,37 @@ +// 19990805 gdr +// +// XXX: to impove later. +// Origin: Andreas Amann <amann@physik.tu-berlin.de> +// CXXFLAGS: -g + +#include <iostream> +#include <valarray> + + +int main() +{ + std::valarray<double> a(10), b(10), c(10), d(10); + + a = 1.2; + b = 3.1; + + c = 4.0; + + d = ( 2.0 * b + a ); // works + std::cout << "d[4] = " << d[4] << std::endl; + + d = (a * 2.0 + b ); // works + std::cout << "d[4] = " << d[4] << std::endl; + + d = (a + b * 2.0 ); // segfaults! + std::cout << "d[4] = " << d[4] << std::endl; + d = (a + 2.0* b ); + + std::cout << "d[4] = " << d[4] << std::endl; + d = (a + 2.0* b ); + std::cout << "d[4] = " << d[4] << std::endl; + d = (a + 2.0* b ); + + std::cout << "d[4] = " << d[4] << std::endl; + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/slice.cc b/libstdc++-v3/testsuite/26_numerics/valarray/slice.cc new file mode 100644 index 00000000000..a7278edfc90 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/slice.cc @@ -0,0 +1,64 @@ +// 20020717 gdr + +// Copyright (C) 2002, 2003 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. + +// Test slice class invariants + +#include <valarray> +#include <cstdlib> +#include <testsuite_hooks.h> + +bool +construction(std::size_t start, std::size_t size, std::size_t stride) +{ + std::slice s(start, size, stride); + return s.start() == start && s.size() == size && s.stride() == stride; +} + +bool +copy(std::size_t start, std::size_t size, std::size_t stride) +{ + std::slice s(start, size, stride); + std::slice t = s; + return t.start() == start && t.size() == size && t.stride() == stride; +} + +bool +assignment(std::size_t start, std::size_t size, std::size_t stride) +{ + std::slice s(start, size, stride); + std::slice t; + t = s; + return t.start() == start && t.size() == size && t.stride() == stride; +} + + +int main() +{ + bool test __attribute__((unused)) = true; + std::srand(20020717); + using std::rand; + VERIFY(construction(rand(), rand(), rand())); + + VERIFY(copy(rand(), rand(), rand())); + + VERIFY(assignment(rand(), rand(), rand())); + + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/slice_array_assignment.cc b/libstdc++-v3/testsuite/26_numerics/valarray/slice_array_assignment.cc new file mode 100644 index 00000000000..2d5af920735 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/slice_array_assignment.cc @@ -0,0 +1,51 @@ +// 20010613 gdr + +// Copyright (C) 2001, 2002, 2003 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + + +// This is DR-253. Test for accessible assignment-operators. +#include <valarray> +#include <testsuite_hooks.h> + +int main() +{ + bool test __attribute__((unused)) = true; + using std::valarray; + using std::slice; + valarray<int> v(1, 10), w(2, 10); + + w[slice(0, 3, 3)] = v[slice(2, 3, 3)]; + + VERIFY(v[0] == 1 && w[0] == 1); + VERIFY(v[3] == 1 && w[3] == 1); + VERIFY(v[6] == 1 && w[6] == 1); + + std::slice_array<int> t = v[slice(0, 10, 1)]; + + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/valarray.cc b/libstdc++-v3/testsuite/26_numerics/valarray/valarray.cc new file mode 100644 index 00000000000..37c9e0286e4 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/valarray.cc @@ -0,0 +1,43 @@ +// 19990404 gdr + +// 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 +// 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#include <valarray> + +int main() +{ + // 01: instantiation + std::valarray<double> a(20); + + // 02: algo + using std::valarray; + valarray<double> b, c; + double m __attribute__((unused)) = std::abs(b - c).max(); + + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/valarray_const_bracket.cc b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_const_bracket.cc new file mode 100644 index 00000000000..53819f43ad1 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_const_bracket.cc @@ -0,0 +1,48 @@ +// 20010518 gdr + +// Copyright (C) 2001 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +#include <valarray> + +// dg-do compile + +template<typename P> + void copy(P, std::size_t) { } + +template<typename T> + void test(const std::valarray<T>& v) + { + copy(&v[0], v.size()); + } + +int main() +{ + std::valarray<double> v(190); + test(v); + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/valarray_name_lookup.cc b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_name_lookup.cc new file mode 100644 index 00000000000..a0bd21e791e --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_name_lookup.cc @@ -0,0 +1,142 @@ +// 2002-08-02 gdr + +// Copyright (C) 2002, 2003 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// Test name lookup resolutions for standard functions applied to an +// array expression. +// { dg-do compile } + +#include <valarray> + +namespace My +{ + struct Number + { + operator bool() const; + }; + + Number operator+(Number); + Number operator-(Number); + Number operator~(Number); + + bool operator!(Number); + + Number operator+(Number, Number); + Number operator-(Number, Number); + Number operator*(Number, Number); + Number operator/(Number, Number); + Number operator%(Number, Number); + + Number operator^(Number, Number); + Number operator&(Number, Number); + Number operator|(Number, Number); + + Number operator<<(Number, Number); + Number operator>>(Number, Number); + + bool operator==(Number, Number); + bool operator!=(Number, Number); + bool operator<(Number, Number); + bool operator<=(Number, Number); + bool operator>(Number, Number); + bool operator>=(Number, Number); + + Number abs(Number); + + Number cos(Number); + Number cosh(Number); + Number acos(Number); + + Number sin(Number); + Number sinh(Number); + Number asin(Number); + + Number tan(Number); + Number tanh(Number); + Number atan(Number); + + Number exp(Number); + Number log(Number); + Number log10(Number); + Number sqrt(Number); + + Number atan2(Number, Number); + Number pow(Number, Number); +} + +int main() +{ + typedef std::valarray<My::Number> Array; + Array u(10), v(10); + v = +u; + v = -u; + v = ~u; + std::valarray<bool> z = !u; + + v = abs(u); + + v = cos(u); + v = cosh(u); + v = acos(u); + + v = sin(u); + v = sinh(u); + v = asin(u); + + v = tan(u); + v = tanh(u); + v = atan(u); + + v = exp(u); + v = log(u); + v = log10(u); + v = sqrt(u); + + Array w = u + v; + w = u - v; + w = u * v; + w = u / v; + w = u % v; + + w = u ^ v; + w = u & v; + w = u | v; + + w = u << v; + w = u >> v; + + z = u == v; + z = u != v; + z = u < v; + z = u <= v; + z = u > v; + z = u >= v; + + w = atan2(u, v); + w = pow(u, v); +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/valarray_operators.cc b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_operators.cc new file mode 100644 index 00000000000..16479a51241 --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_operators.cc @@ -0,0 +1,69 @@ +// { dg-do run } +// 2003-02-03 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + +// Copyright (C) 2003 Free Software Foundation +// +// 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 <valarray> +#include <testsuite_hooks.h> + +void test01() // check unary operators +{ + bool test __attribute__((unused)) = true; + std::valarray<int> u(1); + u[0]=1; + + VERIFY( (+u)[0] == +1 ); + VERIFY( (-u)[0] == -1 ); + VERIFY( (!u)[0] == !1 ); + VERIFY( (~u)[0] == ~1 ); +} + +void test02() // check binary operators +{ + bool test __attribute__((unused)) = true; + std::valarray<int> u(1), v(1); + u[0]=1; + v[0]=3; + + VERIFY( (u+ v)[0] == (1+ 3) ); + VERIFY( (u- v)[0] == (1- 3) ); + VERIFY( (u* v)[0] == (1* 3) ); + VERIFY( (u/ v)[0] == (1/ 3) ); + VERIFY( (u% v)[0] == (1% 3) ); + VERIFY( (u^ v)[0] == (1^ 3) ); + VERIFY( (u& v)[0] == (1& 3) ); + VERIFY( (u| v)[0] == (1| 3) ); + VERIFY( (u<<v)[0] == (1<<3) ); + VERIFY( (u>>v)[0] == (1>>3) ); + VERIFY( (u&&v)[0] == (1&&3) ); + VERIFY( (u||v)[0] == (1||3) ); + VERIFY( (u==v)[0] == (1==3) ); + VERIFY( (u!=v)[0] == (1!=3) ); + VERIFY( (u< v)[0] == (1< 3) ); + VERIFY( (u> v)[0] == (1> 3) ); + VERIFY( (u<=v)[0] == (1<=3) ); + VERIFY( (u>=v)[0] == (1>=3) ); +} + +int main() +{ + test01(); + test02(); + return 0; +} diff --git a/libstdc++-v3/testsuite/26_numerics/valarray/valarray_subset_assignment.cc b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_subset_assignment.cc new file mode 100644 index 00000000000..9298bfb046f --- /dev/null +++ b/libstdc++-v3/testsuite/26_numerics/valarray/valarray_subset_assignment.cc @@ -0,0 +1,88 @@ +// 2004-01-03 Jerry Quinn <jlquinn@optonline.net> + +// Copyright (C) 2004 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. + +// As a special exception, you may use this file as part of a free software +// library without restriction. Specifically, if other files instantiate +// templates or use macros or inline functions from this file, or you compile +// this file and link it with other files to produce an executable, this +// file does not by itself cause the resulting executable to be covered by +// the GNU General Public License. This exception does not however +// invalidate any other reasons why the executable file might be covered by +// the GNU General Public License. + +// PR 3247 + +// This is DR-253. Test for accessible assignment-operators. +#include <valarray> +#include <testsuite_hooks.h> + +bool check_array(std::valarray<double>& a, double b[]) +{ + for (int i=0; i < a.size(); i++) + if (a[i] != b[i]) return false; + return true; +} + +int main() +{ + double dvar = 1.0; + std::valarray<double> val_d(10); // 0 1 2 3 4 5 6 7 8 9 + std::valarray<double> val_d1(10); // 10 9 8 7 6 5 4 3 2 1 + + for (int i=0; i< 10; i++) { val_d[i] = 10; val_d1[i] = i; } + std::valarray<double> val_c(val_d); + std::valarray<double> val_f(val_d); + std::valarray<double> val_g(val_d); + + std::slice slc(1, 3, 3); // 1 4 7 + val_d[slc] = val_d1[slc]; + + double ans1[10] = {10, 1, 10, 10, 4, 10, 10, 7, 10, 10}; + VERIFY(check_array(val_d, ans1)); + + std::valarray<std::size_t> val_size(2); + std::valarray<std::size_t> val_stride(2); + val_size[0] = 2; val_size[1] = 3; + val_stride[0] = 4; val_stride[1] = 1; + + std::gslice gslc(1, val_size, val_stride); + val_c[gslc] = val_d1[gslc]; + + double ans2[10] = {10, 1, 2, 3, 10, 5, 6, 7, 10, 10}; + VERIFY(check_array(val_c, ans2)); + + std::valarray<bool> val_b(false, 10); + val_b[2] = val_b[6] = val_b[9] = true; + val_f[val_b] = val_d1[val_b]; + + double ans3[10] = {10, 10, 2, 10, 10, 10, 6, 10, 10, 9}; + VERIFY(check_array(val_f, ans3)); + + size_t addr[] = {1, 2, 3, 4, 5}; + size_t addr1[] = {2, 7, 1, 9, 4}; + std::valarray<std::size_t> val_indirect(addr, 5); + std::valarray<std::size_t> val_indirect1(addr1, 5); + val_g[val_indirect] = val_d1[val_indirect1]; + + double ans4[10] = {10, 2, 7, 1, 9, 4, 10, 10, 10, 10}; + VERIFY(check_array(val_g, ans4)); + + return 0; +}; |