Skip to content

Commit d96da8a

Browse files
committed
mv std libs to library/
0 parents  commit d96da8a

File tree

744 files changed

+266230
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

744 files changed

+266230
-0
lines changed

alloc/Cargo.toml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[package]
2+
authors = ["The Rust Project Developers"]
3+
name = "alloc"
4+
version = "0.0.0"
5+
autotests = false
6+
autobenches = false
7+
edition = "2018"
8+
9+
[dependencies]
10+
core = { path = "../core" }
11+
compiler_builtins = { version = "0.1.10", features = ['rustc-dep-of-std'] }
12+
13+
[dev-dependencies]
14+
rand = "0.7"
15+
rand_xorshift = "0.2"
16+
17+
[[test]]
18+
name = "collectionstests"
19+
path = "tests/lib.rs"
20+
21+
[[bench]]
22+
name = "collectionsbenches"
23+
path = "benches/lib.rs"
24+
test = true
25+
26+
[[bench]]
27+
name = "vec_deque_append_bench"
28+
path = "benches/vec_deque_append.rs"
29+
harness = false
30+
31+
[features]
32+
compiler-builtins-mem = ['compiler_builtins/mem']
33+
compiler-builtins-c = ["compiler_builtins/c"]

alloc/benches/btree/map.rs

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
use std::collections::BTreeMap;
2+
use std::iter::Iterator;
3+
use std::ops::RangeBounds;
4+
use std::vec::Vec;
5+
6+
use rand::{seq::SliceRandom, thread_rng, Rng};
7+
use test::{black_box, Bencher};
8+
9+
macro_rules! map_insert_rand_bench {
10+
($name: ident, $n: expr, $map: ident) => {
11+
#[bench]
12+
pub fn $name(b: &mut Bencher) {
13+
let n: usize = $n;
14+
let mut map = $map::new();
15+
// setup
16+
let mut rng = thread_rng();
17+
18+
for _ in 0..n {
19+
let i = rng.gen::<usize>() % n;
20+
map.insert(i, i);
21+
}
22+
23+
// measure
24+
b.iter(|| {
25+
let k = rng.gen::<usize>() % n;
26+
map.insert(k, k);
27+
map.remove(&k);
28+
});
29+
black_box(map);
30+
}
31+
};
32+
}
33+
34+
macro_rules! map_insert_seq_bench {
35+
($name: ident, $n: expr, $map: ident) => {
36+
#[bench]
37+
pub fn $name(b: &mut Bencher) {
38+
let mut map = $map::new();
39+
let n: usize = $n;
40+
// setup
41+
for i in 0..n {
42+
map.insert(i * 2, i * 2);
43+
}
44+
45+
// measure
46+
let mut i = 1;
47+
b.iter(|| {
48+
map.insert(i, i);
49+
map.remove(&i);
50+
i = (i + 2) % n;
51+
});
52+
black_box(map);
53+
}
54+
};
55+
}
56+
57+
macro_rules! map_find_rand_bench {
58+
($name: ident, $n: expr, $map: ident) => {
59+
#[bench]
60+
pub fn $name(b: &mut Bencher) {
61+
let mut map = $map::new();
62+
let n: usize = $n;
63+
64+
// setup
65+
let mut rng = thread_rng();
66+
let mut keys: Vec<_> = (0..n).map(|_| rng.gen::<usize>() % n).collect();
67+
68+
for &k in &keys {
69+
map.insert(k, k);
70+
}
71+
72+
keys.shuffle(&mut rng);
73+
74+
// measure
75+
let mut i = 0;
76+
b.iter(|| {
77+
let t = map.get(&keys[i]);
78+
i = (i + 1) % n;
79+
black_box(t);
80+
})
81+
}
82+
};
83+
}
84+
85+
macro_rules! map_find_seq_bench {
86+
($name: ident, $n: expr, $map: ident) => {
87+
#[bench]
88+
pub fn $name(b: &mut Bencher) {
89+
let mut map = $map::new();
90+
let n: usize = $n;
91+
92+
// setup
93+
for i in 0..n {
94+
map.insert(i, i);
95+
}
96+
97+
// measure
98+
let mut i = 0;
99+
b.iter(|| {
100+
let x = map.get(&i);
101+
i = (i + 1) % n;
102+
black_box(x);
103+
})
104+
}
105+
};
106+
}
107+
108+
map_insert_rand_bench! {insert_rand_100, 100, BTreeMap}
109+
map_insert_rand_bench! {insert_rand_10_000, 10_000, BTreeMap}
110+
111+
map_insert_seq_bench! {insert_seq_100, 100, BTreeMap}
112+
map_insert_seq_bench! {insert_seq_10_000, 10_000, BTreeMap}
113+
114+
map_find_rand_bench! {find_rand_100, 100, BTreeMap}
115+
map_find_rand_bench! {find_rand_10_000, 10_000, BTreeMap}
116+
117+
map_find_seq_bench! {find_seq_100, 100, BTreeMap}
118+
map_find_seq_bench! {find_seq_10_000, 10_000, BTreeMap}
119+
120+
fn bench_iteration(b: &mut Bencher, size: i32) {
121+
let mut map = BTreeMap::<i32, i32>::new();
122+
let mut rng = thread_rng();
123+
124+
for _ in 0..size {
125+
map.insert(rng.gen(), rng.gen());
126+
}
127+
128+
b.iter(|| {
129+
for entry in &map {
130+
black_box(entry);
131+
}
132+
});
133+
}
134+
135+
#[bench]
136+
pub fn iteration_20(b: &mut Bencher) {
137+
bench_iteration(b, 20);
138+
}
139+
140+
#[bench]
141+
pub fn iteration_1000(b: &mut Bencher) {
142+
bench_iteration(b, 1000);
143+
}
144+
145+
#[bench]
146+
pub fn iteration_100000(b: &mut Bencher) {
147+
bench_iteration(b, 100000);
148+
}
149+
150+
fn bench_iteration_mut(b: &mut Bencher, size: i32) {
151+
let mut map = BTreeMap::<i32, i32>::new();
152+
let mut rng = thread_rng();
153+
154+
for _ in 0..size {
155+
map.insert(rng.gen(), rng.gen());
156+
}
157+
158+
b.iter(|| {
159+
for kv in map.iter_mut() {
160+
black_box(kv);
161+
}
162+
});
163+
}
164+
165+
#[bench]
166+
pub fn iteration_mut_20(b: &mut Bencher) {
167+
bench_iteration_mut(b, 20);
168+
}
169+
170+
#[bench]
171+
pub fn iteration_mut_1000(b: &mut Bencher) {
172+
bench_iteration_mut(b, 1000);
173+
}
174+
175+
#[bench]
176+
pub fn iteration_mut_100000(b: &mut Bencher) {
177+
bench_iteration_mut(b, 100000);
178+
}
179+
180+
fn bench_first_and_last(b: &mut Bencher, size: i32) {
181+
let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();
182+
b.iter(|| {
183+
for _ in 0..10 {
184+
black_box(map.first_key_value());
185+
black_box(map.last_key_value());
186+
}
187+
});
188+
}
189+
190+
#[bench]
191+
pub fn first_and_last_0(b: &mut Bencher) {
192+
bench_first_and_last(b, 0);
193+
}
194+
195+
#[bench]
196+
pub fn first_and_last_100(b: &mut Bencher) {
197+
bench_first_and_last(b, 100);
198+
}
199+
200+
#[bench]
201+
pub fn first_and_last_10k(b: &mut Bencher) {
202+
bench_first_and_last(b, 10_000);
203+
}
204+
205+
const BENCH_RANGE_SIZE: i32 = 145;
206+
const BENCH_RANGE_COUNT: i32 = BENCH_RANGE_SIZE * (BENCH_RANGE_SIZE - 1) / 2;
207+
208+
fn bench_range<F, R>(b: &mut Bencher, f: F)
209+
where
210+
F: Fn(i32, i32) -> R,
211+
R: RangeBounds<i32>,
212+
{
213+
let map: BTreeMap<_, _> = (0..BENCH_RANGE_SIZE).map(|i| (i, i)).collect();
214+
b.iter(|| {
215+
let mut c = 0;
216+
for i in 0..BENCH_RANGE_SIZE {
217+
for j in i + 1..BENCH_RANGE_SIZE {
218+
black_box(map.range(f(i, j)));
219+
c += 1;
220+
}
221+
}
222+
debug_assert_eq!(c, BENCH_RANGE_COUNT);
223+
});
224+
}
225+
226+
#[bench]
227+
pub fn range_included_excluded(b: &mut Bencher) {
228+
bench_range(b, |i, j| i..j);
229+
}
230+
231+
#[bench]
232+
pub fn range_included_included(b: &mut Bencher) {
233+
bench_range(b, |i, j| i..=j);
234+
}
235+
236+
#[bench]
237+
pub fn range_included_unbounded(b: &mut Bencher) {
238+
bench_range(b, |i, _| i..);
239+
}
240+
241+
#[bench]
242+
pub fn range_unbounded_unbounded(b: &mut Bencher) {
243+
bench_range(b, |_, _| ..);
244+
}
245+
246+
fn bench_iter(b: &mut Bencher, repeats: i32, size: i32) {
247+
let map: BTreeMap<_, _> = (0..size).map(|i| (i, i)).collect();
248+
b.iter(|| {
249+
for _ in 0..repeats {
250+
black_box(map.iter());
251+
}
252+
});
253+
}
254+
255+
/// Contrast range_unbounded_unbounded with `iter()`.
256+
#[bench]
257+
pub fn range_unbounded_vs_iter(b: &mut Bencher) {
258+
bench_iter(b, BENCH_RANGE_COUNT, BENCH_RANGE_SIZE);
259+
}
260+
261+
#[bench]
262+
pub fn iter_0(b: &mut Bencher) {
263+
bench_iter(b, 1_000, 0);
264+
}
265+
266+
#[bench]
267+
pub fn iter_1(b: &mut Bencher) {
268+
bench_iter(b, 1_000, 1);
269+
}
270+
271+
#[bench]
272+
pub fn iter_100(b: &mut Bencher) {
273+
bench_iter(b, 1_000, 100);
274+
}
275+
276+
#[bench]
277+
pub fn iter_10k(b: &mut Bencher) {
278+
bench_iter(b, 1_000, 10_000);
279+
}
280+
281+
#[bench]
282+
pub fn iter_1m(b: &mut Bencher) {
283+
bench_iter(b, 1_000, 1_000_000);
284+
}

alloc/benches/btree/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
mod map;
2+
mod set;

0 commit comments

Comments
 (0)