3个版本
0.1.2 | 2023年7月12日 |
---|---|
0.1.1 | 2023年7月12日 |
0.1.0 | 2023年7月8日 |
#1486 in 算法
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