Skip to content

Commit ca329e9

Browse files
committed
update i{x} types
1 parent 04de652 commit ca329e9

File tree

4 files changed

+95
-77
lines changed

4 files changed

+95
-77
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "bit-struct"
3-
version = "0.1.17"
3+
version = "0.1.18"
44
edition = "2021"
55
description = "Define structs which have fields which are assigned to individual bits, not bytes"
66
repository = "https://github.com/andrewgazelka/bit-struct"

src/lib.rs

Lines changed: 72 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ impl u1 {
5555
pub fn toggle(self) -> Self {
5656
match self {
5757
Self::FALSE => u1::TRUE,
58-
_ => Self::FALSE
58+
_ => Self::FALSE,
5959
}
6060
}
6161
}
@@ -115,6 +115,18 @@ macro_rules! new_signed_types {
115115
}
116116
}
117117

118+
119+
/// Create a new $name from value
120+
/// # Safety
121+
/// - value must fit within the number of bits defined in the type
122+
pub fn new(value: $signed) -> Option<Self> {
123+
if value < Self::MIN || value > Self::MAX {
124+
None
125+
} else {
126+
Some(unsafe {Self::new_unchecked(value)})
127+
}
128+
}
129+
118130
pub fn inner_raw(self) -> $inner {
119131
self.0
120132
}
@@ -251,65 +263,65 @@ macro_rules! new_unsigned_types {
251263
}
252264

