diem_infallible/
nonzero.rs

1// Copyright (c) The Diem Core Contributors
2// SPDX-License-Identifier: Apache-2.0
3
4// Copyright 2021 Conflux Foundation. All rights reserved.
5// Conflux is free software and distributed under GNU General Public License.
6// See http://www.gnu.org/licenses/
7
8/// A wrapper around `std::num::NonZeroUsize` to no longer worry about
9/// `unwrap()`
10#[macro_export]
11macro_rules! NonZeroUsize {
12    ($num:expr) => {
13        NonZeroUsize!($num, "Must be non-zero")
14    };
15    ($num:expr, $message:literal) => {
16        std::num::NonZeroUsize::new($num).expect($message)
17    };
18}
19
20#[cfg(test)]
21mod tests {
22
23    #[test]
24    fn test_nonzero() {
25        assert_eq!(1, NonZeroUsize!(1).get());
26        assert_eq!(std::usize::MAX, NonZeroUsize!(std::usize::MAX).get());
27    }
28
29    #[test]
30    #[should_panic(expected = "Must be non-zero")]
31    fn test_zero() {
32        NonZeroUsize!(0);
33    }
34
35    #[test]
36    #[should_panic(expected = "Custom message")]
37    fn test_zero_custom_message() {
38        NonZeroUsize!(0, "Custom message");
39    }
40}