]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/26_numerics/random/simd_fast_mersenne_twister_engine/cons/default.cc
5b6489a4028ebfaa159f718b2de7a3806e0aa32b
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 26_numerics / random / simd_fast_mersenne_twister_engine / cons / default.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, 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 #include <iostream>
25 #include <ext/random>
26 #include <testsuite_hooks.h>
27
28
29 template<class SFMT>
30 void run_test(std::initializer_list<typename SFMT::result_type> vals)
31 {
32 typedef typename SFMT::result_type result_type;
33 SFMT e;
34
35 e.seed(sizeof(result_type) == 4 ? 1234 : 4321);
36 e.discard(990);
37 bool success = true;
38 for (auto i : vals)
39 {
40 result_type r = e();
41 success &= r == i;
42 std::cout << r << " vs " << i << std::endl;
43 }
44 VERIFY( success );
45 }
46
47
48 void
49 test01()
50 {
51 bool test __attribute__((unused)) = true;
52
53 __gnu_cxx::sfmt19937 e;
54
55 VERIFY( e.min() == 0 );
56 VERIFY( e.max() == std::numeric_limits<uint32_t>::max() );
57
58 run_test<__gnu_cxx::sfmt607>({ UINT32_C(1318548553), UINT32_C(1985957974),
59 UINT32_C(1367744196), UINT32_C(3463392791), UINT32_C(2780736231),
60 UINT32_C(3894488561), UINT32_C(3157036262), UINT32_C(3491812767),
61 UINT32_C(1724574180), UINT32_C(3645035493) });
62
63 run_test<__gnu_cxx::sfmt607_64>({UINT64_C(15510024334182072935),
64 UINT64_C(5793753331747412752), UINT64_C(16198353238554625740),
65 UINT64_C(2233208824926016498), UINT64_C(3566091399820823780),
66 UINT64_C(16608268514591292798), UINT64_C(10684941689666043359),
67 UINT64_C(12463424292910456802), UINT64_C(5902567440240131366),
68 UINT64_C(7228030834036501150) });
69
70 run_test<__gnu_cxx::sfmt1279>({ UINT32_C(66657331), UINT32_C(637106837),
71 UINT32_C(406927341), UINT32_C(3964420203), UINT32_C(2127134160),
72 UINT32_C(1327235047), UINT32_C(227339400), UINT32_C(97109542),
73 UINT32_C(1814799261), UINT32_C(340888197) });
74
75 run_test<__gnu_cxx::sfmt1279_64>({ UINT64_C(16431921382083697129),
76 UINT64_C(3107599092104940900), UINT64_C(4055245506102959965),
77 UINT64_C(16096064917153424198), UINT64_C(14429331498726837109),
78 UINT64_C(9539664361920633782), UINT64_C(1435296568185387099),
79 UINT64_C(15922567183295047131), UINT64_C(641988285517426228),
80 UINT64_C(15936274870984512675) });
81
82 run_test<__gnu_cxx::sfmt2281>({ UINT32_C(2662391944), UINT32_C(1176696104),
83 UINT32_C(3587947451), UINT32_C(4098993357), UINT32_C(3140998698),
84 UINT32_C(870759742), UINT32_C(623529127), UINT32_C(3458807285),
85 UINT32_C(3341615957), UINT32_C(195614711) });
86
87 run_test<__gnu_cxx::sfmt2281_64>({ UINT64_C(16747191622237074632),
88 UINT64_C(15804170396401370381), UINT64_C(3395175278324920203),
89 UINT64_C(1541877340159274442), UINT64_C(14176322102994316687),
90 UINT64_C(5130618305074712143), UINT64_C(6769693652413407081),
91 UINT64_C(17733765687477661079), UINT64_C(5189766940360047353),
92 UINT64_C(1333654688569723389) });
93
94 run_test<__gnu_cxx::sfmt4253>({ UINT32_C(90342133), UINT32_C(1083987943),
95 UINT32_C(1785481425), UINT32_C(1921212667), UINT32_C(3164342992),
96 UINT32_C(1489324569), UINT32_C(603530523), UINT32_C(952851722),
97 UINT32_C(2380944844), UINT32_C(3335854133) });
98
99 run_test<__gnu_cxx::sfmt4253_64>({ UINT64_C(11570915401962514263),
100 UINT64_C(206693220452528225), UINT64_C(16553299974633247759),
101 UINT64_C(1069562842508952901), UINT64_C(7203975672387749585),
102 UINT64_C(7552781925224963166), UINT64_C(16865729458807008705),
103 UINT64_C(7848963629493506078), UINT64_C(9282397173969292817),
104 UINT64_C(10738488504584559289) });
105
106 run_test<__gnu_cxx::sfmt11213>({ UINT32_C(2072997009), UINT32_C(1332330347),
107 UINT32_C(179681555), UINT32_C(2315290438), UINT32_C(2429393974),
108 UINT32_C(509881964), UINT32_C(3807607878), UINT32_C(3055319970),
109 UINT32_C(671840881), UINT32_C(3477325874) });
110
111 run_test<__gnu_cxx::sfmt11213_64>({ UINT64_C(373867573626408653),
112 UINT64_C(4732829340233638861), UINT64_C(16174630176505735656),
113 UINT64_C(10063018133994900869), UINT64_C(17308645173308419196),
114 UINT64_C(11091353816581371951), UINT64_C(15078420471318089727),
115 UINT64_C(17965717592743818706), UINT64_C(12301543162252389155),
116 UINT64_C(1724943167823308511) });
117
118 run_test<__gnu_cxx::sfmt19937>({ UINT32_C(4002809368), UINT32_C(421169044),
119 UINT32_C(1112642589), UINT32_C(3076213779), UINT32_C(3387033971),
120 UINT32_C(2499610950), UINT32_C(3057240914), UINT32_C(1662679783),
121 UINT32_C(461224431), UINT32_C(1168395933) });
122
123 run_test<__gnu_cxx::sfmt19937_64>({ UINT64_C(8032857516355555296),
124 UINT64_C(14023605983059313116), UINT64_C(1032336061815461376),
125 UINT64_C(9840995337876562612), UINT64_C(9869256223029203587),
126 UINT64_C(12227975697177267636), UINT64_C(12728115115844186033),
127 UINT64_C(7752058479783205470), UINT64_C(729733219713393087),
128 UINT64_C(12954017801239007622) });
129
130 run_test<__gnu_cxx::sfmt44497>({ UINT32_C(1483092082), UINT32_C(1895679637),
131 UINT32_C(9122740), UINT32_C(635864575), UINT32_C(320732971),
132 UINT32_C(4253159584), UINT32_C(30097521), UINT32_C(839233316),
133 UINT32_C(1431693534), UINT32_C(645981752) });
134
135 run_test<__gnu_cxx::sfmt44497_64>({ UINT64_C(6246103978016445638),
136 UINT64_C(4198275826138953222), UINT64_C(12473679170573289212),
137 UINT64_C(14745709982748360209), UINT64_C(3630790792408208113),
138 UINT64_C(4195294399578350499), UINT64_C(3742595698794327253),
139 UINT64_C(17388385867517445933), UINT64_C(4261866397667814669),
140 UINT64_C(17394085161690598095) });
141
142 run_test<__gnu_cxx::sfmt86243>({ UINT32_C(3910985535), UINT32_C(100094501),
143 UINT32_C(3120362616), UINT32_C(1854432382), UINT32_C(314688154),
144 UINT32_C(522122712), UINT32_C(3026095676), UINT32_C(3681962735),
145 UINT32_C(1851548627), UINT32_C(2153846465) });
146
147 run_test<__gnu_cxx::sfmt86243_64>({ UINT64_C(250135615696586029),
148 UINT64_C(4836277875486422184), UINT64_C(12389320296183057446),
149 UINT64_C(7983028875884559442), UINT64_C(10079555227308335361),
150 UINT64_C(14829333386540244214), UINT64_C(12159744972103351172),
151 UINT64_C(4932579842314286356), UINT64_C(5200375244476537050),
152 UINT64_C(11795681221121010641) });
153
154 run_test<__gnu_cxx::sfmt132049>({ UINT32_C(1551023420), UINT32_C(1462317554),
155 UINT32_C(2882528449), UINT32_C(1136299843), UINT32_C(292840589),
156 UINT32_C(1307775247), UINT32_C(463274356), UINT32_C(1430357686),
157 UINT32_C(3907607055), UINT32_C(3462509184) });
158
159 run_test<__gnu_cxx::sfmt132049_64>({ UINT64_C(649482638765113922),
160 UINT64_C(14205859353699897918), UINT64_C(14077261854908137257),
161 UINT64_C(9564785861212212042), UINT64_C(7310747921257808846),
162 UINT64_C(13759009477111470372), UINT64_C(11942123860149328831),
163 UINT64_C(12868386070200572127), UINT64_C(18348617059674004332),
164 UINT64_C(4233208019331956061) });
165
166 run_test<__gnu_cxx::sfmt216091>({ UINT32_C(4171954654), UINT32_C(2938491210),
167 UINT32_C(1356393891), UINT32_C(3558249995), UINT32_C(3711769979),
168 UINT32_C(3434953144), UINT32_C(1601628304), UINT32_C(2187495640),
169 UINT32_C(1762169715), UINT32_C(2141213778) });
170
171 run_test<__gnu_cxx::sfmt216091_64>({ UINT64_C(11322404276387828766),
172 UINT64_C(9653391575000195546), UINT64_C(1767839622905368464),
173 UINT64_C(1690838241348740821), UINT64_C(817628268513271254),
174 UINT64_C(15111277786569319196), UINT64_C(15817118810543358764),
175 UINT64_C(5639001693408668083), UINT64_C(9959854003669400568),
176 UINT64_C(13675983279642398887) });
177 }
178
179 int main()
180 {
181 test01();
182 return 0;
183 }