253265
new_signed_types!(
254-
i2 (2, u8, i8) => [i8, i16, i32, i64, i128],
255-
i3 (3, u8, i8) => [i8, i16, i32, i64, i128],
256-
i4 (4, u8, i8) => [i8, i16, i32, i64, i128],
257-
i5 (5, u8, i8) => [i8, i16, i32, i64, i128],
258-
i6 (6, u8, i8) => [i8, i16, i32, i64, i128],
259-
i7 (7, u8, i8) => [i8, i16, i32, i64, i128],
260-
i9 (9, u16, i16) => [i16, i32, i64, i128],
261-
i10 (10, u16, i16) => [i16, i32, i64, i128],
262-
i11 (11, u16, i16) => [i16, i32, i64, i128],
263-
i12 (12, u16, i16) => [i16, i32, i64, i128],
264-
i13 (13, u16, i16) => [i16, i32, i64, i128],
265-
i14 (14, u16, i16) => [i16, i32, i64, i128],
266-
i15 (15, u16, i16) => [i16, i32, i64, i128],
267-
i17 (17, u32, i32) => [i32, i64, i128],
268-
i18 (18, u32, i32) => [i32, i64, i128],
269-
i19 (19, u32, i32) => [i32, i64, i128],
270-
i20 (20, u32, i32) => [i32, i64, i128],
271-
i21 (21, u32, i32) => [i32, i64, i128],
272-
i22 (22, u32, i32) => [i32, i64, i128],
273-
i23 (23, u32, i32) => [i32, i64, i128],
274-
i24 (24, u32, i32) => [i32, i64, i128],
275-
i25 (25, u32, i32) => [i32, i64, i128],
276-
i26 (26, u32, i32) => [i32, i64, i128],
277-
i27 (27, u32, i32) => [i32, i64, i128],
278-
i28 (28, u32, i32) => [i32, i64, i128],
279-
i29 (29, u32, i32) => [i32, i64, i128],
280-
i30 (30, u32, i32) => [i32, i64, i128],
281-
i31 (31, u32, i32) => [i32, i64, i128],
282-
i33 (33, u64, i64) => [i64, i128],
283-
i34 (34, u64, i64) => [i64, i128],
284-
i35 (35, u64, i64) => [i64, i128],
285-
i36 (36, u64, i64) => [i64, i128],
286-
i37 (37, u64, i64) => [i64, i128],
287-
i38 (38, u64, i64) => [i64, i128],
288-
i39 (39, u64, i64) => [i64, i128],
289-
i40 (40, u64, i64) => [i64, i128],
290-
i41 (41, u64, i64) => [i64, i128],
291-
i42 (42, u64, i64) => [i64, i128],
292-
i43 (43, u64, i64) => [i64, i128],
293-
i44 (44, u64, i64) => [i64, i128],
294-
i45 (45, u64, i64) => [i64, i128],
295-
i46 (46, u64, i64) => [i64, i128],
296-
i47 (47, u64, i64) => [i64, i128],
297-
i48 (48, u64, i64) => [i64, i128],
298-
i49 (49, u64, i64) => [i64, i128],
299-
i50 (50, u64, i64) => [i64, i128],
300-
i51 (51, u64, i64) => [i64, i128],
301-
i52 (52, u64, i64) => [i64, i128],
302-
i53 (53, u64, i64) => [i64, i128],
303-
i54 (54, u64, i64) => [i64, i128],
304-
i55 (55, u64, i64) => [i64, i128],
305-
i56 (56, u64, i64) => [i64, i128],
306-
i57 (57, u64, i64) => [i64, i128],
307-
i58 (58, u64, i64) => [i64, i128],
308-
i59 (59, u64, i64) => [i64, i128],
309-
i60 (60, u64, i64) => [i64, i128],
310-
i61 (61, u64, i64) => [i64, i128],
311-
i62 (62, u64, i64) => [i64, i128],
312-
i63 (63, u64, i64) => [i64, i128]
266+
i2 (2, u8, i8) => [u8, u16, u32, u64, u128],
267+
i3 (3, u8, i8) => [u8, u16, u32, u64, u128],
268+
i4 (4, u8, i8) => [u8, u16, u32, u64, u128],
269+
i5 (5, u8, i8) => [u8, u16, u32, u64, u128],
270+
i6 (6, u8, i8) => [u8, u16, u32, u64, u128],
271+
i7 (7, u8, i8) => [u8, u16, u32, u64, u128],
272+
i9 (9, u16, i16) => [u16, u32, u64, u128],
273+
i10 (10, u16, i16) => [u16, u32, u64, u128],
274+
i11 (11, u16, i16) => [u16, u32, u64, u128],
275+
i12 (12, u16, i16) => [u16, u32, u64, u128],
276+
i13 (13, u16, i16) => [u16, u32, u64, u128],
277+
i14 (14, u16, i16) => [u16, u32, u64, u128],
278+
i15 (15, u16, i16) => [u16, u32, u64, u128],
279+
i17 (17, u32, i32) => [u32, u64, u128],
280+
i18 (18, u32, i32) => [u32, u64, u128],
281+
i19 (19, u32, i32) => [u32, u64, u128],
282+
i20 (20, u32, i32) => [u32, u64, u128],
283+
i21 (21, u32, i32) => [u32, u64, u128],
284+
i22 (22, u32, i32) => [u32, u64, u128],
285+
i23 (23, u32, i32) => [u32, u64, u128],
286+
i24 (24, u32, i32) => [u32, u64, u128],
287+
i25 (25, u32, i32) => [u32, u64, u128],
288+
i26 (26, u32, i32) => [u32, u64, u128],
289+
i27 (27, u32, i32) => [u32, u64, u128],
290+
i28 (28, u32, i32) => [u32, u64, u128],
291+
i29 (29, u32, i32) => [u32, u64, u128],
292+
i30 (30, u32, i32) => [u32, u64, u128],
293+
i31 (31, u32, i32) => [u32, u64, u128],
294+
i33 (33, u64, i64) => [u64, u128],
295+
i34 (34, u64, i64) => [u64, u128],
296+
i35 (35, u64, i64) => [u64, u128],
297+
i36 (36, u64, i64) => [u64, u128],
298+
i37 (37, u64, i64) => [u64, u128],
299+
i38 (38, u64, i64) => [u64, u128],
300+
i39 (39, u64, i64) => [u64, u128],
301+
i40 (40, u64, i64) => [u64, u128],
302+
i41 (41, u64, i64) => [u64, u128],
303+
i42 (42, u64, i64) => [u64, u128],
304+
i43 (43, u64, i64) => [u64, u128],
305+
i44 (44, u64, i64) => [u64, u128],
306+
i45 (45, u64, i64) => [u64, u128],
307+
i46 (46, u64, i64) => [u64, u128],
308+
i47 (47, u64, i64) => [u64, u128],
309+
i48 (48, u64, i64) => [u64, u128],
310+
i49 (49, u64, i64) => [u64, u128],
311+
i50 (50, u64, i64) => [u64, u128],
312+
i51 (51, u64, i64) => [u64, u128],
313+
i52 (52, u64, i64) => [u64, u128],
314+
i53 (53, u64, i64) => [u64, u128],
315+
i54 (54, u64, i64) => [u64, u128],
316+
i55 (55, u64, i64) => [u64, u128],
317+
i56 (56, u64, i64) => [u64, u128],
318+
i57 (57, u64, i64) => [u64, u128],
319+
i58 (58, u64, i64) => [u64, u128],
320+
i59 (59, u64, i64) => [u64, u128],
321+
i60 (60, u64, i64) => [u64, u128],
322+
i61 (61, u64, i64) => [u64, u128],
323+
i62 (62, u64, i64) => [u64, u128],
324+
i63 (63, u64, i64) => [u64, u128]
313325
);
314326

