Skip to content

Commit

Permalink
Merge pull request rust-num#262 from Xaeroxe23/master
Browse files Browse the repository at this point in the history
Add clamp function
  • Loading branch information
cuviper authored Feb 9, 2017
2 parents 817ab00 + c78a48f commit d561e4b
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ pub use num_traits::{Num, Zero, One, Signed, Unsigned, Bounded,
one, zero, abs, abs_sub, signum,
Saturating, CheckedAdd, CheckedSub, CheckedMul, CheckedDiv,
PrimInt, Float, ToPrimitive, FromPrimitive, NumCast, cast,
pow, checked_pow};
pow, checked_pow, clamp};

#[cfg(feature = "num-bigint")]
pub mod bigint {
Expand Down
30 changes: 30 additions & 0 deletions traits/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,36 @@ macro_rules! float_trait_impl {
}
float_trait_impl!(Num for f32 f64);

/// A value bounded by a minimum and a maximum
///
/// If input is less than min then this returns min.
/// If input is greater than max then this returns max.
/// Otherwise this returns input.
#[inline]
pub fn clamp<T: PartialOrd>(input: T, min: T, max: T) -> T {
debug_assert!(min <= max, "min must be less than or equal to max");
if input < min {
min
} else if input > max {
max
} else {
input
}
}

#[test]
fn clamp_test() {
// Int test
assert_eq!(1, clamp(1, -1, 2));
assert_eq!(-1, clamp(-2, -1, 2));
assert_eq!(2, clamp(3, -1, 2));

// Float test
assert_eq!(1.0, clamp(1.0, -1.0, 2.0));
assert_eq!(-1.0, clamp(-2.0, -1.0, 2.0));
assert_eq!(2.0, clamp(3.0, -1.0, 2.0));
}

#[test]
fn from_str_radix_unwrap() {
// The Result error must impl Debug to allow unwrap()
Expand Down

0 comments on commit d561e4b

Please sign in to comment.