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