extern crate bf_impl; use bf_impl::bf; bf!(Hello[u8] { foo: 1:4, bar: 0:3, foobar: 3:7 }); #[test] fn get_set_upd() { let mut _hello = Hello::new(0b10101100); assert_eq!(_hello.foo(), 0b0110); assert_eq!(_hello.bar(), 0b1100); assert_eq!(_hello.foobar(), 0b10101); _hello.set_foo(0) .set_bar(0); assert_eq!(_hello.bar(), 0); _hello.upd_foo(|x| x + 2) .upd_bar(|x| x * 3); assert_eq!(_hello.foo(), 3 << 1); } bf!(TestField[u8] { bottom: 0:5, top: 6:7, }); #[test] fn alias() { let mut val = 0b10100000; { let bf = TestField::alias(&val); assert_eq!(bf.top(), 0b10); } let bf = TestField::alias_mut(&mut val); bf.set_top(0b11); assert_eq!(bf.val, 0b11100000); } #[test] fn formatting() { let out = format!("{:x?}", TestField::new(!0)); assert_eq!(out, "TestField { bottom: 3f, top: 3 }"); }