3 #![warn(clippy::or_fun_call)]
6 use std::collections::BTreeMap;
7 use std::collections::HashMap;
8 use std::time::Duration;
10 /// Checks implementation of the `OR_FUN_CALL` lint.
28 let with_enum = Some(Enum::A(1));
29 with_enum.unwrap_or(Enum::A(5));
31 let with_const_fn = Some(Duration::from_secs(1));
32 with_const_fn.unwrap_or(Duration::from_secs(5));
34 let with_constructor = Some(vec![1]);
35 with_constructor.unwrap_or_else(make);
37 let with_new = Some(vec![1]);
38 with_new.unwrap_or_default();
40 let with_const_args = Some(vec![1]);
41 with_const_args.unwrap_or_else(|| Vec::with_capacity(12));
43 let with_err: Result<_, ()> = Ok(vec![1]);
44 with_err.unwrap_or_else(|_| make());
46 let with_err_args: Result<_, ()> = Ok(vec![1]);
47 with_err_args.unwrap_or_else(|_| Vec::with_capacity(12));
49 let with_default_trait = Some(1);
50 with_default_trait.unwrap_or_default();
52 let with_default_type = Some(1);
53 with_default_type.unwrap_or_default();
55 let with_vec = Some(vec![1]);
56 with_vec.unwrap_or_else(|| vec![]);
58 // FIXME #944: ~|SUGGESTION with_vec.unwrap_or_else(|| vec![]);
60 let without_default = Some(Foo);
61 without_default.unwrap_or_else(Foo::new);
63 let mut map = HashMap::<u64, String>::new();
64 map.entry(42).or_insert_with(String::new);
66 let mut btree = BTreeMap::<u64, String>::new();
67 btree.entry(42).or_insert_with(String::new);
69 let stringy = Some(String::from(""));
70 let _ = stringy.unwrap_or_else(|| "".to_owned());
74 let _ = opt.ok_or_else(|| format!("{} world.", hello));
78 struct Bar(String, Duration);
80 fn test_or_with_ctors() {
82 let opt_opt = Some(Some(1));
83 // we also test for const promotion, this makes sure we don't hit that
86 let _ = opt_opt.unwrap_or(Some(2));
87 let _ = opt_opt.unwrap_or(Some(two));
88 let _ = opt.ok_or(Some(2));
89 let _ = opt.ok_or(Some(two));
90 let _ = opt.ok_or(Foo(2));
91 let _ = opt.ok_or(Foo(two));
92 let _ = opt.or(Some(2));
93 let _ = opt.or(Some(two));
95 let _ = Some("a".to_string()).or_else(|| Some("b".to_string()));
97 let b = "b".to_string();
98 let _ = Some(Bar("a".to_string(), Duration::from_secs(1)))
99 .or(Some(Bar(b, Duration::from_secs(2))));
102 // Issue 4514 - early return
103 fn f() -> Option<()> {
107 let _ = a.unwrap_or(b.checked_mul(3)?.min(240));