// Tests if it is possible to manually reset the bitfields again.

use modular_bitfield_msb::prelude::*;

#[bitfield]
pub struct MyTwoBytes {
    a: B1,
    b: B2,
    c: B13,
}

fn main() {
    let mut bitfield = MyTwoBytes::new();

    // Everything is initialized to zero.
    assert_eq!(bitfield.a(), 0);
    assert_eq!(bitfield.b(), 0);
    assert_eq!(bitfield.c(), 0);

    // Manipulate bitfield.
    bitfield.set_a(1);
    bitfield.set_b(3);
    bitfield.set_c(42);

    // Check that manipulation was successful.
    assert_eq!(bitfield.a(), 1);
    assert_eq!(bitfield.b(), 3);
    assert_eq!(bitfield.c(), 42);

    // Manually reset the bitfield.
    bitfield.set_a(0);
    bitfield.set_b(0);
    bitfield.set_c(0);

    // Check if reset was successful.
    assert_eq!(bitfield.a(), 0);
    assert_eq!(bitfield.b(), 0);
    assert_eq!(bitfield.c(), 0);
}
