Browse Source

cuckoo: add parameter executable

Lennart Braun 2 years ago
parent
commit
5ddce08343
2 changed files with 32 additions and 0 deletions
  1. 4 0
      cuckoo/Cargo.toml
  2. 28 0
      cuckoo/src/bin/params.rs

+ 4 - 0
cuckoo/Cargo.toml

@@ -15,6 +15,10 @@ rand_chacha = "0.3.1"
 [dev-dependencies]
 criterion = "0.4.0"
 
+[[bin]]
+name = "params"
+path = "src/bin/params.rs"
+
 [[bench]]
 name = "cuckoo"
 harness = false

+ 28 - 0
cuckoo/src/bin/params.rs

@@ -0,0 +1,28 @@
+use cuckoo::cuckoo::{Hasher, Parameters};
+use cuckoo::hash::AesHashFunction;
+
+fn main() {
+    let log_domain_sizes = [4, 8, 12, 16, 20, 24, 26];
+
+    println!("domain  inputs  #bucks  maxbucks  avgbucks  #emptybucks");
+
+    for log_domain_size in log_domain_sizes {
+        let log_number_inputs = log_domain_size / 2;
+        let params = Parameters::<AesHashFunction<u32>, _>::sample(1 << log_number_inputs);
+        let number_buckets = params.get_number_buckets();
+        let hasher = Hasher::new(params);
+        let buckets = hasher.hash_domain_into_buckets(1 << log_domain_size);
+        let max_bucket_size = buckets.iter().map(|b| b.len()).max().unwrap();
+        let avg_bucket_size = buckets.iter().map(|b| b.len()).sum::<usize>() / number_buckets;
+        let number_empty_buckets = buckets.iter().map(|b| b.len()).filter(|&l| l == 0).count();
+        println!(
+            "{:6}  {:6}  {:6}  {:8}  {:8}  {:11}",
+            log_domain_size,
+            log_number_inputs,
+            number_buckets,
+            max_bucket_size,
+            avg_bucket_size,
+            number_empty_buckets
+        );
+    }
+}