// // This source file is part of appleseed. // Visit https://appleseedhq.net/ for additional information and resources. // // This software is released under the MIT license. // // Copyright (c) 2010-2013 Francois Beaune, Jupiter Jazz Limited // Copyright (c) 2014-2018 Francois Beaune, The appleseedhq Organization // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // // appleseed.foundation headers. #include "foundation/math/rng/distribution.h" #include "foundation/math/rng/pcg.h" #include "foundation/math/rng/serialmersennetwister.h" #ifdef APPLESEED_USE_SSE #include "foundation/math/rng/simdmersennetwister.h" #endif #include "foundation/platform/types.h" #include "foundation/utility/countof.h" #include "foundation/utility/test.h" // Standard headers. #include #include using namespace foundation; using namespace std; TEST_SUITE(Foundation_Math_RNG) { struct FakeRNG { const uint32 m_value; explicit FakeRNG(const uint32 value) : m_value(value) { } uint32 rand_uint32() const { return m_value; } }; // // rand_float31() // TEST_CASE(RandInt31_Given0x00000000_ReturnsZero) { FakeRNG rng(0x00000000); const int32 value = rand_int31(rng); EXPECT_EQ(0, value); } TEST_CASE(RandInt31_Given0xFFFFFFFF_ReturnsZero) { FakeRNG rng(0xFFFFFFFF); const int32 value = rand_int31(rng); EXPECT_EQ(0x7FFFFFFF, value); } // // rand_int1() // TEST_CASE(RandInt1_Given0x00000000_ReturnsLowBound) { FakeRNG rng(0x00000000); const int32 value = rand_int1(rng, -12, 42); EXPECT_EQ(-12, value); } TEST_CASE(RandInt1_Given0xFFFFFFFF_ReturnsHighBound) { FakeRNG rng(0xFFFFFFFF); const int32 value = rand_int1(rng, -12, 42); EXPECT_EQ(42, value); } // // rand_float1() // TEST_CASE(RandFloat1_Given0x00000000_ReturnsZero) { FakeRNG rng(0x00000000); const float value = rand_float1(rng); EXPECT_EQ(0.0f, value); } TEST_CASE(RandFloat1_Given0xFFFFFFFF_ReturnsOne) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float1(rng); EXPECT_EQ(1.0f, value); } TEST_CASE(RandFloat1_Given0x00000000_ReturnsLowBound) { FakeRNG rng(0x00000000); const float value = rand_float1(rng, -12.0f, 42.0f); EXPECT_EQ(-12.0f, value); } TEST_CASE(RandFloat1_Given0xFFFFFFFF_ReturnsHighBound) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float1(rng, -12.0f, 42.0f); EXPECT_EQ(42.0f, value); } // // rand_double1() // TEST_CASE(RandDouble1_Given0x00000000_ReturnsZero) { FakeRNG rng(0x00000000); const double value = rand_double1(rng); EXPECT_EQ(0.0, value); } TEST_CASE(RandDouble1_Given0xFFFFFFFF_ReturnsOne) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double1(rng); EXPECT_EQ(1.0, value); } TEST_CASE(RandDouble1_Given0x00000000_ReturnsLowBound) { FakeRNG rng(0x00000000); const double value = rand_double1(rng, -12.0, 42.0); EXPECT_EQ(-12.0, value); } TEST_CASE(RandDouble1_Given0xFFFFFFFF_ReturnsHighBound) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double1(rng, -12.0, 42.0); EXPECT_EQ(42.0, value); } // // rand_float2() // TEST_CASE(RandFloat2_Given0x00000000_ReturnsZero) { FakeRNG rng(0x00000000); const float value = rand_float2(rng); EXPECT_EQ(0.0f, value); } TEST_CASE(RandFloat2_Given0xFFFFFFFF_ReturnsAlmostOne) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float2(rng); EXPECT_LT(1.0f, value); } TEST_CASE(RandFloat2_Given0x00000000_ReturnsLowBound) { FakeRNG rng(0x00000000); const float value = rand_float2(rng, -12.0f, 42.0f); EXPECT_EQ(-12.0f, value); } TEST_CASE(RandFloat2_Given0xFFFFFFFF_ReturnsAlmostHighBound) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float2(rng, -12.0f, 42.0f); EXPECT_LT(42.0f, value); } // // rand_double2() // TEST_CASE(RandDouble2_Given0x00000000_ReturnsZero) { FakeRNG rng(0x00000000); const double value = rand_double2(rng); EXPECT_EQ(0.0, value); } TEST_CASE(RandDouble2_Given0xFFFFFFFF_ReturnsAlmostOne) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double2(rng); EXPECT_LT(1.0, value); } TEST_CASE(RandDouble2_Given0x00000000_ReturnsLowBound) { FakeRNG rng(0x00000000); const double value = rand_double2(rng, -12.0, 42.0); EXPECT_EQ(-12.0, value); } TEST_CASE(RandDouble2_Given0xFFFFFFFF_ReturnsAlmostHighBound) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double2(rng, -12.0, 42.0); EXPECT_LT(42.0, value); } // // rand_float3() // TEST_CASE(RandFloat3_Given0x00000000_ReturnsAlmostZero) { FakeRNG rng(0x00000000); const float value = rand_float3(rng); EXPECT_EQ(numeric_limits::epsilon(), value); } TEST_CASE(RandFloat3_Given0xFFFFFFFF_ReturnsAlmostOne) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float3(rng); EXPECT_LT(1.0f, value); } TEST_CASE(RandFloat3_Given0x00000000_ReturnsAlmostLowBound) { FakeRNG rng(0x00000000); const float value = rand_float3(rng, -12.0f, 42.0f); EXPECT_GT(-12.0f, value); } TEST_CASE(RandFloat3_Given0xFFFFFFFF_ReturnsAlmostHighBound) { FakeRNG rng(0xFFFFFFFF); const float value = rand_float3(rng, -12.0f, 42.0f); EXPECT_LT(42.0f, value); } // // rand_double3() // TEST_CASE(RandDouble3_Given0x00000000_ReturnsAlmostZero) { FakeRNG rng(0x00000000); const double value = rand_double3(rng); EXPECT_EQ(numeric_limits::epsilon(), value); } TEST_CASE(RandDouble3_Given0xFFFFFFFF_ReturnsAlmostOne) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double3(rng); EXPECT_LT(1.0, value); } TEST_CASE(RandDouble3_Given0x00000000_ReturnsAlmostLowBound) { FakeRNG rng(0x00000000); const double value = rand_double3(rng, -12.0, 42.0); EXPECT_GT(-12.0, value); } TEST_CASE(RandDouble3_Given0xFFFFFFFF_ReturnsAlmostHighBound) { FakeRNG rng(0xFFFFFFFF); const double value = rand_double3(rng, -12.0, 42.0); EXPECT_LT(42.0, value); } } TEST_SUITE(Foundation_Math_RNG_PCG) { TEST_CASE(CheckFirstValues) { static const uint32 Expected[1000] = { 465482994u, 3895364073u, 1746730475u, 3759121132u, 2984354868u, 3193308813u, 719162516u, 2669372405u, 952099657u, 3848281661u, 1722616740u, 1703410327u, 1489898431u, 2808816474u, 3394935963u, 3800733979u, 2645780359u, 54025654u, 1620520937u, 261133231u, 1030578764u, 807022259u, 1409000050u, 1194629604u, 3777309333u, 1570294272u, 2649937232u, 857373089u, 3598020669u, 1775738823u, 3466178238u, 3827724402u, 3892889888u, 1220604704u, 2032491117u, 1023053890u, 1431308669u, 1548609434u, 2152671001u, 1671576757u, 2157114852u, 3164731816u, 3064050002u, 3933235971u, 3685010053u, 244697458u, 1057877727u, 3913827785u, 4040586935u, 2952457164u, 1755638421u, 318176490u, 141439085u, 278066646u, 6216125u, 4112216801u, 2153261903u, 3492890592u, 1475026070u, 2855248709u, 3560663111u, 969631411u, 3597755749u, 1322751635u, 789892014u, 4121396030u, 733563246u, 1824419711u, 3970343011u, 4009937121u, 2637784390u, 32991992u, 3020205058u, 1006006050u, 3127840334u, 4188188064u, 4009056852u, 1465278880u, 3249233677u, 3753806003u, 664373599u, 1508096799u, 3394681943u, 62071327u, 915232454u, 1625211000u, 2684613559u, 2922282686u, 4288936899u, 1423863364u, 134946067u, 3289865634u, 3155765718u, 3091845294u, 3822057133u, 1131131786u, 4248055303u, 1322921553u, 1176461978u, 3293688225u, 3787014237u, 2765630495u, 1433364517u, 3592567205u, 3283449589u, 109306324u, 656271382u, 3582449353u, 4161900925u, 185344389u, 1769123328u, 3346114032u, 3122320552u, 4004922408u, 1808396717u, 3272400844u, 1961384329u, 1444279534u, 709737294u, 2786215081u, 4098000533u, 629269910u, 4155652252u, 2656899968u, 881889592u, 3063710254u, 3323945442u, 2741690169u, 2297777418u, 4108736600u, 3943244610u, 1147605934u, 1468227652u, 4022701806u, 1151190667u, 972758586u, 1054835633u, 3707114440u, 1907540675u, 324914788u, 136492079u, 1705660957u, 2427770070u, 3320260920u, 3436422337u, 2279229591u, 3745952773u, 1807062016u, 225624947u, 35839144u, 897450126u, 2105937723u, 2744800013u, 1344862690u, 3403500186u, 4234886781u, 2658206965u, 1330997185u, 1824411582u, 3983431514u, 761882792u, 3710709211u, 1813117973u, 3212297677u, 487384258u, 2769630333u, 3682106941u, 2452362071u, 340332599u, 3811708210u, 4206963802u, 1765960700u, 207478359u, 1260718904u, 4024503564u, 2206499484u, 1566084957u, 3810787984u, 4045246547u, 1480492094u, 2944768776u, 361929548u, 169936580u, 378736854u, 2242206212u, 2441305762u, 2980803926u, 15346626u, 1963614569u, 2826471979u, 2651250669u, 2274522419u, 3468838334u, 1610833910u, 688143972u, 2293884033u, 4194680318u, 1169533019u, 3046836575u, 2845509538u, 823063969u, 2076652351u, 1722229730u, 3076908003u, 2319117894u, 835368201u, 406233054u, 4057401169u, 2270372618u, 3917055080u, 1460755795u, 242522141u, 94961104u, 3179588930u, 1263719626u, 27593365u, 3160785324u, 1801678587u, 1082312349u, 3140015414u, 3012359102u, 1541796750u, 491812712u, 1639334942u, 287594015u, 2561866516u, 3426519515u, 2055710930u, 85266343u, 2927118831u, 1007103242u, 455390501u, 2044299186u, 1218549315u, 3936522396u, 620543335u, 4127124522u, 3135565957u, 1162143357u, 405145806u, 675370757u, 3896852661u, 157894814u, 1704790987u, 3749626014u, 3519620942u, 3673387278u, 109600806u, 4230191316u, 3534396608u, 4101197030u, 3558881806u, 3857954642u, 2934155368u, 1012750537u, 514464335u, 3231749283u, 2224884628u, 2124276068u, 1692532105u, 2362044988u, 2770212179u, 2528157601u, 1871752329u, 1040103142u, 921873856u, 3089955944u, 1619538362u, 3187911481u, 4261785566u, 4166980944u, 3536638714u, 2461152277u, 1632778664u, 770986155u, 4116686745u, 319400687u, 3798220876u, 3866317149u, 1346665939u, 2966603107u, 1687366206u, 2880701602u, 19312777u, 3672408015u, 3448917902u, 3542853962u, 1294299952u, 2545503747u, 3265271752u, 1872634441u, 3641405213u, 1282087244u, 393803443u, 3131983704u, 4235508104u, 2420149709u, 3241080269u, 1024941664u, 3897951431u, 3548023647u, 1855080529u, 3104816674u, 2649935374u, 564606414u, 2162697020u, 3697205864u, 4245419098u, 3316305136u, 686505901u, 716199242u, 2658887046u, 1840279374u, 3176513445u, 2827929902u, 4278579186u, 1610895615u, 1304868922u, 1605797922u, 1274808765u, 1458924666u, 4194557538u, 830890550u, 3555200470u, 4120209723u, 1378923252u, 3990108779u, 4000921909u, 1273260362u, 639215459u, 1551239150u, 498502528u, 3449454753u, 3657050436u, 3480834160u, 1226782798u, 4225298341u, 4205157369u, 733984732u, 1455010350u, 2792318597u, 4155647965u, 438108875u, 2879456526u, 2012042651u, 3734652999u, 4209825478u, 4225277434u, 3415267156u, 1580129051u, 3752110012u, 3533790893u, 1803153174u, 828152287u, 1474117358u, 256101288u, 3757978419u, 2776305617u, 1990418697u, 800663818u, 2790290134u, 2772921656u, 3059333829u, 1088967793u, 3086204801u, 344889773u, 220675221u, 1832222395u, 2651847300u, 1188093205u, 2482162678u, 2968175843u, 3993601096u, 3382918351u, 3435872864u, 1713943075u, 185520214u, 904130304u, 2156277605u, 2889862920u, 3264857306u, 3771715412u, 1768245395u, 4221013668u, 872636844u, 954019771u, 189417071u, 2096666402u, 353803945u, 3307302226u, 3406269772u, 3839409977u, 1519839804u, 3165110681u, 1220956337u, 1902108067u, 3657394395u, 805183825u, 3604333206u, 571692744u, 2673761298u, 2261563553u, 230382783u, 356025636u, 1820146399u, 134212230u, 3300287472u, 259268156u, 2968352124u, 3021994189u, 1224916309u, 1291216671u, 3001213195u, 3288470723u, 2746354006u, 1502434053u, 1055034431u, 3874403205u, 4244208493u, 520862961u, 51348858u, 676958606u, 1473033635u, 3388165397u, 1517361556u, 1825462694u, 316109372u, 4069103744u, 3070696905u, 65715771u, 3983605689u, 2924360096u, 1170124386u, 1450222948u, 20691102u, 1826512271u, 4008735827u, 2299258579u, 3548681686u, 1363998507u, 1951895778u, 2146832550u, 1816438814u, 2021234720u, 2962405652u, 342110737u, 647391137u, 3226139671u, 2408513992u, 732560501u, 696590447u, 4072620348u, 3065013001u, 952094047u, 394559597u, 1269779113u, 3185474057u, 4048567556u, 2484039105u, 1777541032u, 3866851064u, 2406122807u, 1516539538u, 1073471295u, 2786063658u, 89688024u, 677739817u, 1895047365u, 3597770376u, 728134790u, 4107741178u, 3034023269u, 2399538448u, 3391070040u, 2378581799u, 661872886u, 3319839853u, 2004303756u, 1172539869u, 3560129569u, 3598079215u, 1225584608u, 3303541072u, 762740397u, 130900830u, 1327299177u, 2275893453u, 3774271512u, 4085797628u, 3755723537u, 2486252554u, 72329892u, 3732893045u, 3165583721u, 729562343u, 313762021u, 2996786180u, 3494355648u, 2935020612u, 2410703511u, 1531022709u, 2604571214u, 1226502258u, 4136095834u, 3255219349u, 2860486741u, 3688367851u, 3989775160u, 858953727u, 3641777467u, 3549698342u, 1135218900u, 3202256767u, 337312587u, 3991884271u, 694582815u, 2551923159u, 1553729687u, 546250406u, 1951752819u, 1882094838u, 2036813231u, 2549760418u, 2573075839u, 2531696804u, 68044944u, 3665444721u, 3240941724u, 1630534563u, 1334014888u, 2704482861u, 3928686790u, 3369866204u, 986729554u, 1034478917u, 393391616u, 1951442357u, 3471529857u, 144768560u, 1344157423u, 786938876u, 1283190813u, 3927248310u, 251402307u, 104337042u, 544930794u, 2217267062u, 381987884u, 2594076005u, 2279833553u, 701826400u, 1311965289u, 1550005519u, 3364153542u, 3642781015u, 289358471u, 3172008619u, 958913485u, 2041175232u, 1905770175u, 972497295u, 3455023600u, 3329478837u, 397931201u, 1085663116u, 1687329263u, 4290267250u, 2020782527u, 2325611860u, 4242873789u, 166431405u, 1809941918u, 3863545693u, 684654678u, 3059190685u, 3208436780u, 3554042095u, 1153254596u, 2640150859u, 3197741756u, 3028944694u, 549767750u, 1782272849u, 1835840141u, 1180449948u, 3072163297u, 3758104312u, 964613542u, 3891113402u, 1697646599u, 3168911866u, 2820170424u, 3809415428u, 1942956328u, 1388394571u, 3628288751u, 805257098u, 3510090550u, 1049540951u, 1407344946u, 873816181u, 3817081998u, 1438820300u, 2344750697u, 2690407112u, 2531608377u, 1120902377u, 4202049126u, 3161964145u, 3299462121u, 3362451470u, 1189824564u, 3958710760u, 3734303124u, 3387546887u, 3613276700u, 3875598669u, 128023276u, 4245422123u, 4221105503u, 2018960709u, 2856792473u, 4229384364u, 2777208963u, 4069470800u, 3921081162u, 3395673425u, 3980316461u, 3223362011u, 2365296896u, 3736441138u, 2057088382u, 1600132689u, 3374787265u, 3678862805u, 1068992299u, 517843887u, 837323610u, 859617217u, 1221791314u, 3969753797u, 3799532205u, 106653029u, 970895481u, 1381363678u, 2300178826u, 758150813u, 3640290888u, 2313233378u, 3004982916u, 2399287351u, 426741654u, 2119962257u, 2045433685u, 3479319578u, 1157098845u, 1832569724u, 3238341637u, 3244682063u, 311114365u, 3807196971u, 2949091294u, 171208131u, 4045114636u, 2199577423u, 3803939771u, 4247235617u, 2994251157u, 4181075830u, 1471125670u, 3542471468u, 1287379416u, 1594301128u, 668571501u, 2053765498u, 3215020519u, 2474077257u, 692086859u, 3061837168u, 1312128685u, 1645287161u, 809331763u, 167286374u, 1673084553u, 2703753573u, 3969485877u, 1080709807u, 3567096593u, 846330823u, 3980732819u, 3927110949u, 899211926u, 1446293957u, 1745452116u, 689646794u, 547777106u, 3396984022u, 2010604395u, 2157645177u, 182647459u, 1817251360u, 2483516668u, 1995873889u, 440809281u, 4182207809u, 2473922628u, 3573437277u, 3932825655u, 694941001u, 1297210299u, 2878018727u, 983045991u, 2979766881u, 3824708038u, 1893046144u, 2950260501u, 3369875908u, 3948835952u, 2410606667u, 1924300086u, 2323635649u, 1095692796u, 3215651702u, 3165206374u, 2035971927u, 3211187285u, 3573977418u, 3022182967u, 4241902055u, 2685286596u, 2409689870u, 389933430u, 1876139085u, 2035379173u, 3156719403u, 850616459u, 1100758070u, 3259255264u, 642558827u, 3060970603u, 39762863u, 2896966783u, 3841349437u, 3927325558u, 3446746799u, 3092460994u, 3462533949u, 2715100372u, 3600592348u, 1438119909u, 3389886536u, 206032886u, 3423871741u, 318745766u, 3022551890u, 698159530u, 26595453u, 1018694439u, 3487920415u, 836133134u, 2555459386u, 13376211u, 2974935778u, 3923982110u, 4128440368u, 3151290570u, 2700878630u, 349544893u, 4254434606u, 620702738u, 4184546648u, 95330427u, 3685257541u, 616906128u, 4096039593u, 181324388u, 213326528u, 2483036287u, 3687447591u, 3082481181u, 2804751679u, 2757863992u, 3336203251u, 2426966656u, 1857597291u, 1898028617u, 2297843497u, 3115799206u, 3384611758u, 3149613215u, 3532453271u, 3292199609u, 3014987086u, 3072689674u, 4081358502u, 361834883u, 2049312339u, 153039032u, 4193383831u, 3558002292u, 3582826727u, 777972122u, 641638048u, 285854978u, 723222147u, 2950756410u, 3666770147u, 19541310u, 2944503394u, 2528939963u, 3911995283u, 4269641626u, 1854366031u, 4023317792u, 2401508969u, 1502161369u, 484087251u, 1653537256u, 3678756915u, 4180845982u, 2218674942u, 3883468233u, 119533952u, 3121053955u, 532580930u, 3344794900u, 1214377745u, 4020472257u, 2795807929u, 1420711044u, 3056222270u, 2578801852u, 1932552039u, 1565222480u, 102525319u, 1597046752u, 4191271569u, 1858141209u, 837013685u, 2433747334u, 801945982u, 959060361u, 3900212575u, 2614238724u, 2356097379u, 579520410u, 3592746657u, 624064611u, 40551695u, 1440244754u, 3451319299u, 1812727217u, 3063257791u, 1926605515u, 1333275492u, 286856518u, 2413498277u, 4017416493u, 1800948455u, 2260693661u, 2290564658u, 1434784375u, 2488451111u, 3192152375u, 2168945383u, 1162230581u, 3014021816u, 3221872028u, 3659578390u, 1777278318u, 1977967819u, 861294495u, 982368228u, 3857925954u, 3574400u, 2837466924u, 2403789615u, 489421197u, 2070340707u, 763511159u, 3093034739u, 564081942u, 3790255635u, 1851767311u, 215873064u, 2052885245u, 2188510630u, 1500502100u, 766582603u, 3510695729u, 3633897886u, 869534498u, 1753831571u, 4016802839u, 102915759u, 12219597u, 1903866871u, 2275773607u, 2562346680u, 3770683037u, 1757390667u, 2600644269u, 1836138610u, 2313159592u, 1176659651u, 1966051476u, 658762759u, 4017777180u, 1200918979u, 3547097818u, 1177471069u, 1587351568u, 3415751286u, 3964330266u, 2359113833u, 2568821952u, 1336884270u, 836456074u, 2166701280u, 1160828307u, 750251393u, 3797918310u, 3998220478u, 1541638959u, 1591470391u, 1284682287u, 1247297436u, 2244893425u, 3873319763u, 3209360521u, 1500760917u, 2824663904u, 387290747u, 1992384214u, 1503258234u, 2015988350u, 2401435878u, 1413123241u, 3447743383u, 4049325490u, 3351168044u, 4248822006u, 2111054222u, 299039262u, 4177777010u, 1907627089u, 1939937892u, 1225250402u, 718851315u, 2395397275u, 2505238660u, 1120665392u, 3625074646u, 3532710481u, 960090563u, 881896894u, 1380412530u, 2462191171u, 517723038u, 3641372153u, 1203216216u, 890039786u, 3681684286u, 2878010655u, 451644272u, 1878599910u, 2022851471u, 3846368475u, 4023462736u, 863533372u, 228470501u, 3978931801u, 326864213u, 712089245u, 145342046u, 1324459232u, 2723749020u, 3453504904u, 4239990007u, 1030934328u, 3132636380u, 599986453u, 210086237u, 650681824u, 2905813400u, 2016125599u, 3120916045u, 1939318307u, 1672297945u, 1645598494u, 2294474646u, 3039133078u, 1423739948u, 2636124712u, 1636318941u, 3339854250u, 1005852513u, 663467913u, 3883529571u, 1694069266u }; PCG rng; for (size_t i = 0; i < 1000; ++i) EXPECT_EQ(Expected[i], rng.rand_uint32()); } } TEST_SUITE(Foundation_Math_RNG_SerialMersenneTwister) { TEST_CASE(CheckThousandFirstOutputValues) { static const uint32 Expected[1000] = { 1067595299u, 955945823u, 477289528u, 4107218783u, 4228976476u, 3344332714u, 3355579695u, 227628506u, 810200273u, 2591290167u, 2560260675u, 3242736208u, 646746669u, 1479517882u, 4245472273u, 1143372638u, 3863670494u, 3221021970u, 1773610557u, 1138697238u, 1421897700u, 1269916527u, 2859934041u, 1764463362u, 3874892047u, 3965319921u, 72549643u, 2383988930u, 2600218693u, 3237492380u, 2792901476u, 725331109u, 605841842u, 271258942u, 715137098u, 3297999536u, 1322965544u, 4229579109u, 1395091102u, 3735697720u, 2101727825u, 3730287744u, 2950434330u, 1661921839u, 2895579582u, 2370511479u, 1004092106u, 2247096681u, 2111242379u, 3237345263u, 4082424759u, 219785033u, 2454039889u, 3709582971u, 835606218u, 2411949883u, 2735205030u, 756421180u, 2175209704u, 1873865952u, 2762534237u, 4161807854u, 3351099340u, 181129879u, 3269891896u, 776029799u, 2218161979u, 3001745796u, 1866825872u, 2133627728u, 34862734u, 1191934573u, 3102311354u, 2916517763u, 1012402762u, 2184831317u, 4257399449u, 2899497138u, 3818095062u, 3030756734u, 1282161629u, 420003642u, 2326421477u, 2741455717u, 1278020671u, 3744179621u, 271777016u, 2626330018u, 2560563991u, 3055977700u, 4233527566u, 1228397661u, 3595579322u, 1077915006u, 2395931898u, 1851927286u, 3013683506u, 1999971931u, 3006888962u, 1049781534u, 1488758959u, 3491776230u, 104418065u, 2448267297u, 3075614115u, 3872332600u, 891912190u, 3936547759u, 2269180963u, 2633455084u, 1047636807u, 2604612377u, 2709305729u, 1952216715u, 207593580u, 2849898034u, 670771757u, 2210471108u, 467711165u, 263046873u, 3569667915u, 1042291111u, 3863517079u, 1464270005u, 2758321352u, 3790799816u, 2301278724u, 3106281430u, 7974801u, 2792461636u, 555991332u, 621766759u, 1322453093u, 853629228u, 686962251u, 1455120532u, 957753161u, 1802033300u, 1021534190u, 3486047311u, 1902128914u, 3701138056u, 4176424663u, 1795608698u, 560858864u, 3737752754u, 3141170998u, 1553553385u, 3367807274u, 711546358u, 2475125503u, 262969859u, 251416325u, 2980076994u, 1806565895u, 969527843u, 3529327173u, 2736343040u, 2987196734u, 1649016367u, 2206175811u, 3048174801u, 3662503553u, 3138851612u, 2660143804u, 1663017612u, 1816683231u, 411916003u, 3887461314u, 2347044079u, 1015311755u, 1203592432u, 2170947766u, 2569420716u, 813872093u, 1105387678u, 1431142475u, 220570551u, 4243632715u, 4179591855u, 2607469131u, 3090613241u, 282341803u, 1734241730u, 1391822177u, 1001254810u, 827927915u, 1886687171u, 3935097347u, 2631788714u, 3905163266u, 110554195u, 2447955646u, 3717202975u, 3304793075u, 3739614479u, 3059127468u, 953919171u, 2590123714u, 1132511021u, 3795593679u, 2788030429u, 982155079u, 3472349556u, 859942552u, 2681007391u, 2299624053u, 647443547u, 233600422u, 608168955u, 3689327453u, 1849778220u, 1608438222u, 3968158357u, 2692977776u, 2851872572u, 246750393u, 3582818628u, 3329652309u, 4036366910u, 1012970930u, 950780808u, 3959768744u, 2538550045u, 191422718u, 2658142375u, 3276369011u, 2927737484u, 1234200027u, 1920815603u, 3536074689u, 1535612501u, 2184142071u, 3276955054u, 428488088u, 2378411984u, 4059769550u, 3913744741u, 2732139246u, 64369859u, 3755670074u, 842839565u, 2819894466u, 2414718973u, 1010060670u, 1839715346u, 2410311136u, 152774329u, 3485009480u, 4102101512u, 2852724304u, 879944024u, 1785007662u, 2748284463u, 1354768064u, 3267784736u, 2269127717u, 3001240761u, 3179796763u, 895723219u, 865924942u, 4291570937u, 89355264u, 1471026971u, 4114180745u, 3201939751u, 2867476999u, 2460866060u, 3603874571u, 2238880432u, 3308416168u, 2072246611u, 2755653839u, 3773737248u, 1709066580u, 4282731467u, 2746170170u, 2832568330u, 433439009u, 3175778732u, 26248366u, 2551382801u, 183214346u, 3893339516u, 1928168445u, 1337157619u, 3429096554u, 3275170900u, 1782047316u, 4264403756u, 1876594403u, 4289659572u, 3223834894u, 1728705513u, 4068244734u, 2867840287u, 1147798696u, 302879820u, 1730407747u, 1923824407u, 1180597908u, 1569786639u, 198796327u, 560793173u, 2107345620u, 2705990316u, 3448772106u, 3678374155u, 758635715u, 884524671u, 486356516u, 1774865603u, 3881226226u, 2635213607u, 1181121587u, 1508809820u, 3178988241u, 1594193633u, 1235154121u, 326117244u, 2304031425u, 937054774u, 2687415945u, 3192389340u, 2003740439u, 1823766188u, 2759543402u, 10067710u, 1533252662u, 4132494984u, 82378136u, 420615890u, 3467563163u, 541562091u, 3535949864u, 2277319197u, 3330822853u, 3215654174u, 4113831979u, 4204996991u, 2162248333u, 3255093522u, 2219088909u, 2978279037u, 255818579u, 2859348628u, 3097280311u, 2569721123u, 1861951120u, 2907080079u, 2719467166u, 998319094u, 2521935127u, 2404125338u, 259456032u, 2086860995u, 1839848496u, 1893547357u, 2527997525u, 1489393124u, 2860855349u, 76448234u, 2264934035u, 744914583u, 2586791259u, 1385380501u, 66529922u, 1819103258u, 1899300332u, 2098173828u, 1793831094u, 276463159u, 360132945u, 4178212058u, 595015228u, 177071838u, 2800080290u, 1573557746u, 1548998935u, 378454223u, 1460534296u, 1116274283u, 3112385063u, 3709761796u, 827999348u, 3580042847u, 1913901014u, 614021289u, 4278528023u, 1905177404u, 45407939u, 3298183234u, 1184848810u, 3644926330u, 3923635459u, 1627046213u, 3677876759u, 969772772u, 1160524753u, 1522441192u, 452369933u, 1527502551u, 832490847u, 1003299676u, 1071381111u, 2891255476u, 973747308u, 4086897108u, 1847554542u, 3895651598u, 2227820339u, 1621250941u, 2881344691u, 3583565821u, 3510404498u, 849362119u, 862871471u, 797858058u, 2867774932u, 2821282612u, 3272403146u, 3997979905u, 209178708u, 1805135652u, 6783381u, 2823361423u, 792580494u, 4263749770u, 776439581u, 3798193823u, 2853444094u, 2729507474u, 1071873341u, 1329010206u, 1289336450u, 3327680758u, 2011491779u, 80157208u, 922428856u, 1158943220u, 1667230961u, 2461022820u, 2608845159u, 387516115u, 3345351910u, 1495629111u, 4098154157u, 3156649613u, 3525698599u, 4134908037u, 446713264u, 2137537399u, 3617403512u, 813966752u, 1157943946u, 3734692965u, 1680301658u, 3180398473u, 3509854711u, 2228114612u, 1008102291u, 486805123u, 863791847u, 3189125290u, 1050308116u, 3777341526u, 4291726501u, 844061465u, 1347461791u, 2826481581u, 745465012u, 2055805750u, 4260209475u, 2386693097u, 2980646741u, 447229436u, 2077782664u, 1232942813u, 4023002732u, 1399011509u, 3140569849u, 2579909222u, 3794857471u, 900758066u, 2887199683u, 1720257997u, 3367494931u, 2668921229u, 955539029u, 3818726432u, 1105704962u, 3889207255u, 2277369307u, 2746484505u, 1761846513u, 2413916784u, 2685127085u, 4240257943u, 1166726899u, 4215215715u, 3082092067u, 3960461946u, 1663304043u, 2087473241u, 4162589986u, 2507310778u, 1579665506u, 767234210u, 970676017u, 492207530u, 1441679602u, 1314785090u, 3262202570u, 3417091742u, 1561989210u, 3011406780u, 1146609202u, 3262321040u, 1374872171u, 1634688712u, 1280458888u, 2230023982u, 419323804u, 3262899800u, 39783310u, 1641619040u, 1700368658u, 2207946628u, 2571300939u, 2424079766u, 780290914u, 2715195096u, 3390957695u, 163151474u, 2309534542u, 1860018424u, 555755123u, 280320104u, 1604831083u, 2713022383u, 1728987441u, 3639955502u, 623065489u, 3828630947u, 4275479050u, 3516347383u, 2343951195u, 2430677756u, 635534992u, 3868699749u, 808442435u, 3070644069u, 4282166003u, 2093181383u, 2023555632u, 1568662086u, 3422372620u, 4134522350u, 3016979543u, 3259320234u, 2888030729u, 3185253876u, 4258779643u, 1267304371u, 1022517473u, 815943045u, 929020012u, 2995251018u, 3371283296u, 3608029049u, 2018485115u, 122123397u, 2810669150u, 1411365618u, 1238391329u, 1186786476u, 3155969091u, 2242941310u, 1765554882u, 279121160u, 4279838515u, 1641578514u, 3796324015u, 13351065u, 103516986u, 1609694427u, 551411743u, 2493771609u, 1316337047u, 3932650856u, 4189700203u, 463397996u, 2937735066u, 1855616529u, 2626847990u, 55091862u, 3823351211u, 753448970u, 4045045500u, 1274127772u, 1124182256u, 92039808u, 2126345552u, 425973257u, 386287896u, 2589870191u, 1987762798u, 4084826973u, 2172456685u, 3366583455u, 3602966653u, 2378803535u, 2901764433u, 3716929006u, 3710159000u, 2653449155u, 3469742630u, 3096444476u, 3932564653u, 2595257433u, 318974657u, 3146202484u, 853571438u, 144400272u, 3768408841u, 782634401u, 2161109003u, 570039522u, 1886241521u, 14249488u, 2230804228u, 1604941699u, 3928713335u, 3921942509u, 2155806892u, 134366254u, 430507376u, 1924011722u, 276713377u, 196481886u, 3614810992u, 1610021185u, 1785757066u, 851346168u, 3761148643u, 2918835642u, 3364422385u, 3012284466u, 3735958851u, 2643153892u, 3778608231u, 1164289832u, 205853021u, 2876112231u, 3503398282u, 3078397001u, 3472037921u, 1748894853u, 2740861475u, 316056182u, 1660426908u, 168885906u, 956005527u, 3984354789u, 566521563u, 1001109523u, 1216710575u, 2952284757u, 3834433081u, 3842608301u, 2467352408u, 3974441264u, 3256601745u, 1409353924u, 1329904859u, 2307560293u, 3125217879u, 3622920184u, 3832785684u, 3882365951u, 2308537115u, 2659155028u, 1450441945u, 3532257603u, 3186324194u, 1225603425u, 1124246549u, 175808705u, 3009142319u, 2796710159u, 3651990107u, 160762750u, 1902254979u, 1698648476u, 1134980669u, 497144426u, 3302689335u, 4057485630u, 3603530763u, 4087252587u, 427812652u, 286876201u, 823134128u, 1627554964u, 3745564327u, 2589226092u, 4202024494u, 62878473u, 3275585894u, 3987124064u, 2791777159u, 1916869511u, 2585861905u, 1375038919u, 1403421920u, 60249114u, 3811870450u, 3021498009u, 2612993202u, 528933105u, 2757361321u, 3341402964u, 2621861700u, 273128190u, 4015252178u, 3094781002u, 1621621288u, 2337611177u, 1796718448u, 1258965619u, 4241913140u, 2138560392u, 3022190223u, 4174180924u, 450094611u, 3274724580u, 617150026u, 2704660665u, 1469700689u, 1341616587u, 356715071u, 1188789960u, 2278869135u, 1766569160u, 2795896635u, 57824704u, 2893496380u, 1235723989u, 1630694347u, 3927960522u, 428891364u, 1814070806u, 2287999787u, 4125941184u, 3968103889u, 3548724050u, 1025597707u, 1404281500u, 2002212197u, 92429143u, 2313943944u, 2403086080u, 3006180634u, 3561981764u, 1671860914u, 1768520622u, 1803542985u, 844848113u, 3006139921u, 1410888995u, 1157749833u, 2125704913u, 1789979528u, 1799263423u, 741157179u, 2405862309u, 767040434u, 2655241390u, 3663420179u, 2172009096u, 2511931187u, 1680542666u, 231857466u, 1154981000u, 157168255u, 1454112128u, 3505872099u, 1929775046u, 2309422350u, 2143329496u, 2960716902u, 407610648u, 2938108129u, 2581749599u, 538837155u, 2342628867u, 430543915u, 740188568u, 1937713272u, 3315215132u, 2085587024u, 4030765687u, 766054429u, 3517641839u, 689721775u, 1294158986u, 1753287754u, 4202601348u, 1974852792u, 33459103u, 3568087535u, 3144677435u, 1686130825u, 4134943013u, 3005738435u, 3599293386u, 426570142u, 754104406u, 3660892564u, 1964545167u, 829466833u, 821587464u, 1746693036u, 1006492428u, 1595312919u, 1256599985u, 1024482560u, 1897312280u, 2902903201u, 691790057u, 1037515867u, 3176831208u, 1968401055u, 2173506824u, 1089055278u, 1748401123u, 2941380082u, 968412354u, 1818753861u, 2973200866u, 3875951774u, 1119354008u, 3988604139u, 1647155589u, 2232450826u, 3486058011u, 3655784043u, 3759258462u, 847163678u, 1082052057u, 989516446u, 2871541755u, 3196311070u, 3929963078u, 658187585u, 3664944641u, 2175149170u, 2203709147u, 2756014689u, 2456473919u, 3890267390u, 1293787864u, 2830347984u, 3059280931u, 4158802520u, 1561677400u, 2586570938u, 783570352u, 1355506163u, 31495586u, 3789437343u, 3340549429u, 2092501630u, 896419368u, 671715824u, 3530450081u, 3603554138u, 1055991716u, 3442308219u, 1499434728u, 3130288473u, 3639507000u, 17769680u, 2259741420u, 487032199u, 4227143402u, 3693771256u, 1880482820u, 3924810796u, 381462353u, 4017855991u, 2452034943u, 2736680833u, 2209866385u, 2128986379u, 437874044u, 595759426u, 641721026u, 1636065708u, 3899136933u, 629879088u, 3591174506u, 351984326u, 2638783544u, 2348444281u, 2341604660u, 2123933692u, 143443325u, 1525942256u, 364660499u, 599149312u, 939093251u, 1523003209u, 106601097u, 376589484u, 1346282236u, 1297387043u, 764598052u, 3741218111u, 933457002u, 1886424424u, 3219631016u, 525405256u, 3014235619u, 323149677u, 2038881721u, 4100129043u, 2851715101u, 2984028078u, 1888574695u, 2014194741u, 3515193880u, 4180573530u, 3461824363u, 2641995497u, 3179230245u, 2902294983u, 2217320456u, 4040852155u, 1784656905u, 3311906931u, 87498458u, 2752971818u, 2635474297u, 2831215366u, 3682231106u, 2920043893u, 3772929704u, 2816374944u, 309949752u, 2383758854u, 154870719u, 385111597u, 1191604312u, 1840700563u, 872191186u, 2925548701u, 1310412747u, 2102066999u, 1504727249u, 3574298750u, 1191230036u, 3330575266u, 3180292097u, 3539347721u, 681369118u, 3305125752u, 3648233597u, 950049240u, 4173257693u, 1760124957u, 512151405u, 681175196u, 580563018u, 1169662867u, 4015033554u, 2687781101u, 699691603u, 2673494188u, 1137221356u, 123599888u, 472658308u, 1053598179u, 1012713758u, 3481064843u, 3759461013u, 3981457956u, 3830587662u, 1877191791u, 3650996736u, 988064871u, 3515461600u, 4089077232u, 2225147448u, 1249609188u, 2643151863u, 3896204135u, 2416995901u, 1397735321u, 3460025646u }; static const uint32 InitKey[] = { 0x123u, 0x234u, 0x345u, 0x456u }; SerialMersenneTwister rng(InitKey, countof(InitKey)); for (size_t i = 0; i < 1000; ++i) EXPECT_EQ(Expected[i], rng.rand_uint32()); } } #ifdef APPLESEED_USE_SSE TEST_SUITE(Foundation_Math_RNG_SimdMersenneTwister) { TEST_CASE(CheckThousandFirstOutputValues) { static const uint32 Expected[1000] = { 3886407011u, 4281800351u, 111076728u, 81347708u, 3833203606u, 556297090u, 4292688708u, 260342669u, 3323730357u, 155924424u, 1997838194u, 3088719549u, 1161211799u, 293884415u, 3487150750u, 3861616023u, 2769694646u, 3011126040u, 262311224u, 2581246133u, 3996561926u, 1037905631u, 2726942113u, 3074783864u, 2522595150u, 273794672u, 3451558636u, 4031719585u, 2696404308u, 2525707734u, 1576178264u, 4274454893u, 1743616231u, 1080187283u, 330955672u, 1152561996u, 2918045222u, 265585965u, 1338757171u, 1745764590u, 1060801047u, 3614387191u, 33931444u, 3178875627u, 1417632743u, 2506314056u, 2124201440u, 407821907u, 3169932376u, 2523587590u, 3037554570u, 1953296404u, 922513475u, 1128201577u, 1170419982u, 2728966839u, 1022270193u, 2450795268u, 3109694330u, 8260451u, 1516342905u, 1435585434u, 2677755295u, 56794240u, 2746665314u, 1328679627u, 1276249610u, 1528496398u, 3094963307u, 3722760421u, 208123785u, 1804878568u, 586130022u, 3428497868u, 1359379625u, 4265212767u, 4031061886u, 44831066u, 1145032489u, 2024548506u, 3020723704u, 766457964u, 3236660798u, 2137006083u, 4027227077u, 3363478772u, 4072818873u, 2766431139u, 1163227543u, 643940996u, 1138066267u, 4186824334u, 3714278977u, 263076582u, 3349533518u, 571545736u, 2150263036u, 2532756744u, 3936093178u, 1513889719u, 1745352786u, 1656966430u, 1216370458u, 2503054925u, 3665736300u, 1575545695u, 375444373u, 2999010119u, 2115967604u, 3172776887u, 465140534u, 3798324645u, 977467577u, 3308178348u, 2937569156u, 2255472861u, 2829925437u, 2167167874u, 3432646076u, 2811216535u, 3570586428u, 3025152843u, 1594735626u, 3383030628u, 3181186026u, 802974985u, 3683451150u, 705220991u, 3880500653u, 1390427452u, 407874837u, 3390122460u, 1366012681u, 893734678u, 1337857272u, 1996859867u, 628641020u, 2493672336u, 1547585818u, 862987700u, 1606354437u, 1070426107u, 426052289u, 2177883338u, 3495965601u, 2207329451u, 758331906u, 1408123471u, 1255269424u, 3674545455u, 2830676914u, 1684133988u, 304750832u, 900679206u, 2897402762u, 4008082397u, 2514162932u, 2383761693u, 3018319380u, 2690491913u, 1181090043u, 638491075u, 3266620013u, 3540383625u, 1273518795u, 487561245u, 4088046970u, 1255768239u, 3814793891u, 1004485133u, 2155759887u, 1870125254u, 2948424167u, 2294936691u, 627742802u, 4071705078u, 1954110383u, 3729581021u, 744048688u, 2012419079u, 2446564917u, 3594603404u, 1973206478u, 2621088187u, 2395875201u, 3485361773u, 420519696u, 410396687u, 2142731670u, 4241585820u, 3216169587u, 1055926832u, 1225242494u, 2580921156u, 2295439545u, 1860970055u, 1197258090u, 534689955u, 128303446u, 2542298009u, 2470895634u, 2423079975u, 2563807503u, 157276933u, 2183621728u, 1050536500u, 3314069262u, 3589471524u, 3464182125u, 1635073681u, 332887291u, 1054575134u, 3385321612u, 1563394065u, 1179740749u, 425655594u, 266114324u, 3264456074u, 899156497u, 3566843631u, 1527686675u, 3017375154u, 1056374060u, 3208904061u, 3962046851u, 2002878677u, 1427755009u, 632165846u, 3783730489u, 3556960643u, 1759787258u, 3558288429u, 3813141183u, 1415714413u, 2990026503u, 3326805639u, 834862637u, 3877827029u, 506216427u, 4025413172u, 2514251441u, 1662755812u, 827708521u, 2284667052u, 2287033772u, 3860110996u, 2963598547u, 2098547079u, 1639755167u, 3701127300u, 615245480u, 3315632161u, 655986141u, 3553163384u, 3914455257u, 2026638759u, 1081375798u, 2543358743u, 1501975602u, 2829952981u, 1568905036u, 3549344007u, 3993544389u, 3922902403u, 1945601039u, 4117478936u, 4294179351u, 3803974482u, 3519181318u, 1736601686u, 283422918u, 878255976u, 2570293325u, 3953290202u, 3494798861u, 3647753889u, 4261599140u, 43477882u, 882694644u, 916427300u, 1883469962u, 3472070446u, 840948062u, 1070838388u, 2938640304u, 170924456u, 413157396u, 1688788798u, 845338463u, 207677638u, 2374054979u, 3093598473u, 3216598376u, 248499183u, 3967759055u, 2799718086u, 2162269376u, 628483893u, 3393868716u, 537353077u, 225772197u, 1276357535u, 1151386419u, 3799648942u, 775717262u, 3421191342u, 3352369495u, 1176301660u, 826903438u, 771955966u, 703662455u, 3500408312u, 3965812397u, 2634406388u, 2600638422u, 433900783u, 1881539355u, 152614188u, 1001034390u, 3419274097u, 3607958781u, 3263009089u, 1381719055u, 3608460687u, 699585901u, 2601456738u, 701827720u, 161788133u, 3114037508u, 1730058740u, 1935321590u, 809764901u, 3015873875u, 996900766u, 1265496117u, 601954268u, 3324915628u, 3267673720u, 3128655414u, 2061992616u, 1225068379u, 4034553293u, 3219516429u, 2354106088u, 3712443016u, 3558482352u, 3424565169u, 66652973u, 1602369262u, 2478405431u, 1953215718u, 3763884955u, 2321961497u, 4034846225u, 2964427848u, 2980412529u, 1043681536u, 78708356u, 2123693711u, 3749757828u, 1699587788u, 3325106880u, 1533138712u, 966842782u, 2142041330u, 331951290u, 2839273949u, 2638662908u, 3057242914u, 2615193128u, 1453714199u, 2134977452u, 182401908u, 1999564260u, 1760207124u, 2351213662u, 2733285744u, 745935144u, 4278636179u, 1861789766u, 3644538614u, 1504874763u, 4169371238u, 139285714u, 3237710933u, 2912828465u, 63556721u, 2424288873u, 1465498015u, 1750094812u, 3387255961u, 986980570u, 3520636206u, 3703009884u, 1810627870u, 638247367u, 800103969u, 533461354u, 3719164082u, 3416617704u, 582286943u, 107138412u, 2694850090u, 2191567919u, 663787068u, 3905244492u, 1075793301u, 3963296145u, 498654974u, 415913859u, 224922429u, 957693135u, 20753421u, 3604487226u, 176245419u, 756236270u, 1802741190u, 1167371933u, 2739973610u, 3528781257u, 1157415106u, 1118820636u, 3458247496u, 3426071999u, 1513516168u, 541006827u, 1567502872u, 1054211972u, 3108187973u, 3568355298u, 437544707u, 215493191u, 3406703434u, 3321185867u, 1772491122u, 3914720953u, 1014598723u, 333918716u, 3041884855u, 2375348211u, 170098352u, 240932703u, 936627316u, 2139228141u, 3059916219u, 2513963963u, 112660118u, 4220599362u, 1082041605u, 3602805569u, 2384684624u, 1330834152u, 4182800709u, 3009712734u, 4257523904u, 2159731903u, 2025797850u, 2056433570u, 349278747u, 1170424171u, 257898828u, 2188000674u, 1204405272u, 3389713953u, 4274421883u, 2794662087u, 2460352864u, 3127675894u, 3021639524u, 608028006u, 2111707400u, 1787005794u, 3843272691u, 3141988567u, 4196077997u, 2897702537u, 3372399131u, 3582063297u, 1578673893u, 4158772308u, 4169229718u, 1109608889u, 3321413183u, 3071034348u, 3753529331u, 1345899260u, 412497490u, 147621430u, 214318180u, 1578418651u, 3343150529u, 1254740020u, 3717298856u, 3299809204u, 3760154252u, 678106837u, 1480589570u, 2779667743u, 3703299966u, 1996609972u, 2450960405u, 2217729665u, 263095858u, 3896594109u, 3706821089u, 1779331587u, 944437701u, 1816667206u, 3470975262u, 2665594204u, 3272830417u, 3383291758u, 1100553215u, 3066409484u, 2255953998u, 4263120961u, 3903080396u, 3118336282u, 1244930791u, 2776135295u, 404172911u, 935988779u, 3021878898u, 2591140119u, 2855279657u, 828977189u, 1349880831u, 271405633u, 513887183u, 973977998u, 818498047u, 3759094702u, 1967989616u, 1645739285u, 2450937230u, 3394484130u, 3802347325u, 4188056776u, 1678519011u, 4011608337u, 3345802689u, 3739063605u, 515149797u, 4110693634u, 286359712u, 58159003u, 1620037343u, 1758736877u, 1108416461u, 978633298u, 3908170134u, 832999193u, 3865630340u, 2696419612u, 4213969249u, 649970127u, 612427777u, 1300765532u, 75897263u, 1394767950u, 920233303u, 2590798616u, 3717554842u, 1279020975u, 594203750u, 2514263416u, 2806336875u, 1893328899u, 3341401053u, 2408038972u, 1199628776u, 169610427u, 3626403286u, 2076132929u, 2304947701u, 1022870336u, 2137468039u, 1261296863u, 2927753974u, 2127572634u, 522582313u, 1753082133u, 3047778755u, 1097852750u, 2117585055u, 1342268395u, 3018704691u, 2039924086u, 4085013780u, 1150098139u, 1471970342u, 132882672u, 3577285283u, 1493520392u, 2365018644u, 1080368309u, 1593880224u, 2525716814u, 1220265805u, 3235772869u, 1140912993u, 1568018248u, 1847630808u, 2235016934u, 1969624960u, 2400798963u, 396529293u, 2876404082u, 374115476u, 3767411509u, 3686923286u, 269156713u, 1184297508u, 156613232u, 1608282564u, 1655626368u, 2286043979u, 4148499352u, 1400217329u, 746989267u, 118760232u, 3754761427u, 3991461457u, 1749683603u, 1448174823u, 1250954867u, 846463124u, 3958695790u, 3740351386u, 1632150808u, 3007550551u, 382880029u, 1194390993u, 1111682635u, 1559692800u, 2257958687u, 3155266410u, 2072536932u, 332962507u, 298440753u, 3586996064u, 1418147869u, 3646770130u, 589633801u, 1637972417u, 3421417825u, 891276907u, 2517892630u, 926748506u, 1448212968u, 1195763027u, 1191407415u, 1266564261u, 2446003846u, 739349380u, 2241384648u, 2419433486u, 1265848908u, 3540493819u, 3044389380u, 1180551193u, 385247912u, 3687971870u, 2933470163u, 1766292638u, 3920228013u, 4083968751u, 190207421u, 1897154699u, 1385999625u, 2589249091u, 13835880u, 3271302978u, 2807909185u, 1016922355u, 1630163316u, 3203254919u, 328188864u, 3987127570u, 1339850346u, 3114841550u, 2056796190u, 1661852945u, 2276546573u, 744577169u, 917967899u, 442985033u, 25425073u, 1772015325u, 1010457171u, 4199113754u, 2455595434u, 3779198526u, 424018762u, 1252182525u, 1500859734u, 1725596044u, 2179270330u, 3664653997u, 4060184295u, 4186918346u, 1230931642u, 2535369803u, 793762983u, 902779486u, 904819110u, 2106795553u, 1831821629u, 151770440u, 1060730346u, 260686731u, 3294302589u, 3812541728u, 2973165963u, 2769787748u, 835036584u, 1083164731u, 2357980787u, 1929093551u, 2774918826u, 21130448u, 3175936845u, 1486132047u, 4239744808u, 2950777361u, 3275643323u, 798179670u, 3634512791u, 3247651617u, 2623076444u, 1537428657u, 2099953068u, 908422971u, 369554428u, 119654834u, 1908459851u, 2560578188u, 2508436783u, 842226718u, 3437664571u, 3013183632u, 3419217136u, 1843555493u, 1288043476u, 198949359u, 2301813358u, 3675127261u, 2194239682u, 932293292u, 3754075039u, 1973360323u, 3784392333u, 1750909788u, 3778476827u, 3460291337u, 562801776u, 2829044007u, 1604539079u, 283365056u, 3280005866u, 1657415187u, 1950125903u, 700130005u, 3904988368u, 3209052907u, 264582882u, 490291266u, 3717352569u, 4103454345u, 474608553u, 3475119427u, 2360352432u, 2209943635u, 1388164703u, 471352122u, 2141591474u, 3500735720u, 8628640u, 2723436555u, 1457353421u, 3806358987u, 126793832u, 2251508000u, 916638683u, 933016742u, 3258782483u, 2671016879u, 4190126941u, 432086625u, 2127430287u, 1815440924u, 2651537029u, 3907132339u, 1091780759u, 465703611u, 3797184691u, 4076964944u, 1595769747u, 2154333579u, 2176806859u, 2877767259u, 666774740u, 3493648241u, 992488857u, 685541424u, 2937035147u, 2138525956u, 276742083u, 3030023740u, 1724350182u, 3561824424u, 2439326329u, 3137727159u, 3532825602u, 1286564361u, 1730650038u, 47146502u, 1947106164u, 2290693563u, 4237554375u, 2169460395u, 627198754u, 3267785934u, 3566267767u, 4211412669u, 1792274052u, 1558402694u, 3820357323u, 3173149465u, 3611342013u, 1626682141u, 1023174572u, 2647755299u, 1086682257u, 3281068297u, 2065457709u, 2600564494u, 3174357564u, 1064120822u, 3475948281u, 2666195316u, 813720511u, 1199782038u, 1186848860u, 3437401358u, 316880925u, 3547090326u, 2098800099u, 798689186u, 1622398727u, 650571965u, 477578967u, 1710157637u, 485820455u, 2918314263u, 3624842452u, 513206005u, 2879275335u, 2573728817u, 1579049169u, 1335411179u, 3620442791u, 377149333u, 2189934814u, 152599344u, 60641839u, 3947277983u, 2789496747u, 2458234304u, 803406288u, 1881317851u, 914125287u, 1158363406u, 3732087233u, 2747813553u, 2718658944u, 170436177u, 1191389821u, 1698013158u, 1929268873u, 1812478568u, 389149994u, 552849236u, 1067196635u, 1253573071u, 1875541284u, 1385293163u, 3094213125u, 2838399165u, 1045337537u, 1117641174u, 2526606585u, 354148334u, 3650301072u, 2522676029u, 3187829406u, 348039809u, 767130823u, 2342437211u, 533819297u, 3335749811u, 1530481294u, 868079141u, 388761146u, 4143832711u, 1282640156u, 3569483026u, 4102521131u, 1945436946u, 990432123u, 1989239488u, 3368237538u, 1074880654u, 1395154184u, 2893151289u, 998491299u, 4287341670u, 1965026764u, 2177870538u, 1424793411u, 4171480614u, 3739859402u, 2291099898u, 1517589883u, 1276318754u, 1928061503u, 67287416u, 3453716755u, 2295378035u, 1392343377u, 2292365750u, 2129040008u, 2254206651u, 2955135517u, 758411760u, 967043516u, 107901946u, 117314340u, 3603424360u, 1671012578u, 2219728876u, 2912517093u, 3166690820u, 2240095861u, 2176390337u, 947054314u, 2480610701u, 1510770649u, 770741919u, 184855908u, 4284459040u, 3002676248u, 2500892156u, 1092722404u, 1357944234u, 2758390695u, 1117396783u, 193686985u, 1758642792u, 214081719u, 1882715032u, 454274397u, 1878991883u, 520172897u, 1262447113u, 1467673599u, 2101685657u, 152140659u, 1868719962u, 1792314094u, 96111461u, 388908112u, 3213133738u, 2553788568u, 1093991166u, 2841328708u, 484504627u, 162274077u, 3134232148u, 3856069681u, 1125009861u, 648021349u, 4150339832u, 2401353698u, 317094232u, 3065672900u, 2834089878u, 1712791505u, 1400354166u, 4057054433u, 1852171224u, 2757365820u, 2653144471u, 510164898u, 2912173236u, 2130137889u, 585288649u, 2141196576u, 1291263962u, 3837327574u }; static const uint32 InitKey[] = { 0x123u, 0x234u, 0x345u, 0x456u }; SimdMersenneTwister rng(InitKey, countof(InitKey)); for (size_t i = 0; i < 1000; ++i) EXPECT_EQ(Expected[i], rng.rand_uint32()); } } #endif