Skip to content

Commit ca770fd

Browse files
gnzlbgalexcrichton
authored andcommitted
add missing fmt implementations (rust-lang#380)
1 parent c5cf3bc commit ca770fd

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

coresimd/ppsv/api/fmt.rs

+96
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,45 @@ macro_rules! impl_hex_fmt {
1919
write!(f, ")")
2020
}
2121
}
22+
impl ::fmt::UpperHex for $id {
23+
fn fmt(&self, f: &mut ::fmt::Formatter)
24+
-> ::fmt::Result {
25+
write!(f, "{}(", stringify!($id))?;
26+
for i in 0..$id::lanes() {
27+
if i > 0 {
28+
write!(f, ", ")?;
29+
}
30+
self.extract(i).fmt(f)?;
31+
}
32+
write!(f, ")")
33+
}
34+
}
35+
impl ::fmt::Octal for $id {
36+
fn fmt(&self, f: &mut ::fmt::Formatter)
37+
-> ::fmt::Result {
38+
write!(f, "{}(", stringify!($id))?;
39+
for i in 0..$id::lanes() {
40+
if i > 0 {
41+
write!(f, ", ")?;
42+
}
43+
self.extract(i).fmt(f)?;
44+
}
45+
write!(f, ")")
46+
}
47+
}
48+
impl ::fmt::Binary for $id {
49+
fn fmt(&self, f: &mut ::fmt::Formatter)
50+
-> ::fmt::Result {
51+
write!(f, "{}(", stringify!($id))?;
52+
for i in 0..$id::lanes() {
53+
if i > 0 {
54+
write!(f, ", ")?;
55+
}
56+
self.extract(i).fmt(f)?;
57+
}
58+
write!(f, ")")
59+
}
60+
}
2261
}
2362
}
2463

@@ -44,6 +83,63 @@ macro_rules! test_hex_fmt_impl {
4483
}
4584
}
4685
}
86+
#[test]
87+
fn upper_hex_fmt() {
88+
use ::std::prelude::v1::*;
89+
use ::coresimd::simd::$id;
90+
for &i in [$($values),+].iter() {
91+
let vec = $id::splat(i as $elem_ty);
92+
93+
let s = format!("{:#X}", vec);
94+
let beg = format!("{}(", stringify!($id));
95+
assert!(s.starts_with(&beg));
96+
assert!(s.ends_with(")"));
97+
let s: Vec<String> = s.replace(&beg, "").replace(")", "").split(",")
98+
.map(|v| v.trim().to_string()).collect();
99+
assert_eq!(s.len(), $id::lanes());
100+
for (index, ss) in s.into_iter().enumerate() {
101+
assert_eq!(ss, format!("{:#X}", vec.extract(index)));
102+
}
103+
}
104+
}
105+
#[test]
106+
fn octal_fmt() {
107+
use ::std::prelude::v1::*;
108+
use ::coresimd::simd::$id;
109+
for &i in [$($values),+].iter() {
110+
let vec = $id::splat(i as $elem_ty);
111+
112+
let s = format!("{:#o}", vec);
113+
let beg = format!("{}(", stringify!($id));
114+
assert!(s.starts_with(&beg));
115+
assert!(s.ends_with(")"));
116+
let s: Vec<String> = s.replace(&beg, "").replace(")", "").split(",")
117+
.map(|v| v.trim().to_string()).collect();
118+
assert_eq!(s.len(), $id::lanes());
119+
for (index, ss) in s.into_iter().enumerate() {
120+
assert_eq!(ss, format!("{:#o}", vec.extract(index)));
121+
}
122+
}
123+
}
124+
#[test]
125+
fn binary_fmt() {
126+
use ::std::prelude::v1::*;
127+
use ::coresimd::simd::$id;
128+
for &i in [$($values),+].iter() {
129+
let vec = $id::splat(i as $elem_ty);
130+
131+
let s = format!("{:#b}", vec);
132+
let beg = format!("{}(", stringify!($id));
133+
assert!(s.starts_with(&beg));
134+
assert!(s.ends_with(")"));
135+
let s: Vec<String> = s.replace(&beg, "").replace(")", "").split(",")
136+
.map(|v| v.trim().to_string()).collect();
137+
assert_eq!(s.len(), $id::lanes());
138+
for (index, ss) in s.into_iter().enumerate() {
139+
assert_eq!(ss, format!("{:#b}", vec.extract(index)));
140+
}
141+
}
142+
}
47143
}
48144
}
49145

0 commit comments

Comments
 (0)