From 7e39623f72ee1f8935714289a9ad500720e062d5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Thu, 20 Jan 2022 19:36:41 -0800 Subject: [PATCH] Implement test suite seq macro without tt muncher --- test_suite/tests/macros/mod.rs | 33 +++++++++++++++--------------- test_suite/tests/test_de.rs | 14 ++++++------- test_suite/tests/test_roundtrip.rs | 4 ++-- test_suite/tests/test_ser.rs | 12 +++++------ 4 files changed, 32 insertions(+), 31 deletions(-) diff --git a/test_suite/tests/macros/mod.rs b/test_suite/tests/macros/mod.rs index d1067329..282d2069 100644 --- a/test_suite/tests/macros/mod.rs +++ b/test_suite/tests/macros/mod.rs @@ -1,3 +1,6 @@ +use serde_test::Token; +use std::iter; + macro_rules! btreeset { () => { BTreeSet::new() @@ -54,23 +57,21 @@ macro_rules! hashmap { }}; } -macro_rules! seq_impl { - (.. $first:expr $(,)?) => { - $first.into_iter() - }; - (.. $first:expr, $($elem:tt)*) => { - $first.into_iter().chain(seq!($($elem)*)) - }; - ($first:expr $(,)?) => { - Some($first).into_iter() - }; - ($first:expr, $($elem:tt)*) => { - Some($first).into_iter().chain(seq!($($elem)*)) - }; +pub trait SingleTokenIntoIterator { + fn into_iter(self) -> iter::Once; +} + +impl SingleTokenIntoIterator for Token { + fn into_iter(self) -> iter::Once { + iter::once(self) + } } macro_rules! seq { - ($($tt: tt)*) => { - seq_impl!($($tt)*).collect::>() - }; + ($($elem:expr),* $(,)?) => {{ + use crate::macros::SingleTokenIntoIterator; + let mut vec = Vec::new(); + $( as Extend>::extend(&mut vec, $elem.into_iter());)* + vec + }}; } diff --git a/test_suite/tests/test_de.rs b/test_suite/tests/test_de.rs index 0b88071e..9bfde818 100644 --- a/test_suite/tests/test_de.rs +++ b/test_suite/tests/test_de.rs @@ -1552,7 +1552,7 @@ fn test_net_ipv4addr_compact() { net::Ipv4Addr::from(*b"1234").compact(), &seq![ Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd ], ); @@ -1564,7 +1564,7 @@ fn test_net_ipv6addr_compact() { net::Ipv6Addr::from(*b"1234567890123456").compact(), &seq![ Token::Tuple { len: 4 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd ], ); @@ -1580,7 +1580,7 @@ fn test_net_ipaddr_compact() { variant: "V4" }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd ], ); @@ -1597,7 +1597,7 @@ fn test_net_socketaddr_compact() { }, Token::Tuple { len: 2 }, Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), Token::TupleEnd @@ -1612,7 +1612,7 @@ fn test_net_socketaddr_compact() { }, Token::Tuple { len: 2 }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), Token::TupleEnd @@ -1623,7 +1623,7 @@ fn test_net_socketaddr_compact() { &seq![ Token::Tuple { len: 2 }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), Token::TupleEnd @@ -1634,7 +1634,7 @@ fn test_net_socketaddr_compact() { &seq![ Token::Tuple { len: 2 }, Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), Token::TupleEnd diff --git a/test_suite/tests/test_roundtrip.rs b/test_suite/tests/test_roundtrip.rs index 67547bba..a54c28e6 100644 --- a/test_suite/tests/test_roundtrip.rs +++ b/test_suite/tests/test_roundtrip.rs @@ -16,7 +16,7 @@ fn ip_addr_roundtrip() { variant: "V4" }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, ], ); @@ -33,7 +33,7 @@ fn socket_addr_roundtrip() { }, Token::Tuple { len: 2 }, Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), Token::TupleEnd, diff --git a/test_suite/tests/test_ser.rs b/test_suite/tests/test_ser.rs index 3e38953f..5abce420 100644 --- a/test_suite/tests/test_ser.rs +++ b/test_suite/tests/test_ser.rs @@ -549,14 +549,14 @@ declare_tests! { test_net_ipv4addr_compact { net::Ipv4Addr::from(*b"1234") => &seq![ Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, ], } test_net_ipv6addr_compact { net::Ipv6Addr::from(*b"1234567890123456") => &seq![ Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, ], } @@ -565,7 +565,7 @@ declare_tests! { Token::NewtypeVariant { name: "IpAddr", variant: "V4" }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, ], } @@ -576,7 +576,7 @@ declare_tests! { Token::Tuple { len: 2 }, Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), @@ -586,7 +586,7 @@ declare_tests! { Token::Tuple { len: 2 }, Token::Tuple { len: 4 }, - ..b"1234".iter().copied().map(Token::U8), + b"1234".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234), @@ -596,7 +596,7 @@ declare_tests! { Token::Tuple { len: 2 }, Token::Tuple { len: 16 }, - ..b"1234567890123456".iter().copied().map(Token::U8), + b"1234567890123456".iter().copied().map(Token::U8), Token::TupleEnd, Token::U16(1234),