use crate::{
enums::{
Bin,
PosU128,
},
traits::Set,
};
impl Set for u128 {
type Pos = PosU128;
fn set_bit(self, pos_u128: PosU128, bin: Bin) -> Self {
if bin == Bin::B1 {
self | (1 << u8::from(pos_u128))
} else {
self & !(1 << u8::from(pos_u128))
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn bit_120_on() {
let result: u128 = 0b0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000.set_bit(PosU128::B120, Bin::B1);
assert_eq!(result, 0b0000_0001_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000);
}
#[test]
fn bit_121_off() {
let result: u128 = 0b1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111.set_bit(PosU128::B121, Bin::B0);
assert_eq!(result, 0b1111_1101_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111_1111);
}
}