File: parser.rs

package info (click to toggle)
rust-json-event-parser 0.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid, trixie
  • size: 256 kB
  • sloc: python: 14; makefile: 2; sh: 1
file content (61 lines) | stat: -rw-r--r-- 1,895 bytes parent folder | download
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
use codspeed_criterion_compat::{criterion_group, criterion_main, Criterion};
use json_event_parser::{JsonEvent, ReaderJsonParser};
use std::fs::{self, read_dir};

fn bench_parse_json_benchmark(c: &mut Criterion) {
    for dataset in ["canada", "citm_catalog", "twitter"] {
        let data = fs::read(format!(
            "{}/benches/json-benchmark/data/{dataset}.json",
            env!("CARGO_MANIFEST_DIR")
        ))
        .unwrap();
        c.bench_function(dataset, |b| {
            b.iter(|| {
                let mut reader = ReaderJsonParser::new(data.as_slice());
                while reader.parse_next().unwrap() != JsonEvent::Eof {
                    // read more
                }
            })
        });
    }
}

fn bench_parse_testsuite(c: &mut Criterion) {
    let example = load_testsuite_example();

    c.bench_function("JSON test suite", |b| {
        b.iter(|| {
            let mut reader = ReaderJsonParser::new(example.as_slice());
            while reader.parse_next().unwrap() != JsonEvent::Eof {
                // read more
            }
        })
    });
}

fn load_testsuite_example() -> Vec<u8> {
    let mut result = Vec::new();
    result.extend_from_slice(b"[\n");
    for file in read_dir(format!(
        "{}/JSONTestSuite/test_parsing",
        env!("CARGO_MANIFEST_DIR")
    ))
    .unwrap()
    {
        let file = file.unwrap();
        let file_name = file.file_name().to_str().unwrap().to_owned();
        if file_name.starts_with("y_") && file_name.ends_with(".json") {
            if result.len() > 2 {
                result.extend_from_slice(b",\n");
            }
            result.push(b'\t');
            result.extend_from_slice(&fs::read(file.path()).unwrap());
        }
    }
    result.extend_from_slice(b"\n]");
    result
}

criterion_group!(parser, bench_parse_testsuite, bench_parse_json_benchmark);

criterion_main!(parser);