315327
new_unsigned_types!(

tests/doc_tests.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,24 @@ fn full_test() {
4444
assert_eq!(bit_struct.color().start(), 8);
4545
assert_eq!(bit_struct.color().stop(), 10);
4646

47-
assert_eq!(format!("{:?}", bit_struct), "BitStruct1 { a: 0, variant: Zero, animal: Cat, color: Orange }");
47+
assert_eq!(
48+
format!("{:?}", bit_struct),
49+
"BitStruct1 { a: 0, variant: Zero, animal: Cat, color: Orange }"
50+
);
4851
assert_eq!(bit_struct.raw(), 4096);
4952

5053
let reverse_bit_struct = BitStruct1::try_from(4096);
51-
assert_eq!(format!("{:?}", reverse_bit_struct), "Ok(BitStruct1 { a: 0, variant: Zero, animal: Cat, color: Orange })");
52-
54+
assert_eq!(
55+
format!("{:?}", reverse_bit_struct),
56+
"Ok(BitStruct1 { a: 0, variant: Zero, animal: Cat, color: Orange })"
57+
);
5358

5459
// u3! macro provides a static assert that the number is not too large
5560
let mut other_struct = BitStruct2::new(Color::Green, bit_struct::u3!(0b101));
56-
assert_eq!(format!("{:?}", other_struct), "BitStruct2 { a_color: Green, b: 5 }");
61+
assert_eq!(
62+
format!("{:?}", other_struct),
63+
"BitStruct2 { a_color: Green, b: 5 }"
64+
);
5765

5866
assert_eq!(other_struct.a_color().get(), Color::Green);
5967

tests/integration.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ fn test_toggle() {
4444
assert_eq!(v.toggle().toggle(), u1::TRUE);
4545
}
4646

47-
4847
#[test]
4948
fn test_enum_froms() {
5049
macro_rules! froms {
@@ -145,7 +144,6 @@ fn test_new_signed_types() {
145144
assert_eq!(i2!(0).signed(), 0);
146145
assert_eq!(i2!(1).signed(), 1);
147146

148-
149147
assert_eq!(i3!(-4).inner_raw(), 0b100);
150148
assert_eq!(i3!(-3).inner_raw(), 0b101);
151149
assert_eq!(i3!(-2).inner_raw(), 0b110);
@@ -164,16 +162,16 @@ fn test_new_signed_types() {
164162
assert_eq!(i3!(2).inner_raw(), 0b010);
165163
assert_eq!(i3!(3).inner_raw(), 0b011);
166164

167-
assert!(i3::try_from(-5_i8).is_err());
168-
assert!(i3::try_from(-4_i8).is_ok());
169-
assert!(i3::try_from(-3_i8).is_ok());
170-
assert!(i3::try_from(-2_i8).is_ok());
171-
assert!(i3::try_from(-1_i8).is_ok());
172-
assert!(i3::try_from(0_i8).is_ok());
173-
assert!(i3::try_from(1_i8).is_ok());
174-
assert!(i3::try_from(2_i8).is_ok());
175-
assert!(i3::try_from(3_i8).is_ok());
176-
assert!(i3::try_from(4_i8).is_err());
165+
assert!(i3::new(-5).is_none());
166+
assert!(i3::new(-4).is_some());
167+
assert!(i3::new(-3).is_some());
168+
assert!(i3::new(-2).is_some());
169+
assert!(i3::new(-1).is_some());
170+
assert!(i3::new(0).is_some());
171+
assert!(i3::new(1).is_some());
172+
assert!(i3::new(2).is_some());
173+
assert!(i3::new(3).is_some());
174+
assert!(i3::new(4).is_none());
177175
}
178176

179177
#[test]

0 commit comments

Comments
 (0)