#分布 #模糊测试 #数字 #生成 #输入 #数据 #模糊测试器

fuzzerang

高效的随机数生成器和分布,适用于模糊测试

3个版本

0.1.2 2023年7月12日
0.1.1 2023年7月12日
0.1.0 2023年7月8日

#1486 in 算法


用于regenerator

MIT许可证

43KB
878

Fuzzerang

用于模糊测试器和变异器的有用随机生成器和分布

这些生成器和分布不是为了非常随机、非常快速或非常安全,而是设计用于模糊测试和变异,通过有效利用可用输入数据来实现。例如,在Standard中,默认的rand库在每个布尔值生成时浪费了31位输入。

相比之下,StandardBuffered通过仅消耗1位来更有效地使用输入数据,以生成范围内的值,这是生成值所需的最小位数等。

示例

use fuzzerang::{StandardSeedableRng, StandardBuffered, Ranged};
use rand::{SeedableRng, distributions::Distribution};

// Use a constant seed of 8 bytes, or 64 bits
let mut rng = StandardSeedableRng::from_seed((0..255).take(8).collect());
let dist = StandardBuffered::new();

// We can generate 10 bools from 8 bytes of input because we're only using 1 bit each
for i in 0..10 {
    let x: bool = dist.sample(&mut rng);
    println!("{}: {}", i, x);
}

// In fact, we are so efficient we can generate some alphabetic characters too, which
// each use 4 bits
for i in 0..10 {
    let x: char = dist.sample_range_inclusive(&mut rng, 'A'..='Z');
    println!("{}: {}", i, x);
}

依赖项

~1.5MB
~30K SLoC