/* test_uniform_on_sphere.cpp * * Copyright Steven Watanabe 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 class uniform_on_sphere_test { public: typedef double result_type; uniform_on_sphere_test(int dims, int x, int y) : impl(dims), idx1(x), idx2(y) {} template result_type operator()(Engine& rng) { const boost::random::uniform_on_sphere<>::result_type& tmp = impl(rng); // This should be uniformly distributed in [-pi,pi) return std::atan2(tmp[idx1], tmp[idx2]); } private: boost::random::uniform_on_sphere<> impl; int idx1, idx2; }; static const double pi = 3.14159265358979323846; #define BOOST_RANDOM_DISTRIBUTION uniform_on_sphere_test #define BOOST_RANDOM_DISTRIBUTION_NAME uniform_on_sphere #define BOOST_MATH_DISTRIBUTION boost::math::uniform #define BOOST_RANDOM_ARG1_TYPE double #define BOOST_RANDOM_ARG1_NAME n #define BOOST_RANDOM_ARG1_DEFAULT 6 #define BOOST_RANDOM_ARG1_DISTRIBUTION(n) boost::uniform_int<>(2, n) #define BOOST_RANDOM_DISTRIBUTION_INIT (n, 0, n-1) #define BOOST_MATH_DISTRIBUTION_INIT (-pi, pi) #include "test_real_distribution.ipp"