Implement test suite seq macro without tt muncher

This commit is contained in:
David Tolnay 2022-01-20 19:36:41 -08:00
parent 157dc44c51
commit 7e39623f72
No known key found for this signature in database
GPG Key ID: F9BA143B95FF6D82
4 changed files with 32 additions and 31 deletions

View File

@ -1,3 +1,6 @@
use serde_test::Token;
use std::iter;
macro_rules! btreeset { macro_rules! btreeset {
() => { () => {
BTreeSet::new() BTreeSet::new()
@ -54,23 +57,21 @@ macro_rules! hashmap {
}}; }};
} }
macro_rules! seq_impl { pub trait SingleTokenIntoIterator {
(.. $first:expr $(,)?) => { fn into_iter(self) -> iter::Once<Token>;
$first.into_iter() }
};
(.. $first:expr, $($elem:tt)*) => { impl SingleTokenIntoIterator for Token {
$first.into_iter().chain(seq!($($elem)*)) fn into_iter(self) -> iter::Once<Token> {
}; iter::once(self)
($first:expr $(,)?) => { }
Some($first).into_iter()
};
($first:expr, $($elem:tt)*) => {
Some($first).into_iter().chain(seq!($($elem)*))
};
} }
macro_rules! seq { macro_rules! seq {
($($tt: tt)*) => { ($($elem:expr),* $(,)?) => {{
seq_impl!($($tt)*).collect::<Vec<_>>() use crate::macros::SingleTokenIntoIterator;
}; let mut vec = Vec::new();
$(<Vec<Token> as Extend<Token>>::extend(&mut vec, $elem.into_iter());)*
vec
}};
} }

View File

@ -1552,7 +1552,7 @@ fn test_net_ipv4addr_compact() {
net::Ipv4Addr::from(*b"1234").compact(), net::Ipv4Addr::from(*b"1234").compact(),
&seq![ &seq![
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd Token::TupleEnd
], ],
); );
@ -1564,7 +1564,7 @@ fn test_net_ipv6addr_compact() {
net::Ipv6Addr::from(*b"1234567890123456").compact(), net::Ipv6Addr::from(*b"1234567890123456").compact(),
&seq![ &seq![
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd Token::TupleEnd
], ],
); );
@ -1580,7 +1580,7 @@ fn test_net_ipaddr_compact() {
variant: "V4" variant: "V4"
}, },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd Token::TupleEnd
], ],
); );
@ -1597,7 +1597,7 @@ fn test_net_socketaddr_compact() {
}, },
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
Token::TupleEnd Token::TupleEnd
@ -1612,7 +1612,7 @@ fn test_net_socketaddr_compact() {
}, },
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
Token::TupleEnd Token::TupleEnd
@ -1623,7 +1623,7 @@ fn test_net_socketaddr_compact() {
&seq![ &seq![
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
Token::TupleEnd Token::TupleEnd
@ -1634,7 +1634,7 @@ fn test_net_socketaddr_compact() {
&seq![ &seq![
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
Token::TupleEnd Token::TupleEnd

View File

@ -16,7 +16,7 @@ fn ip_addr_roundtrip() {
variant: "V4" variant: "V4"
}, },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
], ],
); );
@ -33,7 +33,7 @@ fn socket_addr_roundtrip() {
}, },
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
Token::TupleEnd, Token::TupleEnd,

View File

@ -549,14 +549,14 @@ declare_tests! {
test_net_ipv4addr_compact { test_net_ipv4addr_compact {
net::Ipv4Addr::from(*b"1234") => &seq![ net::Ipv4Addr::from(*b"1234") => &seq![
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
], ],
} }
test_net_ipv6addr_compact { test_net_ipv6addr_compact {
net::Ipv6Addr::from(*b"1234567890123456") => &seq![ net::Ipv6Addr::from(*b"1234567890123456") => &seq![
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
], ],
} }
@ -565,7 +565,7 @@ declare_tests! {
Token::NewtypeVariant { name: "IpAddr", variant: "V4" }, Token::NewtypeVariant { name: "IpAddr", variant: "V4" },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
], ],
} }
@ -576,7 +576,7 @@ declare_tests! {
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
@ -586,7 +586,7 @@ declare_tests! {
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 4 }, Token::Tuple { len: 4 },
..b"1234".iter().copied().map(Token::U8), b"1234".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),
@ -596,7 +596,7 @@ declare_tests! {
Token::Tuple { len: 2 }, Token::Tuple { len: 2 },
Token::Tuple { len: 16 }, Token::Tuple { len: 16 },
..b"1234567890123456".iter().copied().map(Token::U8), b"1234567890123456".iter().copied().map(Token::U8),
Token::TupleEnd, Token::TupleEnd,
Token::U16(1234), Token::U16(1234),