/* boost validate.cpp * * Copyright Jens Maurer 2000 * Copyright Steven Watanabe 2010-2011 * Distributed under the Boost Software License, Version 1.0. (See * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * * $Id$ */ #include #include #include #include #include /* * Validate correct implementation */ template typename PRNG::result_type validation_value() { PRNG rng; for(int i = 0; i < 9999; i++) rng(); return rng(); } int test_main(int, char*[]) { // own run BOOST_CHECK_EQUAL(validation_value(), 3809585648U); // validation by experiment from mt19937.c BOOST_CHECK_EQUAL(validation_value(), 4123659995U); #if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) // validation from the C++0x draft (n3090) BOOST_CHECK_EQUAL(validation_value(), UINT64_C(9981545732273789042)); #endif // validation values from the publications BOOST_CHECK_EQUAL(validation_value(), 1043618065); // validation values from the publications BOOST_CHECK_EQUAL(validation_value(), 399268537); #if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) // by experiment from lrand48() BOOST_CHECK_EQUAL(validation_value(), 1993516219); #endif // ???? BOOST_CHECK_EQUAL(validation_value(), 3535848941U); // ???? BOOST_CHECK_EQUAL(validation_value(), 2060321752); // validation by experiment from Harry Erwin's generator.h (private e-mail) BOOST_CHECK_EQUAL(validation_value(), 139726); // validation from the C++0x draft (n3090) BOOST_CHECK_EQUAL(validation_value(), 1112339016); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.401269, 1e-5); // principal operation validated with CLHEP, values by experiment BOOST_CHECK_EQUAL(validation_value(), 5957620); BOOST_CHECK_EQUAL(validation_value(), 8587295); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 5957620/std::pow(2.0f,24), 1e-6); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 8587295/std::pow(2.0f,24), 1e-6); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.838413, 1e-6); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.59839, 1e-6); BOOST_CHECK_EQUAL(validation_value(), 9901578); #if !defined(BOOST_NO_INT64_T) && !defined(BOOST_NO_INTEGRAL_INT64_T) BOOST_CHECK_EQUAL(validation_value(), UINT64_C(249142670248501)); #endif BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.40126853196520074, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.56576990947654049, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.85870032418398168, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.29923216793615537, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.39798595467394815, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.22728966337376244, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.21779661133680173, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.98718042717052668, 1e-14); BOOST_CHECK_CLOSE_FRACTION(validation_value(), 0.86191789886161496, 1e-14); typedef boost::random::lagged_fibonacci_engine lagged_fibonacci; BOOST_CHECK_EQUAL(validation_value(), 3543833); return 0; }