ctbench_foo/
ctbench-foo.rs1use dudect_bencher::{ctbench_main_with_seeds, BenchRng, Class, CtRunner};
2use rand::Rng;
3
4fn rand_vec(len: usize, rng: &mut BenchRng) -> Vec<u8> {
6 let mut arr = vec![0u8; len];
7 rng.fill(arr.as_mut_slice());
8 arr
9}
10
11fn arith(runner: &mut CtRunner, rng: &mut BenchRng) {
13 let mut inputs = Vec::new();
14 let mut classes = Vec::new();
15
16 for _ in 0..100_000 {
18 inputs.push(rng.gen::<usize>());
19 if rng.gen::<bool>() {
21 classes.push(Class::Left);
22 } else {
23 classes.push(Class::Right);
24 }
25 }
26
27 for (u, class) in inputs.into_iter().zip(classes.into_iter()) {
28 runner.run_one(class, || ((u + 10) / 6) << 5);
30 }
31}
32
33fn vec_eq(runner: &mut CtRunner, rng: &mut BenchRng) {
36 let vlen = 100;
38 let mut inputs: Vec<(Vec<u8>, Vec<u8>)> = Vec::new();
39 let mut classes = Vec::new();
40
41 for _ in 0..100_000 {
43 if rng.gen::<bool>() {
46 let v1 = rand_vec(vlen, rng);
47 let v2 = v1.clone();
48 inputs.push((v1, v2));
49 classes.push(Class::Left);
50 }
51 else {
54 let v1 = rand_vec(vlen, rng);
55 let mut v2 = v1.clone();
56 v2[5] = 7;
57 inputs.push((v1, v2));
58 classes.push(Class::Right);
59 }
60 }
61
62 for (class, (u, v)) in classes.into_iter().zip(inputs.into_iter()) {
63 runner.run_one(class, || u == v);
65 }
66}
67
68ctbench_main_with_seeds!((arith, Some(0x6b6c816d)), (vec_eq, None));
70