Add simd_fast_mersenne_twister_engine class.
[gcc.git] / libstdc++-v3 / testsuite / 26_numerics / random / simd_fast_mersenne_twister_engine / operators / serialize.cc
1 // { dg-options "-std=c++0x" }
2 // { dg-require-cstdint "" }
3 //
4 // 2008-11-24 Edward M. Smith-Rowland <3dw4rd@verizon.net>
5 // 2012-08-28 Ulrich Drepper <drepper@gmail.com>, adapted for SFMT
6 //
7 // Copyright (C) 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
8 //
9 // This file is part of the GNU ISO C++ Library. This library is free
10 // software; you can redistribute it and/or modify it under the
11 // terms of the GNU General Public License as published by the
12 // Free Software Foundation; either version 3, or (at your option)
13 // any later version.
14 //
15 // This library is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU General Public License for more details.
19 //
20 // You should have received a copy of the GNU General Public License along
21 // with this library; see the file COPYING3. If not see
22 // <http://www.gnu.org/licenses/>.
23
24 // 26.4.3.2 Class template mersenne_twister_engine [rand.eng.mers]
25 // 26.4.2.2 Concept RandomNumberEngine [rand.concept.eng]
26
27 #include <sstream>
28 #include <ext/random>
29 #include <testsuite_hooks.h>
30
31 void
32 test01()
33 {
34 bool test __attribute__((unused)) = true;
35
36 std::stringstream str;
37 __gnu_cxx::sfmt19937 u, v;
38
39 u(); // advance
40 str << u;
41
42 VERIFY( !(u == v) );
43
44 str >> v;
45 VERIFY( u == v );
46 for (unsigned i = 0; i < 1000; ++i)
47 VERIFY( u() == v() );
48
49 str.clear();
50 str << v;
51
52 u();
53 u();
54 u();
55
56 str >> u;
57 VERIFY( u == v );
58 for (unsigned i = 0; i < 1000; ++i)
59 VERIFY( u() == v() );
60 }
61
62 int main()
63 {
64 test01();
65 return 0;
66 }