File: hash.rs

package info (click to toggle)
rustc 1.86.0%2Bdfsg1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental, forky, sid
  • size: 913,560 kB
  • sloc: xml: 158,127; python: 35,921; javascript: 19,689; sh: 19,600; cpp: 18,906; ansic: 13,124; asm: 4,376; makefile: 708; perl: 29; lisp: 29; ruby: 19; sql: 11
file content (70 lines) | stat: -rw-r--r-- 2,082 bytes parent folder | download | duplicates (12)
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
use criterion::{criterion_group, criterion_main, Criterion, Throughput};
use tenthash::{hash, TentHash};

//----

fn tent_hash_single_call(c: &mut Criterion) {
    let benches = [
        ("10b_message", 10),       // 10-byte input.
        ("100b_message", 100),     // 100-byte input.
        ("1kb_message", 1000),     // 1-kilobyte input.
        ("10kb_message", 10000),   // 10-kilobyte input.
        ("100kb_message", 100000), // 100-kilobyte input.
        ("1mb_message", 1000000),  // 1-megabyte input.
    ];

    let mut group = c.benchmark_group("tent_hash");

    for (name, data_size) in benches.iter() {
        let data: Vec<u8> = b"abcdefghijklmnopqrstuvwxyz"
            .iter()
            .copied()
            .cycle()
            .take(*data_size)
            .collect();
        group.throughput(Throughput::Bytes(*data_size as u64));

        group.bench_function(*name, |bench| {
            bench.iter(|| {
                let _ = hash(&data);
            })
        });
    }
}

fn tent_hash_streaming(c: &mut Criterion) {
    let benches = [
        ("10b_chunks", 10),     // 10-byte chunks.
        ("100b_chunks", 100),   // 100-byte chunks.
        ("1kb_chunks", 1000),   // 1-kilobyte chunks.
        ("10kb_chunks", 10000), // 10-kilobyte chunks.
    ];

    let mut group = c.benchmark_group("tent_hash_streaming");

    for (name, chunk_size) in benches.iter() {
        let data_size = 100000;
        let data: Vec<u8> = b"abcdefghijklmnopqrstuvwxyz"
            .iter()
            .copied()
            .cycle()
            .take(data_size)
            .collect();
        group.throughput(Throughput::Bytes(data_size as u64));

        group.bench_function(*name, |bench| {
            bench.iter(|| {
                let mut hash = TentHash::new();
                for chunk in data.chunks(*chunk_size) {
                    hash.update(chunk);
                }
                hash.finalize();
            })
        });
    }
}

//----

criterion_group!(benches, tent_hash_single_call, tent_hash_streaming);
criterion_main!(benches);