Merge remote-tracking branch 'origin/master' into adding-simulator
All checks were successful
/ deps (push) Successful in 15s
/ test (push) Successful in 4m55s
/ deps (pull_request) Successful in 14s
/ test (pull_request) Successful in 4m58s

This commit is contained in:
Jacob Lifshay 2024-11-26 21:28:22 -08:00
commit 9128a84284
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ

View file

@ -488,7 +488,10 @@ impl SInt {
v.not().bits().checked_add(1).expect("too big") v.not().bits().checked_add(1).expect("too big")
} }
Sign::NoSign => 0, Sign::NoSign => 0,
Sign::Plus => v.bits(), Sign::Plus => {
// account for sign bit
v.bits().checked_add(1).expect("too big")
}
} }
.try_into() .try_into()
.expect("too big"), .expect("too big"),
@ -772,3 +775,31 @@ impl ToLiteralBits for bool {
Ok(interned_bit(*self)) Ok(interned_bit(*self))
} }
} }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_uint_for_value() {
assert_eq!(UInt::for_value(0u8).width, 0);
assert_eq!(UInt::for_value(1u8).width, 1);
assert_eq!(UInt::for_value(2u8).width, 2);
assert_eq!(UInt::for_value(3u8).width, 2);
assert_eq!(UInt::for_value(4u8).width, 3);
}
#[test]
fn test_sint_for_value() {
assert_eq!(SInt::for_value(-5).width, 4);
assert_eq!(SInt::for_value(-4).width, 3);
assert_eq!(SInt::for_value(-3).width, 3);
assert_eq!(SInt::for_value(-2).width, 2);
assert_eq!(SInt::for_value(-1).width, 1);
assert_eq!(SInt::for_value(0).width, 0);
assert_eq!(SInt::for_value(1).width, 2);
assert_eq!(SInt::for_value(2).width, 3);
assert_eq!(SInt::for_value(3).width, 3);
assert_eq!(SInt::for_value(4).width, 4);
}
}