]> git.proxmox.com Git - rustc.git/blame - vendor/csv-core/benches/bench.rs
New upstream version 1.72.1+dfsg1
[rustc.git] / vendor / csv-core / benches / bench.rs
CommitLineData
49aad941
FG
1#![feature(test)]
2
3extern crate test;
4
5use test::Bencher;
6
7use csv_core::{Reader, ReaderBuilder};
8
9static NFL: &'static str = include_str!("../../examples/data/bench/nfl.csv");
10static GAME: &'static str = include_str!("../../examples/data/bench/game.csv");
11static POP: &'static str =
12 include_str!("../../examples/data/bench/worldcitiespop.csv");
13static MBTA: &'static str =
14 include_str!("../../examples/data/bench/gtfs-mbta-stop-times.csv");
15
16macro_rules! bench {
17 ($name:ident, $data:ident, $counter:ident, $result:expr) => {
18 bench!($name, $data, $counter, $result, false);
19 };
20 ($name:ident, $data:ident, $counter:ident, $result:expr, NFA) => {
21 bench!($name, $data, $counter, $result, true);
22 };
23 ($name:ident, $data:ident, $counter:ident, $result:expr, $nfa:expr) => {
24 #[bench]
25 fn $name(b: &mut Bencher) {
26 let data = $data.as_bytes();
27 b.bytes = data.len() as u64;
28 let mut rdr = ReaderBuilder::new().nfa($nfa).build();
29 b.iter(|| {
30 rdr.reset();
31 assert_eq!($counter(&mut rdr, data), $result);
32 })
33 }
34 };
35}
36
37bench!(count_nfl_field_copy_dfa, NFL, count_fields, 130000);
38bench!(count_nfl_field_copy_nfa, NFL, count_fields, 130000, NFA);
39bench!(count_nfl_record_copy_dfa, NFL, count_records, 10000);
40bench!(count_nfl_record_copy_nfa, NFL, count_records, 10000, NFA);
41
42bench!(count_game_field_copy_dfa, GAME, count_fields, 600000);
43bench!(count_game_field_copy_nfa, GAME, count_fields, 600000, NFA);
44bench!(count_game_record_copy_dfa, GAME, count_records, 100000);
45bench!(count_game_record_copy_nfa, GAME, count_records, 100000, NFA);
46
47bench!(count_pop_field_copy_dfa, POP, count_fields, 140007);
48bench!(count_pop_field_copy_nfa, POP, count_fields, 140007, NFA);
49bench!(count_pop_record_copy_dfa, POP, count_records, 20001);
50bench!(count_pop_record_copy_nfa, POP, count_records, 20001, NFA);
51
52bench!(count_mbta_field_copy_dfa, MBTA, count_fields, 90000);
53bench!(count_mbta_field_copy_nfa, MBTA, count_fields, 90000, NFA);
54bench!(count_mbta_record_copy_dfa, MBTA, count_records, 10000);
55bench!(count_mbta_record_copy_nfa, MBTA, count_records, 10000, NFA);
56
57fn count_fields(rdr: &mut Reader, mut data: &[u8]) -> u64 {
58 use csv_core::ReadFieldResult::*;
59
60 let mut count = 0;
61 let mut field = [0u8; 1024];
62 loop {
63 let (res, nin, _) = rdr.read_field(data, &mut field);
64 data = &data[nin..];
65 match res {
66 InputEmpty => {}
67 OutputFull => panic!("field too large"),
68 Field { .. } => {
69 count += 1;
70 }
71 End => break,
72 }
73 }
74 count
75}
76
77fn count_records(rdr: &mut Reader, mut data: &[u8]) -> u64 {
78 use csv_core::ReadRecordResult::*;
79
80 let mut count = 0;
81 let mut record = [0; 8192];
82 let mut ends = [0; 32];
83 loop {
84 let (res, nin, _, _) = rdr.read_record(data, &mut record, &mut ends);
85 data = &data[nin..];
86 match res {
87 InputEmpty => {}
88 OutputFull | OutputEndsFull => panic!("field too large"),
89 Record => count += 1,
90 End => break,
91 }
92 }
93 count
94}