Skip to content

Commit b074b7f

Browse files
authored
added initial trybuild testsuite (danlehmann#86)
1 parent 0a835f7 commit b074b7f

15 files changed

+153
-38
lines changed

bitbybit/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ arbitrary-int = "2.0"
2727

2828
[dev-dependencies]
2929
defmt = "1"
30+
trybuild = "1"

bitbybit/examples/expand.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
//! The primary purpose of this example is to provide a file which can be expanded and used
2+
//! to debug macro additions and maintenance.
3+
//!
4+
//! You can expand the example macro implementation by using `cargo expand --example expand`
5+
use arbitrary_int::u4;
6+
use bitbybit::{bitenum, bitfield};
7+
8+
#[bitenum(u2, exhaustive = true)]
9+
pub enum BitenumU2 {
10+
Field0 = 0b00,
11+
Field1 = 0b01,
12+
Field2 = 0b10,
13+
Field3 = 0b11,
14+
}
15+
16+
#[bitfield(u32, debug)]
17+
pub struct BitfieldU32 {
18+
#[bits(28..=31, rw)]
19+
val3: u4,
20+
#[bits(24..=27, rw)]
21+
val2: u4,
22+
#[bits(16..=23, rw)]
23+
val1: u8,
24+
#[bits(0..=15, rw)]
25+
val0: u16,
26+
}
27+
28+
pub fn main() {}

bitbybit/examples/simple.rs

Lines changed: 0 additions & 36 deletions
This file was deleted.

bitbybit/src/bitenum.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ fn parse_expr(expr: &syn::Expr) -> Option<u128> {
192192
};
193193
lit_int.base10_parse().ok()
194194
}
195+
195196
fn check_explicit_exhaustive(
196197
config: &FullConfig,
197198
input: &syn::ItemEnum,
@@ -252,16 +253,18 @@ fn check_explicit_exhaustive(
252253
/// methods.
253254
pub(crate) fn fallback_impl(input: &syn::ItemEnum) -> TokenStream {
254255
let name = &input.ident;
256+
// Error string in unreachable! would be nice, but causes errors because a non-const
257+
// formatting macro is used in a const method.
255258
quote! {
256259
#[derive(Copy, Clone)]
257260
#input
258261

259262
impl #name {
260263
pub const fn raw_value<T>(self) -> T {
261-
todo!("This was autogenerated when failing to compile a #[bitenum] enum")
264+
unreachable!()
262265
}
263266
pub const fn new_with_raw_value<T>(value: T) -> Self {
264-
todo!("This was autogenerated when failing to compile a #[bitenum] enum")
267+
unreachable!()
265268
}
266269
pub fn unwrap(self) -> Self { self }
267270
}

bitbybit/tests/basic.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u32, default = 0)]
4+
struct Test {}
5+
6+
fn main() {
7+
let t = Test::DEFAULT;
8+
assert_eq!(0, t.raw_value);
9+
10+
let t = Test::new_with_raw_value(45);
11+
assert_eq!(45, t.raw_value);
12+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitenum;
2+
3+
#[bitenum(u1, exhaustive = false)]
4+
pub enum ExhaustiveWhenItShouldNotBe {
5+
A = 0,
6+
B = 1,
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: The enum has 2 variants, it is exhaustive for 1 bits. Either remove variants, use a larger storage type, or mark this enum as 'exhaustive = true'.
2+
--> tests/no_compile/exhaustive_bitenum.rs:3:28
3+
|
4+
3 | #[bitenum(u1, exhaustive = false)]
5+
| ^^^^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u32, default = 0)]
4+
struct Test {
5+
#[bits(0..=8, ro)]
6+
invalid_access: u8,
7+
}
8+
9+
fn main() {}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
error: bitfield!: Invalid ident 'ro'. Expected r, rw, w or stride
2+
--> tests/no_compile/invalid_field_access.rs:5:19
3+
|
4+
5 | #[bits(0..=8, ro)]
5+
| ^^
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
use bitbybit::bitfield;
2+
3+
#[bitfield(u32, default = 0)]
4+
struct Test {
5+
#[bits(0..=8, rw)]
6+
invalid_range: u8,
7+
}
8+
9+
fn main() {}

0 commit comments

Comments
 (0)