Skip to content

Commit 61d7b3e

Browse files
Rollup merge of #56126 - Turbo87:bench-parse, r=alexcrichton
core/benches/num: Add `from_str/from_str_radix()` benchmarks This was extracted from #55973 /cc @alexcrichton
2 parents 6afecfd + e538a4a commit 61d7b3e

File tree

1 file changed

+105
-0
lines changed

1 file changed

+105
-0
lines changed

Diff for: src/libcore/benches/num/mod.rs

+105
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,108 @@
1010

1111
mod flt2dec;
1212
mod dec2flt;
13+
14+
use test::Bencher;
15+
use std::str::FromStr;
16+
17+
const ASCII_NUMBERS: [&str; 19] = [
18+
"0",
19+
"1",
20+
"2",
21+
"43",
22+
"765",
23+
"76567",
24+
"987245987",
25+
"-4aa32",
26+
"1786235",
27+
"8723095",
28+
"f##5s",
29+
"83638730",
30+
"-2345",
31+
"562aa43",
32+
"-1",
33+
"-0",
34+
"abc",
35+
"xyz",
36+
"c0ffee",
37+
];
38+
39+
macro_rules! from_str_bench {
40+
($mac:ident, $t:ty) => (
41+
#[bench]
42+
fn $mac(b: &mut Bencher) {
43+
b.iter(|| {
44+
ASCII_NUMBERS
45+
.iter()
46+
.cycle()
47+
.take(5_000)
48+
.filter_map(|s| <($t)>::from_str(s).ok())
49+
.max()
50+
})
51+
}
52+
)
53+
}
54+
55+
macro_rules! from_str_radix_bench {
56+
($mac:ident, $t:ty, $radix:expr) => (
57+
#[bench]
58+
fn $mac(b: &mut Bencher) {
59+
b.iter(|| {
60+
ASCII_NUMBERS
61+
.iter()
62+
.cycle()
63+
.take(5_000)
64+
.filter_map(|s| <($t)>::from_str_radix(s, $radix).ok())
65+
.max()
66+
})
67+
}
68+
)
69+
}
70+
71+
from_str_bench!(bench_u8_from_str, u8);
72+
from_str_radix_bench!(bench_u8_from_str_radix_2, u8, 2);
73+
from_str_radix_bench!(bench_u8_from_str_radix_10, u8, 10);
74+
from_str_radix_bench!(bench_u8_from_str_radix_16, u8, 16);
75+
from_str_radix_bench!(bench_u8_from_str_radix_36, u8, 36);
76+
77+
from_str_bench!(bench_u16_from_str, u16);
78+
from_str_radix_bench!(bench_u16_from_str_radix_2, u16, 2);
79+
from_str_radix_bench!(bench_u16_from_str_radix_10, u16, 10);
80+
from_str_radix_bench!(bench_u16_from_str_radix_16, u16, 16);
81+
from_str_radix_bench!(bench_u16_from_str_radix_36, u16, 36);
82+
83+
from_str_bench!(bench_u32_from_str, u32);
84+
from_str_radix_bench!(bench_u32_from_str_radix_2, u32, 2);
85+
from_str_radix_bench!(bench_u32_from_str_radix_10, u32, 10);
86+
from_str_radix_bench!(bench_u32_from_str_radix_16, u32, 16);
87+
from_str_radix_bench!(bench_u32_from_str_radix_36, u32, 36);
88+
89+
from_str_bench!(bench_u64_from_str, u64);
90+
from_str_radix_bench!(bench_u64_from_str_radix_2, u64, 2);
91+
from_str_radix_bench!(bench_u64_from_str_radix_10, u64, 10);
92+
from_str_radix_bench!(bench_u64_from_str_radix_16, u64, 16);
93+
from_str_radix_bench!(bench_u64_from_str_radix_36, u64, 36);
94+
95+
from_str_bench!(bench_i8_from_str, i8);
96+
from_str_radix_bench!(bench_i8_from_str_radix_2, i8, 2);
97+
from_str_radix_bench!(bench_i8_from_str_radix_10, i8, 10);
98+
from_str_radix_bench!(bench_i8_from_str_radix_16, i8, 16);
99+
from_str_radix_bench!(bench_i8_from_str_radix_36, i8, 36);
100+
101+
from_str_bench!(bench_i16_from_str, i16);
102+
from_str_radix_bench!(bench_i16_from_str_radix_2, i16, 2);
103+
from_str_radix_bench!(bench_i16_from_str_radix_10, i16, 10);
104+
from_str_radix_bench!(bench_i16_from_str_radix_16, i16, 16);
105+
from_str_radix_bench!(bench_i16_from_str_radix_36, i16, 36);
106+
107+
from_str_bench!(bench_i32_from_str, i32);
108+
from_str_radix_bench!(bench_i32_from_str_radix_2, i32, 2);
109+
from_str_radix_bench!(bench_i32_from_str_radix_10, i32, 10);
110+
from_str_radix_bench!(bench_i32_from_str_radix_16, i32, 16);
111+
from_str_radix_bench!(bench_i32_from_str_radix_36, i32, 36);
112+
113+
from_str_bench!(bench_i64_from_str, i64);
114+
from_str_radix_bench!(bench_i64_from_str_radix_2, i64, 2);
115+
from_str_radix_bench!(bench_i64_from_str_radix_10, i64, 10);
116+
from_str_radix_bench!(bench_i64_from_str_radix_16, i64, 16);
117+
from_str_radix_bench!(bench_i64_from_str_radix_36, i64, 36);

0 commit comments

Comments
 (0)