/// * `pdf`: the probability density function
/// * `zero_case`: manual sampling from the tail when we chose the
/// bottom box (i.e. i == 0)
+
// the perf improvement (25-50%) is definitely worth the extra code
// size from force-inlining.
#[inline(always)]
assert_eq!(rand_sample.ind_sample(&mut ::test::rng()), ConstRand(0));
}
#[test]
+ #[rustfmt_skip]
fn test_weighted_choice() {
// this makes assumptions about the internal implementation of
// WeightedChoice, specifically: it doesn't reorder the items,
}}
}
- t!(vec!(Weighted {
- weight: 1,
- item: 10,
- }),
+ t!(vec!(Weighted { weight: 1, item: 10 }),
[10]);
// skip some
- t!(vec!(Weighted {
- weight: 0,
- item: 20,
- },
- Weighted {
- weight: 2,
- item: 21,
- },
- Weighted {
- weight: 0,
- item: 22,
- },
- Weighted {
- weight: 1,
- item: 23,
- }),
+ t!(vec!(Weighted { weight: 0, item: 20 },
+ Weighted { weight: 2, item: 21 },
+ Weighted { weight: 0, item: 22 },
+ Weighted { weight: 1, item: 23 }),
[21, 21, 23]);
// different weights
- t!(vec!(Weighted {
- weight: 4,
- item: 30,
- },
- Weighted {
- weight: 3,
- item: 31,
- }),
+ t!(vec!(Weighted { weight: 4, item: 30 },
+ Weighted { weight: 3, item: 31 }),
[30, 30, 30, 30, 31, 31, 31]);
// check that we're binary searching
// correctly with some vectors of odd
// length.
- t!(vec!(Weighted {
- weight: 1,
- item: 40,
- },
- Weighted {
- weight: 1,
- item: 41,
- },
- Weighted {
- weight: 1,
- item: 42,
- },
- Weighted {
- weight: 1,
- item: 43,
- },
- Weighted {
- weight: 1,
- item: 44,
- }),
+ t!(vec!(Weighted { weight: 1, item: 40 },
+ Weighted { weight: 1, item: 41 },
+ Weighted { weight: 1, item: 42 },
+ Weighted { weight: 1, item: 43 },
+ Weighted { weight: 1, item: 44 }),
[40, 41, 42, 43, 44]);
- t!(vec!(Weighted {
- weight: 1,
- item: 50,
- },
- Weighted {
- weight: 1,
- item: 51,
- },
- Weighted {
- weight: 1,
- item: 52,
- },
- Weighted {
- weight: 1,
- item: 53,
- },
- Weighted {
- weight: 1,
- item: 54,
- },
- Weighted {
- weight: 1,
- item: 55,
- },
- Weighted {
- weight: 1,
- item: 56,
- }),
+ t!(vec!(Weighted { weight: 1, item: 50 },
+ Weighted { weight: 1, item: 51 },
+ Weighted { weight: 1, item: 52 },
+ Weighted { weight: 1, item: 53 },
+ Weighted { weight: 1, item: 54 },
+ Weighted { weight: 1, item: 55 },
+ Weighted { weight: 1, item: 56 }),
[50, 51, 52, 53, 54, 55, 56]);
}
}
#[test]
#[should_panic]
+ #[rustfmt_skip]
fn test_weighted_choice_zero_weight() {
- WeightedChoice::new(&mut [Weighted {
- weight: 0,
- item: 0,
- },
- Weighted {
- weight: 0,
- item: 1,
- }]);
+ WeightedChoice::new(&mut [Weighted { weight: 0, item: 0 },
+ Weighted { weight: 0, item: 1 }]);
}
#[test]
#[should_panic]
+ #[rustfmt_skip]
fn test_weighted_choice_weight_overflows() {
let x = (!0) as usize / 2; // x + x + 2 is the overflow
- WeightedChoice::new(&mut [Weighted {
- weight: x,
- item: 0,
- },
- Weighted {
- weight: 1,
- item: 1,
- },
- Weighted {
- weight: x,
- item: 2,
- },
- Weighted {
- weight: 1,
- item: 3,
- }]);
+ WeightedChoice::new(&mut [Weighted { weight: x, item: 0 },
+ Weighted { weight: 1, item: 1 },
+ Weighted { weight: x, item: 2 },
+ Weighted { weight: 1, item: 3 }]);
}
}