1#![deny(missing_docs)]
4
5pub trait BoolUtils {
7 fn toggle(&mut self);
9
10 fn select<T>(self, on_true: T, on_false: T) -> T;
12}
13
14impl BoolUtils for bool {
15 fn toggle(&mut self) {
16 *self = !*self;
17 }
18
19 fn select<T>(self, on_true: T, on_false: T) -> T {
20 if self {
21 on_true
22 } else {
23 on_false
24 }
25 }
26}
27
28#[test]
29fn test_toggle() {
30 let mut flag = true;
31 flag.toggle();
32 assert!(!flag);
33 flag.toggle();
34 assert!(flag);
35}
36
37#[test]
38fn test_select() {
39 let flag = true;
40 let value = flag.select(10, 20);
41 assert_eq!(value, 10);
42
43 let flag = false;
44 let value = flag.select(10, 20);
45 assert_eq!(value, 20);
46}