macro_rules! assert_no_panic {
($input:expr) => { let arr = $input; let input = std::str::from_utf8(&arr).expect("not unicode"); let res = std::panic::catch_unwind(move || { let _ = Literal::parse(input); let _ = crate::BoolLit::parse(input); let _ = crate::IntegerLit::parse(input); let _ = crate::FloatLit::parse(input); let _ = crate::CharLit::parse(input); let _ = crate::StringLit::parse(input); let _ = crate::ByteLit::parse(input); let _ = crate::ByteStringLit::parse(input);
});
#[test] #[ignore] fn never_panic_up_to_3() { for a in0..128 {
assert_no_panic!([a]); for b in0..128 {
assert_no_panic!([a, b]); for c in0..128 {
assert_no_panic!([a, b, c]);
}
}
}
}
// This test takes super long in debug mode, but in release mode it's fine. #[test] #[ignore] fn never_panic_len_4() { for a in0..128 { for b in0..128 { for c in0..128 { for d in0..128 {
assert_no_panic!([a, b, c, d]);
}
}
}
}
}
macro_rules! assert_invalid_token {
($input:expr, expected: $expected:path, actual: $actual:path $(,)?) => { let err = $input.unwrap_err(); if err.expected != $expected {
panic!( "err.expected was expected to be {:?}, but is {:?}",
$expected,
err.expected,
);
} if err.actual != $actual {
panic!("err.actual was expected to be {:?}, but is {:?}", $actual, err.actual);
}
};
}
let pm_u16_lit = pm2::Literal::u16_suffixed(2700); let pm_i16_lit = pm2::Literal::i16_unsuffixed(3912); let pm_f32_lit = pm2::Literal::f32_unsuffixed(3.14); let pm_f64_lit = pm2::Literal::f64_suffixed(99.3); let pm_string_lit = pm2::Literal::string("hello "); let pm_bytestr_lit = pm2::Literal::byte_string(b"hello \nfoxxo"); let pm_char_lit = pm2::Literal::character('');
let u16_lit = Literal::parse("2700u16".to_string()).unwrap(); let i16_lit = Literal::parse("3912".to_string()).unwrap(); let f32_lit = Literal::parse("3.14".to_string()).unwrap(); let f64_lit = Literal::parse("99.3f64".to_string()).unwrap(); let string_lit = Literal::parse(r#""hello ""#.to_string()).unwrap(); let bytestr_lit = Literal::parse(r#"b"hello \nfoxxo""#.to_string()).unwrap(); let char_lit = Literal::parse("''".to_string()).unwrap();
let group = TokenTree::from(Group::new(Delimiter::Brace, TokenStream::new())); let punct = TokenTree::from(Punct::new(':', Spacing::Alone)); let ident = TokenTree::from(Ident::new("peter", Span::call_site()));
let span = crate::err::Span::Two(proc_macro2::Span::call_site());
assert_eq!(
InvalidToken {
actual: TokenKind::StringLit,
expected: TokenKind::FloatLit,
span,
}.to_string(),
r#"expected a float literal (e.g. `3.14`), but found a string literal (e.g. "Ferris")"#,
);
assert_eq!(
InvalidToken {
actual: TokenKind::Punct,
expected: TokenKind::Literal,
span,
}.to_string(),
r#"expected a literal, but found a punctuation character"#,
);
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-19)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.