saturating_scale: add test
This commit is contained in:
parent
b0052128e0
commit
45bbfe186f
@ -70,7 +70,7 @@ impl Unwrapper {
|
||||
mod tests {
|
||||
use super::*;
|
||||
#[test]
|
||||
fn mini() {
|
||||
fn overflowing_sub_correctness() {
|
||||
for (x0, x1, v) in [
|
||||
(0i32, 0i32, 0i8),
|
||||
(0, 1, 0),
|
||||
@ -101,4 +101,42 @@ mod tests {
|
||||
assert_eq!(dx, dx0);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn saturating_scale_correctness() {
|
||||
let shift = 8;
|
||||
for (lo, hi, res) in [
|
||||
(0i32, 0i32, 0i32),
|
||||
(0, 1, 0x0100_0000),
|
||||
(0, -1, -0x0100_0000),
|
||||
(0x100, 0, 1),
|
||||
(-1 << 31, 0, -1 << 23),
|
||||
(0x7fffffff, 0, 0x007f_ffff),
|
||||
(0x7fffffff, 1, 0x0017f_ffff),
|
||||
(-0x7fffffff, -1, -0x0180_0000),
|
||||
(0x1234_5600, 0x7f, 0x7f12_3456),
|
||||
(0x1234_5600, -0x7f, -0x7f00_0000 + 0x12_3456),
|
||||
(0, 0x7f, 0x7f00_0000),
|
||||
(0, 0x80, 0x7fff_ff80),
|
||||
(0, -0x7f, -0x7f00_0000),
|
||||
(0, -0x80, -0x7fff_ff80),
|
||||
(0x7fff_ffff, 0x7f, 0x7f7f_ffff),
|
||||
(-0x8000_0000, 0x7f, 0x7e80_0000),
|
||||
(-0x8000_0000, -0x7f, -0x7f80_0000),
|
||||
(0x7fff_ffff, -0x7f, -0x7e80_0001),
|
||||
(0x100, 0x7f, 0x7f00_0001),
|
||||
(0, -0x80, -0x7fff_ff80),
|
||||
(-1 << 31, 0x80, 0x7fff_ff80),
|
||||
(-1 << 31, -0x80, -0x7fff_ff80),
|
||||
]
|
||||
.iter()
|
||||
{
|
||||
let s = saturating_scale(*lo, *hi, shift);
|
||||
assert_eq!(
|
||||
*res, s,
|
||||
"{:#x} != {:#x} = saturating_scale({:#x}, {:#x}, {:#x})",
|
||||
*res, s, *lo, *hi, shift
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user