macro_rules! test_bake {
    ($type:ty, const: $expr:expr $(, $krate:ident)? $(, [$($env_crate:ident),+])? $(,)?) => { ... };
    ($type:ty, $expr:expr $(, $krate:ident)? $(, [$($env_crate:ident),+])? $(,)?) => { ... };
}
Expand description

This macro tests that an expression evaluates to a value that bakes to the same expression.

Its mandatory arguments are a type and an expression (of that type).

test_bake!(usize, 18usize);

Const

We usually want baked output to be const constructible. To test this, add the const: prefix to the expression:

test_bake!(usize, const: 18usize);

Crates and imports

As most output will need to reference its crate, and its not possible to name a crate from within it, a third parameter can be used to specify the crate name. The crate identifier in the original expression will be replaced by this in the expected output.

test_bake!(
    MyStruct,
    crate::MyStruct(42usize), // matches `::my_crate::MyStruct(42usize)`
    my_crate,
);

A fourth, optional, parameter is a list of crate names that are expected to be added to the CrateEnv. The crate-replacement crate will always be checked.