File: component.rs

package info (click to toggle)
firefox 147.0.4-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,683,532 kB
  • sloc: cpp: 7,607,356; javascript: 6,533,348; ansic: 3,775,236; python: 1,415,508; xml: 634,561; asm: 438,949; java: 186,241; sh: 62,760; makefile: 18,079; objc: 13,092; perl: 12,808; yacc: 4,583; cs: 3,846; pascal: 3,448; lex: 1,720; ruby: 1,003; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10; exp: 6
file content (43 lines) | stat: -rw-r--r-- 1,389 bytes parent folder | download | duplicates (18)
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
43
#![cfg(feature = "component-model")]

use arbitrary::{Arbitrary, Unstructured};
use rand::{rngs::SmallRng, RngCore, SeedableRng};
use wasm_smith::Component;

#[test]
#[ignore] // FIXME(#1000): need to update wasm-smith's support for components
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::default() | wasmparser::WasmFeatures::COMPONENT_MODEL,
            );
            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
    );
}