blob: fe5d253f66807497291cd8d58688c5696dea18bc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
use arbitrary::{Arbitrary, Unstructured};
use rand::{rngs::SmallRng, RngCore, SeedableRng};
use wasm_smith::Component;
#[test]
fn smoke_test_component() {
const NUM_RUNS: usize = 4096;
let mut rng = SmallRng::seed_from_u64(0);
let mut buf = vec![0; 1024];
let mut ok_count = 0;
for _ in 0..NUM_RUNS {
rng.fill_bytes(&mut buf);
let u = Unstructured::new(&buf);
if let Ok(component) = Component::arbitrary_take_rest(u) {
ok_count += 1;
let component = component.to_bytes();
let mut validator =
wasmparser::Validator::new_with_features(wasmparser::WasmFeatures {
component_model: true,
..Default::default()
});
if let Err(e) = validator.validate_all(&component) {
std::fs::write("component.wasm", &component).unwrap();
panic!(
"generated component should be valid; failing binary written \
to `component.wasm`. Error: {}",
e
);
}
}
}
println!(
"Generated {} / {} ({:.02}%) arbitrary components okay",
ok_count,
NUM_RUNS,
ok_count as f64 / NUM_RUNS as f64 * 100.0
);
}
|