1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant//                     The LLVM Compiler Infrastructure
4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//
8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===//
9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// <valarray>
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template<class T> class valarray;
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template<class T>
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//   valarray<T>
16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//   sinh(const valarray<T>& x);
17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <valarray>
19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cassert>
20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <sstream>
21a9bcd3dae859f02ab496d175d50840f43a2d4ed2Stephan T. Lavavej#include <cstddef>
22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool is_about(double x, double y, int p)
24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::ostringstream o;
26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    o.precision(p);
27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    scientific(o);
28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    o << x;
29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    std::string a = o.str();
30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    o.str("");
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    o << y;
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    return a == o.str();
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint main()
36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    {
38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        typedef double T;
39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        T a1[] = {-.9, -.5, 0., .5, .75};
40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        T a3[] = {-1.0265167257081753e+00,
41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                  -5.2109530549374738e-01,
42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                   0.0000000000000000e+00,
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                   5.2109530549374738e-01,
44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant                   8.2231673193582999e-01};
45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        const unsigned N = sizeof(a1)/sizeof(a1[0]);
46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::valarray<T> v1(a1, N);
47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        std::valarray<T> v3 = sinh(v1);
48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant        assert(v3.size() == v1.size());
49a9bcd3dae859f02ab496d175d50840f43a2d4ed2Stephan T. Lavavej        for (std::size_t i = 0; i < v3.size(); ++i)
50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant            assert(is_about(v3[i], a3[i], 10));
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant    }
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
53