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
// // #![feature(hashmap_hasher)]
//
// extern crate rand;
// extern crate time;
// extern crate getopts;
// extern crate timely;
// extern crate graph_map;
// extern crate differential_dataflow;
//
// // use std::collections::HashMap;
// // use std::collections::hash_state::DefaultState;
// use std::hash::{Hash, SipHasher, Hasher};
//
// fn hash_me<T: Hash>(x: &T) -> u64 {
// let mut h = SipHasher::new();
// x.hash(&mut h);
// h.finish()
// }
//
// use rand::{Rng, SeedableRng, StdRng};
//
// use differential_dataflow::collection_trace::hash_index::HashIndex;
//
// fn main() {
// for i in 25..26 {
// test_index(i);
// }
// }
//
// fn test_index(log_size: usize) {
//
// // let default_state: DefaultState<SipHasher> = Default::default();
// // let mut hash = HashMap::with_capacity_and_hash_state(1 << log_size, default_state);
// let mut hash_index = HashIndex::<(u64, (u64, u64)), (u64, u64), _>::new(|x| x.0);
// let mut hash_index2 = HashIndex::<(u64, u64), (u64, u64), _>::new(|x| x.0 ^ x.1);
//
// let seed: &[_] = &[1, 2, 3, 4];
// let mut rng: StdRng = SeedableRng::from_seed(seed);
//
// // let start = time::precise_time_ns();
// // for i in 0u64..(1 << log_size) {
// // hash.insert((i,i),(i,i));
// // }
// //
// // println!("loaded hash_map 2^{}:\t{:.2e} ns; capacity: {}", log_size, (time::precise_time_ns() - start) as f64, hash.capacity());
//
// let start = time::precise_time_ns();
// for _ in 0u64..(1 << log_size) {
// let key = (rng.next_u64(), rng.next_u64());
// hash_index.entry_or_insert((key.0 ^ key.1, key), || key);
// }
//
// println!("loaded hash_index 2^{}:\t{:.2e} ns; capacity: {}", log_size, (time::precise_time_ns() - start) as f64, hash_index.capacity());
//
// let start = time::precise_time_ns();
// for _ in 0u64..(1 << log_size) {
// let key = (rng.next_u64(), rng.next_u64());
// hash_index2.entry_or_insert(key, || key);
// }
//
// println!("loaded hash_index 3^{}:\t{:.2e} ns; capacity: {}", log_size, (time::precise_time_ns() - start) as f64, hash_index.capacity());
//
// for query in 0..log_size {
//
// // let mut hash1_tally = 0;
// let mut hash2_tally = 0;
// let mut hash3_tally = 0;
//
// for _ in 0..10 {
// let mut vec = vec![];
//
// for _ in 0..(1 << query) {
// let key = (rng.next_u64(), rng.next_u64());
// vec.push((hash_me(&key), key));
// }
//
// // // vec.sort_by(|x,y| (x.0 & ((1 << (log_size + 1)) - 1)).cmp(&(y.0 & ((1 << (log_size + 1)) - 1))));
// // let start = time::precise_time_ns();
// // for i in vec.iter() {
// // assert!(hash.get(&i.1).is_none());
// // }
// // hash1_tally += time::precise_time_ns() - start;
//
//
// // vec.sort_by(|x,y| ((x.1).0 ^ (x.1).1).cmp(&((y.1).0 ^ (y.1).1)));
// let start = time::precise_time_ns();
// for i in vec.iter() {
// assert!(hash_index.get_ref(&((i.1).0 ^ (i.1).1, i.1)).is_none());
// }
// hash2_tally += time::precise_time_ns() - start;
//
// let start = time::precise_time_ns();
// for i in vec.iter() {
// assert!(hash_index2.get_ref(&i.1).is_none());
// }
// hash3_tally += time::precise_time_ns() - start;
// vec.clear();
// }
//
// println!("\t2^{}:\t{}\t{}\t{}", query, "STABILITY BOO", (hash2_tally / 10) >> query, (hash3_tally / 10) >> query);
//
// }
// }