-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathlogarray.rs
117 lines (100 loc) · 3.02 KB
/
logarray.rs
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#![feature(test)]
extern crate test;
use rand::prelude::*;
use tempfile::tempdir;
use test::Bencher;
use tokio::runtime::Runtime;
use terminus_store::storage::directory::*;
use terminus_store::storage::memory::*;
use terminus_store::storage::*;
use terminus_store::structure::util::stream_iter_ok;
use terminus_store::structure::LogArrayFileBuilder;
fn logarray_test(b: &mut Bencher, width: u8, size: usize, as_vec: bool) {
let rt = Runtime::new().unwrap();
let seed = b"the quick brown fox jumped over ";
let mut rand = StdRng::from_seed(*seed);
let ceil = 1 << width;
let mut data = Vec::with_capacity(size);
for _ in 0..size {
data.push(rand.gen_range(0..ceil));
}
b.iter(move || {
let file = MemoryBackedStore::new();
let data = data.clone();
rt.block_on(async move {
let w = file.open_write().await.unwrap();
let mut builder = LogArrayFileBuilder::new(w, width);
if as_vec {
builder.push_vec(data).await.unwrap();
} else {
builder.push_all(stream_iter_ok(data)).await.unwrap();
}
builder.finalize().await.unwrap();
});
});
}
fn logarray_test_persistent(b: &mut Bencher, width: u8, size: usize, as_vec: bool) {
let rt = Runtime::new().unwrap();
let seed = b"the quick brown fox jumped over ";
let mut rand = StdRng::from_seed(*seed);
let ceil = 1 << width;
let mut data = Vec::with_capacity(size);
for _ in 0..size {
data.push(rand.gen_range(0..ceil));
}
b.iter(move || {
let dir = tempdir().unwrap();
let file = FileBackedStore::new(dir.path().join("file"));
let data = data.clone();
rt.block_on(async move {
let w = file.open_write().await.unwrap();
let mut builder = LogArrayFileBuilder::new(w, width);
if as_vec {
builder.push_vec(data).await.unwrap();
} else {
builder.push_all(stream_iter_ok(data)).await.unwrap();
}
builder.finalize().await.unwrap();
});
});
}
#[bench]
fn logarray_w5_empty(b: &mut Bencher) {
logarray_test(b, 5, 0, true);
}
#[bench]
fn logarray_w5_1(b: &mut Bencher) {
logarray_test(b, 5, 1, true);
}
#[bench]
fn logarray_w5_10(b: &mut Bencher) {
logarray_test(b, 5, 10, true);
}
#[bench]
fn logarray_w5_100(b: &mut Bencher) {
logarray_test(b, 5, 100, true);
}
#[bench]
fn logarray_w5_1000(b: &mut Bencher) {
logarray_test(b, 5, 1000, true);
}
#[bench]
fn logarray_w5_10000(b: &mut Bencher) {
logarray_test(b, 5, 10000, true);
}
#[bench]
fn logarray_w5_10000_as_stream(b: &mut Bencher) {
logarray_test(b, 5, 10000, false);
}
#[bench]
fn logarray_w5_10000_persistent(b: &mut Bencher) {
logarray_test_persistent(b, 5, 10000, true);
}
#[bench]
fn logarray_w5_10000_persistent_as_stream(b: &mut Bencher) {
logarray_test_persistent(b, 5, 10000, false);
}
#[bench]
fn logarray_w10_1000(b: &mut Bencher) {
logarray_test(b, 10, 1000, true);
}