in src/cpuid/src/bit_helper.rs [422:555]
fn test_simple_write_bits() {
let mut val: u32 = 0;
// Test a couple of successive ranges
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 3,
lsb_index: 2
},
0b00
) == &0b0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 4,
lsb_index: 2
},
0b100
) == &0b10000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 5,
lsb_index: 2
},
0b0100
) == &0b01_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 6,
lsb_index: 2
},
0b0_0100
) == &0b001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 7,
lsb_index: 2
},
0b00_0100
) == &0b0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 8,
lsb_index: 2
},
0b100_0100
) == &0b1_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 9,
lsb_index: 2
},
0b0100_0100
) == &0b01_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 10,
lsb_index: 2
},
0b1_0100_0100
) == &0b101_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 11,
lsb_index: 2
},
0b01_0100_0100
) == &0b0101_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 12,
lsb_index: 2
},
0b101_0100_0100
) == &0b1_0101_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 13,
lsb_index: 2
},
0b1101_0100_0100
) == &0b11_0101_0001_0000
);
// Test max left and max right
val = 0;
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 31,
lsb_index: 15
},
0b1_0000_0000_0000_0000
) == &0b1000_0000_0000_0000_0000_0000_0000_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 14,
lsb_index: 0
},
0b011_0101_0001_0000
) == &0b1000_0000_0000_0000_0011_0101_0001_0000
);
assert!(
val.write_bits_in_range(
&BitRange {
msb_index: 31,
lsb_index: 0
},
0b1000_0000_0000_0000_0011_0101_0001_0000
) == &0b1000_0000_0000_0000_0011_0101_0001_0000
);
}