diff --git a/include/boost/random/seed_seq.hpp b/include/boost/random/seed_seq.hpp index d76aef4..b0b1de2 100644 --- a/include/boost/random/seed_seq.hpp +++ b/include/boost/random/seed_seq.hpp @@ -97,7 +97,7 @@ public: & mask); r3 = r3 ^ (r3 >> 27); r3 = (r3 * 1566083941u) & mask; - value_type r4 = static_cast(r3 - k%m); + value_type r4 = static_cast(r3 - k%n); *(first + (k+p)%n) ^= r3; *(first + (k+q)%n) ^= r4; *(first + k%n) = r4; diff --git a/test/test_seed_seq.cpp b/test/test_seed_seq.cpp index 95152ec..c241d80 100644 --- a/test/test_seed_seq.cpp +++ b/test/test_seed_seq.cpp @@ -111,3 +111,20 @@ BOOST_AUTO_TEST_CASE(test_seed_seq) { ¶m[0], ¶m[0] + 4, &expected_param[0], &expected_param[0] + 4); #endif } + +BOOST_AUTO_TEST_CASE(test_seed_seq_short_output) { + boost::uint32_t store32[2]; + + boost::uint32_t expected_short[2] = { + 4149590228u, + 3175758659u + }; + + std::vector data = list_of(2)(3)(4)(5); + + boost::random::seed_seq seq(data); + + seq.generate(&store32[0], &store32[0] + 2); + BOOST_CHECK_EQUAL_COLLECTIONS( + &store32[0], &store32[0] + 2, &expected_short[0], &expected_short[0] + 2); +}