summaryrefslogtreecommitdiffstats
path: root/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/packed_simd/src/api/fmt/upper_hex.rs')
-rw-r--r--third_party/rust/packed_simd/src/api/fmt/upper_hex.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs b/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs
new file mode 100644
index 0000000000..5ad455706b
--- /dev/null
+++ b/third_party/rust/packed_simd/src/api/fmt/upper_hex.rs
@@ -0,0 +1,54 @@
+//! Implement `UpperHex` formatting
+
+macro_rules! impl_fmt_upper_hex {
+ ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt) => {
+ impl crate::fmt::UpperHex for $id {
+ #[allow(clippy::missing_inline_in_public_items)]
+ fn fmt(&self, f: &mut crate::fmt::Formatter<'_>) -> crate::fmt::Result {
+ write!(f, "{}(", stringify!($id))?;
+ for i in 0..$elem_count {
+ if i > 0 {
+ write!(f, ", ")?;
+ }
+ self.extract(i).fmt(f)?;
+ }
+ write!(f, ")")
+ }
+ }
+ test_if! {
+ $test_tt:
+ paste::item! {
+ pub mod [<$id _fmt_upper_hex>] {
+ use super::*;
+ #[cfg_attr(not(target_arch = "wasm32"), test)]
+ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
+ fn upper_hex() {
+ use arrayvec::{ArrayString,ArrayVec};
+ type TinyString = ArrayString<[u8; 512]>;
+
+ use crate::fmt::Write;
+ let v = $id::splat($elem_ty::default());
+ let mut s = TinyString::new();
+ write!(&mut s, "{:#X}", v).unwrap();
+
+ let mut beg = TinyString::new();
+ write!(&mut beg, "{}(", stringify!($id)).unwrap();
+ assert!(s.starts_with(beg.as_str()));
+ assert!(s.ends_with(")"));
+ let s: ArrayVec<[TinyString; 64]>
+ = s.replace(beg.as_str(), "").replace(")", "")
+ .split(",")
+ .map(|v| TinyString::from(v.trim()).unwrap())
+ .collect();
+ assert_eq!(s.len(), $id::lanes());
+ for (index, ss) in s.into_iter().enumerate() {
+ let mut e = TinyString::new();
+ write!(&mut e, "{:#X}", v.extract(index)).unwrap();
+ assert_eq!(ss, e);
+ }
+ }
+ }
+ }
+ }
+ };
+}