summaryrefslogtreecommitdiffstats
path: root/library/core/benches/hash/sip.rs
blob: 725c864dce9f151f976abed386be6071e4531a8c (plain)
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
118
119
120
121
122
123
#![allow(deprecated)]

use core::hash::*;
use test::{black_box, Bencher};

fn hash_bytes<H: Hasher>(mut s: H, x: &[u8]) -> u64 {
    Hasher::write(&mut s, x);
    s.finish()
}

fn hash_with<H: Hasher, T: Hash>(mut st: H, x: &T) -> u64 {
    x.hash(&mut st);
    st.finish()
}

fn hash<T: Hash>(x: &T) -> u64 {
    hash_with(SipHasher::new(), x)
}

#[bench]
fn bench_str_under_8_bytes(b: &mut Bencher) {
    let s = "foo";
    b.iter(|| {
        assert_eq!(hash(&s), 16262950014981195938);
    })
}

#[bench]
fn bench_str_of_8_bytes(b: &mut Bencher) {
    let s = "foobar78";
    b.iter(|| {
        assert_eq!(hash(&s), 4898293253460910787);
    })
}

#[bench]
fn bench_str_over_8_bytes(b: &mut Bencher) {
    let s = "foobarbaz0";
    b.iter(|| {
        assert_eq!(hash(&s), 10581415515220175264);
    })
}

#[bench]
fn bench_long_str(b: &mut Bencher) {
    let s = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor \
             incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud \
             exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute \
             irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla \
             pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui \
             officia deserunt mollit anim id est laborum.";
    b.iter(|| {
        assert_eq!(hash(&s), 17717065544121360093);
    })
}

#[bench]
fn bench_u32(b: &mut Bencher) {
    let u = 162629500u32;
    let u = black_box(u);
    b.iter(|| hash(&u));
    b.bytes = 8;
}

#[bench]
fn bench_u32_keyed(b: &mut Bencher) {
    let u = 162629500u32;
    let u = black_box(u);
    let k1 = black_box(0x1);
    let k2 = black_box(0x2);
    b.iter(|| hash_with(SipHasher::new_with_keys(k1, k2), &u));
    b.bytes = 8;
}

#[bench]
fn bench_u64(b: &mut Bencher) {
    let u = 16262950014981195938u64;
    let u = black_box(u);
    b.iter(|| hash(&u));
    b.bytes = 8;
}

#[bench]
fn bench_bytes_4(b: &mut Bencher) {
    let data = black_box([b' '; 4]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 4;
}

#[bench]
fn bench_bytes_7(b: &mut Bencher) {
    let data = black_box([b' '; 7]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 7;
}

#[bench]
fn bench_bytes_8(b: &mut Bencher) {
    let data = black_box([b' '; 8]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 8;
}

#[bench]
fn bench_bytes_a_16(b: &mut Bencher) {
    let data = black_box([b' '; 16]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 16;
}

#[bench]
fn bench_bytes_b_32(b: &mut Bencher) {
    let data = black_box([b' '; 32]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 32;
}

#[bench]
fn bench_bytes_c_128(b: &mut Bencher) {
    let data = black_box([b' '; 128]);
    b.iter(|| hash_bytes(SipHasher::default(), &data));
    b.bytes = 128;
}