Esempio n. 1
0
int main()
{
    typedef qfcl::random::cpp_rand ENG;
    typedef qfcl::random::normal_box_muller_polar<> DIST1;
    typedef qfcl::random::normal_box_muller<> DIST2;
    typedef qfcl::random::normal_inversion<> DIST3;

    ENG eng;
    DIST1 dist1;
    DIST2 dist2;
    DIST3 dist3;
    
    
    qfcl::random::variate_generator< ENG, DIST1 > rng1(eng, dist1);
    qfcl::random::variate_generator< ENG, DIST2 > rng2(eng, dist2);
    qfcl::random::variate_generator< ENG, DIST3 > rng3(eng, dist3);
    
    for (int i=0; i<10; ++i) {
        std::cout << rng1() << " " << rng2() << " " << rng3() << std::endl;
    }

    return 0;
}
Esempio n. 2
0
TEST(AESCTRDRNG, SeedConsistency)
{
  AESCTRDRBG rng1("seed1", "seed1") ;
  AESCTRDRBG rng2("seed1", "seed1") ;
  AESCTRDRBG rng3("seed2", "seed1") ;
  AESCTRDRBG rng4("seed1", "seed2") ;
  AESCTRDRBG rng5("seed2", "seed2") ;
  AESCTRDRBG rng6("seed2", "seed2") ;

  std::vector<uint8_t> bits[6] ;
  for(int r=0;r<5;r++)
  {
    std::vector<uint8_t> tmp ;
    tmp = rng1.GetBits(128) ;
    bits[0].insert(bits[0].end(), tmp.begin(), tmp.end()) ;
    tmp = rng2.GetBits(128) ;
    bits[1].insert(bits[1].end(), tmp.begin(), tmp.end()) ;
    tmp = rng3.GetBits(128) ;
    bits[2].insert(bits[2].end(), tmp.begin(), tmp.end()) ;
    tmp = rng4.GetBits(128) ;
    bits[3].insert(bits[3].end(), tmp.begin(), tmp.end()) ;
    tmp = rng5.GetBits(128) ;
    bits[4].insert(bits[4].end(), tmp.begin(), tmp.end()) ;
    tmp = rng6.GetBits(128) ;
    bits[5].insert(bits[5].end(), tmp.begin(), tmp.end()) ;
  }

  ASSERT_EQ(bits[0], bits[1]) ;
  ASSERT_EQ(bits[4], bits[5]) ;
  ASSERT_NE(bits[1], bits[2]) ;
  ASSERT_NE(bits[1], bits[3]) ;
  ASSERT_NE(bits[1], bits[4]) ;
  ASSERT_NE(bits[2], bits[3]) ;
  ASSERT_NE(bits[2], bits[4]) ;
  ASSERT_NE(bits[3], bits[4]) ;
}
Esempio n. 3
0
inline bool random_rng_d(std::size_t N, std::size_t M)
{
    using result_type = typename RNGType::result_type;

    mckl::UniformIntDistribution<std::size_t> rsize(0, N);
    mckl::UniformBitsDistribution<std::uint16_t> ubits16;
    mckl::UniformBitsDistribution<std::uint32_t> ubits32;
    mckl::UniformBitsDistribution<std::uint64_t> ubits64;
    RNGType rng;
    bool pass = true;

    RNGType rng1;
    RNGType rng2;

    mckl::Vector<result_type> r1;
    mckl::Vector<result_type> r2;
    mckl::Vector<std::uint16_t> u16_1;
    mckl::Vector<std::uint16_t> u16_2;
    mckl::Vector<std::uint32_t> u32_1;
    mckl::Vector<std::uint32_t> u32_2;
    mckl::Vector<std::uint64_t> u64_1;
    mckl::Vector<std::uint64_t> u64_2;
    r1.reserve(N);
    r2.reserve(N);
    u16_1.reserve(N);
    u16_2.reserve(N);
    u32_1.reserve(N);
    u32_2.reserve(N);
    u64_1.reserve(N);
    u64_2.reserve(N);

    for (std::size_t i = 0; i != M; ++i) {
        std::size_t K = rsize(rng);
        r1.resize(K);
        r2.resize(K);
        u16_1.resize(K);
        u16_2.resize(K);
        u32_1.resize(K);
        u32_2.resize(K);
        u64_1.resize(K);
        u64_2.resize(K);

        for (std::size_t j = 0; j != K; ++j) {
            r1[j] = rng1();
        }
        mckl::rand(rng2, K, r2.data());
        pass = pass && (r1 == r2 || rng != rng);

        for (std::size_t j = 0; j != K; ++j) {
            u16_1[j] = mckl::rand(rng1, ubits16);
        }
        mckl::rand(rng2, ubits16, K, u16_2.data());
        pass = pass && (u16_1 == u16_2 || rng != rng);

        for (std::size_t j = 0; j != K; ++j) {
            u32_1[j] = mckl::rand(rng1, ubits32);
        }
        mckl::rand(rng2, ubits32, K, u32_2.data());
        pass = pass && (u32_1 == u32_2 || rng != rng);

        for (std::size_t j = 0; j != K; ++j) {
            u64_1[j] = mckl::rand(rng1, ubits64);
        }
        mckl::rand(rng2, ubits64, K, u64_2.data());
        pass = pass && (u64_1 == u64_2 || rng != rng);

        rng1.discard(static_cast<unsigned>(K));
        typename RNGType::result_type next = rng1();
        for (std::size_t j = 0; j != K; ++j) {
            rng2();
        }
        bool find = false;
        for (std::size_t j = 0; j != 2; ++j) {
            find = find || rng2() == next;
        }
        pass = pass && (find || rng != rng);

        std::stringstream ss;
        ss << rng;
        mckl::rand(rng, K, r1.data());
        ss >> rng;
        mckl::rand(rng, K, r2.data());
        pass = pass && (r1 == r2 || rng != rng);

        RNGType tmp(rng);
        mckl::rand(rng, K, r1.data());
        mckl::rand(tmp, K, r2.data());
        pass = pass && (r1 == r2 || rng != rng);

        tmp = rng;
        mckl::rand(rng, K, r1.data());
        mckl::rand(tmp, K, r2.data());
        pass = pass && (r1 == r2 || rng != rng);
    }

    return pass;
}