basic_tests.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:py-prng 作者: czechnology 项目源码 文件源码
def serial_test(generator, n_bits, n1=None, sig_level=None, misc=None):
    if n1 is None:
        n0, n1 = _calculate_n0_n1(generator, n_bits)
    else:
        n0 = n_bits - n1

    n_xx = [0] * 4  # number of occurrences of 00, 01, 10, 11
    bi0 = generator.random_bit()  # bit b[i]
    for i in range(n_bits - 1):
        bi1 = generator.random_bit()  # bit b[i+1]
        n_xx[bi0 << 1 | bi1] += 1
        bi0 = bi1

    # Calculate the statistic
    x2 = 4 / (n_bits - 1) * (n_xx[0b00] ** 2 + n_xx[0b01] ** 2 + n_xx[0b10] ** 2 + n_xx[0b11] ** 2)
    x2 += -2 / n_bits * (n0 ** 2 + n1 ** 2) + 1

    if type(misc) is dict:
        misc.update(n0=n0, n1=n1, n00=n_xx[0b00], n01=n_xx[0b01], n10=n_xx[0b10], n11=n_xx[0b11])

    if sig_level is None:
        return x2
    else:
        limit = chi2.ppf(1 - sig_level, 2)
        if type(misc) is dict:
            misc.update(x=x2, limit=limit)
        return x2 <= limit
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号