1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
/*
Copyright 2024 Owain Davies
SPDX-License-Identifier: Apache-2.0 OR MIT
*/
use crate::Arbi;
use core::cmp::Ordering;
impl Arbi {
/// Returns a number representing the sign of `self`.
/// - `0` if the number if zero.
/// - `1` if the number if positive.
/// - `-1` if the number is negative.
///
/// # Examples
/// ```
/// use arbi::Arbi;
///
/// let zero = Arbi::zero();
/// assert_eq!(zero.signum(), 0);
/// assert_eq!(0i32.signum(), 0);
///
/// let one = Arbi::one();
/// assert_eq!(one.signum(), 1);
/// assert_eq!(1i32.signum(), 1);
///
/// let neg_one = Arbi::neg_one();
/// assert_eq!(neg_one.signum(), -1);
/// assert_eq!((-1i32).signum(), -1);
/// ```
///
/// # Complexity
/// \\( O(1) \\)
pub fn signum(&self) -> i32 {
match self.sign() {
Ordering::Equal => 0,
Ordering::Greater => 1,
Ordering::Less => -1,
}
}
}