xref: /llvm-project/libcxx/test/std/numerics/rand/rand.dist/rand.dist.samp/rand.dist.samp.pconst/io.pass.cpp (revision fb855eb941b6d740cc6560297d0b4d3201dcaf9f)
1eb1c5037SNikolas Klauser //===----------------------------------------------------------------------===//
2eb1c5037SNikolas Klauser //
3eb1c5037SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4eb1c5037SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
5eb1c5037SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6eb1c5037SNikolas Klauser //
7eb1c5037SNikolas Klauser //===----------------------------------------------------------------------===//
8eb1c5037SNikolas Klauser 
9a7f9895cSLouis Dionne // UNSUPPORTED: no-localization
10eb1c5037SNikolas Klauser 
11eb1c5037SNikolas Klauser // <random>
12eb1c5037SNikolas Klauser 
13eb1c5037SNikolas Klauser // template<class RealType = double>
14eb1c5037SNikolas Klauser // class piecewise_constant_distribution
15eb1c5037SNikolas Klauser 
16eb1c5037SNikolas Klauser // template <class charT, class traits>
17eb1c5037SNikolas Klauser // basic_ostream<charT, traits>&
18eb1c5037SNikolas Klauser // operator<<(basic_ostream<charT, traits>& os,
19eb1c5037SNikolas Klauser //            const piecewise_constant_distribution& x);
20eb1c5037SNikolas Klauser //
21eb1c5037SNikolas Klauser // template <class charT, class traits>
22eb1c5037SNikolas Klauser // basic_istream<charT, traits>&
23eb1c5037SNikolas Klauser // operator>>(basic_istream<charT, traits>& is,
24eb1c5037SNikolas Klauser //            piecewise_constant_distribution& x);
25eb1c5037SNikolas Klauser 
26eb1c5037SNikolas Klauser #include <random>
27eb1c5037SNikolas Klauser #include <sstream>
28eb1c5037SNikolas Klauser #include <cassert>
29eb1c5037SNikolas Klauser 
30eb1c5037SNikolas Klauser #include "test_macros.h"
31eb1c5037SNikolas Klauser 
main(int,char **)32eb1c5037SNikolas Klauser int main(int, char**)
33eb1c5037SNikolas Klauser {
34eb1c5037SNikolas Klauser     {
35eb1c5037SNikolas Klauser         typedef std::piecewise_constant_distribution<> D;
36eb1c5037SNikolas Klauser         double b[] = {10, 14, 16, 17};
37eb1c5037SNikolas Klauser         double p[] = {25, 62.5, 12.5};
38*fb855eb9SMark de Wever         const std::size_t Np = sizeof(p) / sizeof(p[0]);
39eb1c5037SNikolas Klauser         D d1(b, b+Np+1, p);
40eb1c5037SNikolas Klauser         std::ostringstream os;
41eb1c5037SNikolas Klauser         os << d1;
42eb1c5037SNikolas Klauser         std::istringstream is(os.str());
43eb1c5037SNikolas Klauser         D d2;
44eb1c5037SNikolas Klauser         is >> d2;
45eb1c5037SNikolas Klauser         assert(d1 == d2);
46eb1c5037SNikolas Klauser     }
47eb1c5037SNikolas Klauser 
48eb1c5037SNikolas Klauser   return 0;
49eb1c5037SNikolas Klauser }
50