Skip to content

Commit

Permalink
Replicate autotraits test from proc-macro2
Browse files Browse the repository at this point in the history
  • Loading branch information
dtolnay committed Nov 3, 2019
1 parent c40c40b commit 58afc84
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ script:
- cargo build --manifest-path demo/impl/Cargo.toml --release --target wasm32-unknown-unknown
- cargo run --manifest-path demo/caller/Cargo.toml
- cargo test --manifest-path runtime/tests/Cargo.toml
- cargo test --manifest-path proc-macro/Cargo.toml
- WATT_JIT=1 cargo check
50 changes: 50 additions & 0 deletions proc-macro/tests/marker.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
use proc_macro2::*;

macro_rules! assert_impl {
($ty:ident is $($marker:ident) and +) => {
#[test]
#[allow(non_snake_case)]
fn $ty() {
fn assert_implemented<T: $($marker +)+>() {}
assert_implemented::<$ty>();
}
};

($ty:ident is not $($marker:ident) or +) => {
#[test]
#[allow(non_snake_case)]
fn $ty() {
$(
{
// Implemented for types that implement $marker.
trait IsNotImplemented {
fn assert_not_implemented() {}
}
impl<T: $marker> IsNotImplemented for T {}

// Implemented for the type being tested.
trait IsImplemented {
fn assert_not_implemented() {}
}
impl IsImplemented for $ty {}

// If $ty does not implement $marker, there is no ambiguity
// in the following trait method call.
<$ty>::assert_not_implemented();
}
)+
}
};
}

assert_impl!(Delimiter is Send and Sync);
assert_impl!(Spacing is Send and Sync);

assert_impl!(Group is not Send or Sync);
assert_impl!(Ident is not Send or Sync);
assert_impl!(LexError is not Send or Sync);
assert_impl!(Literal is not Send or Sync);
assert_impl!(Punct is not Send or Sync);
assert_impl!(Span is not Send or Sync);
assert_impl!(TokenStream is not Send or Sync);
assert_impl!(TokenTree is not Send or Sync);

0 comments on commit 58afc84

Please sign in to comment.