diff --git a/rustfmt.toml b/rustfmt.toml new file mode 100644 index 0000000..06b6963 --- /dev/null +++ b/rustfmt.toml @@ -0,0 +1,2 @@ +reorder_modules = true +imports_layout = "Vertical" \ No newline at end of file diff --git a/src/conversion.rs b/src/conversion.rs index 6d0750e..a205b28 100644 --- a/src/conversion.rs +++ b/src/conversion.rs @@ -26,10 +26,9 @@ macro_rules! implement_into { }; } - // Implement From for all unsigned integers -implement_into!([u2, u3, u4, u5, u6, u7], u8); +implement_into!([u2, u3, u4, u5, u6, u7], u8); implement_from!([u9, u10, u11, u12, u13, u14, u15], u8); implement_from!([u17, u18, u19, u20, u21, u22, u23, u24], u8); implement_from!([u25, u26, u27, u28, u29, u30, u31], u8); @@ -38,7 +37,7 @@ implement_from!([u41, u42, u43, u44, u45, u46, u47, u48], u8); implement_from!([u49, u50, u51, u52, u53, u54, u55, u56], u8); implement_from!([u57, u58, u59, u60, u61, u62, u63], u8); -implement_into!([u2, u3, u4, u5, u6, u7], u16); +implement_into!([u2, u3, u4, u5, u6, u7], u16); implement_into!([u9, u10, u11, u12, u13, u14, u15], u16); implement_from!([u17, u18, u19, u20, u21, u22, u23, u24], u16); implement_from!([u25, u26, u27, u28, u29, u30, u31], u16); @@ -47,7 +46,7 @@ implement_from!([u41, u42, u43, u44, u45, u46, u47, u48], u16); implement_from!([u49, u50, u51, u52, u53, u54, u55, u56], u16); implement_from!([u57, u58, u59, u60, u61, u62, u63], u16); -implement_into!([u2, u3, u4, u5, u6, u7], u32); +implement_into!([u2, u3, u4, u5, u6, u7], u32); implement_into!([u9, u10, u11, u12, u13, u14, u15], u32); implement_into!([u17, u18, u19, u20, u21, u22, u23, u24], u32); implement_into!([u25, u26, u27, u28, u29, u30, u31], u32); @@ -56,7 +55,7 @@ implement_from!([u41, u42, u43, u44, u45, u46, u47, u48], u32); implement_from!([u49, u50, u51, u52, u53, u54, u55, u56], u32); implement_from!([u57, u58, u59, u60, u61, u62, u63], u32); -implement_into!([u2, u3, u4, u5, u6, u7], u64); +implement_into!([u2, u3, u4, u5, u6, u7], u64); implement_into!([u9, u10, u11, u12, u13, u14, u15], u64); implement_into!([u17, u18, u19, u20, u21, u22, u23, u24], u64); implement_into!([u25, u26, u27, u28, u29, u30, u31], u64); @@ -65,8 +64,6 @@ implement_into!([u41, u42, u43, u44, u45, u46, u47, u48], u64); implement_into!([u49, u50, u51, u52, u53, u54, u55, u56], u64); implement_into!([u57, u58, u59, u60, u61, u62, u63], u64); - - implement_from!(u3, [u2]); implement_from!(u4, [u2, u3]); implement_from!(u5, [u2, u3, u4]); @@ -81,92 +78,336 @@ implement_from!(u13, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12]); implement_from!(u14, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13]); implement_from!(u15, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14]); -implement_from!(u17, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15]); -implement_from!(u18, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17]); -implement_from!(u19, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18]); -implement_from!(u20, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19]); -implement_from!(u21, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20]); -implement_from!(u22, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21]); -implement_from!(u23, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22]); -implement_from!(u24, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23]); - -implement_from!(u25, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24]); -implement_from!(u26, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25]); -implement_from!(u27, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26]); -implement_from!(u28, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27]); -implement_from!(u29, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28]); -implement_from!(u30, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29]); -implement_from!(u31, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30]); - -implement_from!(u33, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31]); -implement_from!(u34, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33]); -implement_from!(u35, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34]); -implement_from!(u36, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35]); -implement_from!(u37, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36]); -implement_from!(u38, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37]); -implement_from!(u39, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38]); -implement_from!(u40, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39]); -implement_from!(u41, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40]); - -implement_from!(u42, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41]); -implement_from!(u43, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42]); -implement_from!(u44, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43]); -implement_from!(u45, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44]); -implement_from!(u46, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45]); -implement_from!(u47, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46]); -implement_from!(u48, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47]); -implement_from!(u49, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48]); -implement_from!(u50, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49]); -implement_from!(u51, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50]); -implement_from!(u52, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51]); -implement_from!(u53, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52]); -implement_from!(u54, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53]); -implement_from!(u55, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54]); -implement_from!(u56, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55]); -implement_from!(u57, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56]); - -implement_from!(u58, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57]); -implement_from!(u59, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58]); -implement_from!(u60, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59]); -implement_from!(u61, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, u60]); -implement_from!(u62, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, u60, u61]); -implement_from!(u63, [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23, u24, u25, u26, u27, u28, u29, u30, u31, - u33, u34, u35, u36, u37, u38, u39, u40, u41, u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, u60, u61, u62]); - - +implement_from!( + u17, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15] +); +implement_from!( + u18, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17] +); +implement_from!( + u19, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18] +); +implement_from!( + u20, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19] +); +implement_from!( + u21, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20] +); +implement_from!( + u22, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21] +); +implement_from!( + u23, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22] +); +implement_from!( + u24, + [u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, u23] +); + +implement_from!( + u25, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24 + ] +); +implement_from!( + u26, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25 + ] +); +implement_from!( + u27, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26 + ] +); +implement_from!( + u28, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27 + ] +); +implement_from!( + u29, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28 + ] +); +implement_from!( + u30, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29 + ] +); +implement_from!( + u31, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30 + ] +); + +implement_from!( + u33, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31 + ] +); +implement_from!( + u34, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33 + ] +); +implement_from!( + u35, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34 + ] +); +implement_from!( + u36, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35 + ] +); +implement_from!( + u37, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36 + ] +); +implement_from!( + u38, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37 + ] +); +implement_from!( + u39, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38 + ] +); +implement_from!( + u40, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39 + ] +); +implement_from!( + u41, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40 + ] +); + +implement_from!( + u42, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41 + ] +); +implement_from!( + u43, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42 + ] +); +implement_from!( + u44, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43 + ] +); +implement_from!( + u45, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44 + ] +); +implement_from!( + u46, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45 + ] +); +implement_from!( + u47, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46 + ] +); +implement_from!( + u48, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47 + ] +); +implement_from!( + u49, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48 + ] +); +implement_from!( + u50, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49 + ] +); +implement_from!( + u51, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50 + ] +); +implement_from!( + u52, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51 + ] +); +implement_from!( + u53, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52 + ] +); +implement_from!( + u54, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53 + ] +); +implement_from!( + u55, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54 + ] +); +implement_from!( + u56, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55 + ] +); +implement_from!( + u57, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56 + ] +); + +implement_from!( + u58, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57 + ] +); +implement_from!( + u59, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58 + ] +); +implement_from!( + u60, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59 + ] +); +implement_from!( + u61, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, + u60 + ] +); +implement_from!( + u62, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, + u60, u61 + ] +); +implement_from!( + u63, + [ + u2, u3, u4, u5, u6, u7, u9, u10, u11, u12, u13, u14, u15, u17, u18, u19, u20, u21, u22, + u23, u24, u25, u26, u27, u28, u29, u30, u31, u33, u34, u35, u36, u37, u38, u39, u40, u41, + u42, u43, u44, u45, u46, u47, u48, u49, u50, u51, u52, u53, u54, u55, u56, u57, u58, u59, + u60, u61, u62 + ] +); // Implement From for all signed integer -implement_into!([i2, i3, i4, i5, i6, i7], i8); +implement_into!([i2, i3, i4, i5, i6, i7], i8); implement_from!([i9, i10, i11, i12, i13, i14, i15], i8); implement_from!([i17, i18, i19, i20, i21, i22, i23, i24], i8); implement_from!([i25, i26, i27, i28, i29, i30, i31], i8); @@ -175,7 +416,7 @@ implement_from!([i41, i42, i43, i44, i45, i46, i47, i48], i8); implement_from!([i49, i50, i51, i52, i53, i54, i55, i56], i8); implement_from!([i57, i58, i59, i60, i61, i62, i63], i8); -implement_into!([i2, i3, i4, i5, i6, i7], i16); +implement_into!([i2, i3, i4, i5, i6, i7], i16); implement_into!([i9, i10, i11, i12, i13, i14, i15], i16); implement_from!([i17, i18, i19, i20, i21, i22, i23, i24], i16); implement_from!([i25, i26, i27, i28, i29, i30, i31], i16); @@ -184,7 +425,7 @@ implement_from!([i41, i42, i43, i44, i45, i46, i47, i48], i16); implement_from!([i49, i50, i51, i52, i53, i54, i55, i56], i16); implement_from!([i57, i58, i59, i60, i61, i62, i63], i16); -implement_into!([i2, i3, i4, i5, i6, i7], i32); +implement_into!([i2, i3, i4, i5, i6, i7], i32); implement_into!([i9, i10, i11, i12, i13, i14, i15], i32); implement_into!([i17, i18, i19, i20, i21, i22, i23, i24], i32); implement_into!([i25, i26, i27, i28, i29, i30, i31], i32); @@ -193,7 +434,7 @@ implement_from!([i41, i42, i43, i44, i45, i46, i47, i48], i32); implement_from!([i49, i50, i51, i52, i53, i54, i55, i56], i32); implement_from!([i57, i58, i59, i60, i61, i62, i63], i32); -implement_into!([i2, i3, i4, i5, i6, i7], i64); +implement_into!([i2, i3, i4, i5, i6, i7], i64); implement_into!([i9, i10, i11, i12, i13, i14, i15], i64); implement_into!([i17, i18, i19, i20, i21, i22, i23, i24], i64); implement_into!([i25, i26, i27, i28, i29, i30, i31], i64); @@ -202,8 +443,6 @@ implement_into!([i41, i42, i43, i44, i45, i46, i47, i48], i64); implement_into!([i49, i50, i51, i52, i53, i54, i55, i56], i64); implement_into!([i57, i58, i59, i60, i61, i62, i63], i64); - - implement_from!(i3, [i2]); implement_from!(i4, [i2, i3]); implement_from!(i5, [i2, i3, i4]); @@ -218,86 +457,332 @@ implement_from!(i13, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12]); implement_from!(i14, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13]); implement_from!(i15, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14]); -implement_from!(i17, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15]); -implement_from!(i18, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17]); -implement_from!(i19, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18]); -implement_from!(i20, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19]); -implement_from!(i21, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20]); -implement_from!(i22, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21]); -implement_from!(i23, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22]); -implement_from!(i24, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23]); - -implement_from!(i25, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24]); -implement_from!(i26, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25]); -implement_from!(i27, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26]); -implement_from!(i28, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27]); -implement_from!(i29, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28]); -implement_from!(i30, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29]); -implement_from!(i31, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30]); - -implement_from!(i33, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31]); -implement_from!(i34, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33]); -implement_from!(i35, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34]); -implement_from!(i36, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35]); -implement_from!(i37, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36]); -implement_from!(i38, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37]); -implement_from!(i39, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38]); -implement_from!(i40, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39]); -implement_from!(i41, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40]); - -implement_from!(i42, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41]); -implement_from!(i43, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42]); -implement_from!(i44, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43]); -implement_from!(i45, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44]); -implement_from!(i46, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45]); -implement_from!(i47, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46]); -implement_from!(i48, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47]); -implement_from!(i49, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48]); -implement_from!(i50, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49]); -implement_from!(i51, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50]); -implement_from!(i52, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51]); -implement_from!(i53, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52]); -implement_from!(i54, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53]); -implement_from!(i55, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54]); -implement_from!(i56, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55]); -implement_from!(i57, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56]); - -implement_from!(i58, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57]); -implement_from!(i59, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58]); -implement_from!(i60, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59]); -implement_from!(i61, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i60]); -implement_from!(i62, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i60, i61]); -implement_from!(i63, [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23, i24, i25, i26, i27, i28, i29, i30, i31, - i33, i34, i35, i36, i37, i38, i39, i40, i41, i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, i60, i61, i62]); +implement_from!( + i17, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15] +); +implement_from!( + i18, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17] +); +implement_from!( + i19, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18] +); +implement_from!( + i20, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19] +); +implement_from!( + i21, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20] +); +implement_from!( + i22, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21] +); +implement_from!( + i23, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22] +); +implement_from!( + i24, + [i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, i23] +); + +implement_from!( + i25, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24 + ] +); +implement_from!( + i26, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25 + ] +); +implement_from!( + i27, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26 + ] +); +implement_from!( + i28, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27 + ] +); +implement_from!( + i29, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28 + ] +); +implement_from!( + i30, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29 + ] +); +implement_from!( + i31, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30 + ] +); + +implement_from!( + i33, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31 + ] +); +implement_from!( + i34, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33 + ] +); +implement_from!( + i35, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34 + ] +); +implement_from!( + i36, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35 + ] +); +implement_from!( + i37, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36 + ] +); +implement_from!( + i38, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37 + ] +); +implement_from!( + i39, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38 + ] +); +implement_from!( + i40, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39 + ] +); +implement_from!( + i41, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40 + ] +); + +implement_from!( + i42, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41 + ] +); +implement_from!( + i43, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42 + ] +); +implement_from!( + i44, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43 + ] +); +implement_from!( + i45, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44 + ] +); +implement_from!( + i46, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45 + ] +); +implement_from!( + i47, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46 + ] +); +implement_from!( + i48, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47 + ] +); +implement_from!( + i49, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48 + ] +); +implement_from!( + i50, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49 + ] +); +implement_from!( + i51, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50 + ] +); +implement_from!( + i52, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51 + ] +); +implement_from!( + i53, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52 + ] +); +implement_from!( + i54, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53 + ] +); +implement_from!( + i55, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54 + ] +); +implement_from!( + i56, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55 + ] +); +implement_from!( + i57, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56 + ] +); + +implement_from!( + i58, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57 + ] +); +implement_from!( + i59, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58 + ] +); +implement_from!( + i60, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59 + ] +); +implement_from!( + i61, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, + i60 + ] +); +implement_from!( + i62, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, + i60, i61 + ] +); +implement_from!( + i63, + [ + i2, i3, i4, i5, i6, i7, i9, i10, i11, i12, i13, i14, i15, i17, i18, i19, i20, i21, i22, + i23, i24, i25, i26, i27, i28, i29, i30, i31, i33, i34, i35, i36, i37, i38, i39, i40, i41, + i42, i43, i44, i45, i46, i47, i48, i49, i50, i51, i52, i53, i54, i55, i56, i57, i58, i59, + i60, i61, i62 + ] +); impl From for u1 { fn from(b: bool) -> Self { @@ -321,31 +806,28 @@ impl From for bool { #[cfg(test)] mod tests { use super::*; - + #[test] fn test_conversion_unsigned() { assert_eq!(u16::from(u9(12)), 12u16); assert_eq!(u32::from(u9(12)), 12u32); - + assert_eq!(u9(127), 127u8.into()); - - assert_eq!(u7::from(u6(65)), u7(65)); + assert_eq!(u7::from(u6(65)), u7(65)); } - + #[test] fn test_conversion_signed() { assert_eq!(i16::from(i9(12)), 12i16); assert_eq!(i32::from(i9(12)), 12i32); - + assert_eq!(i16::from(i9(-12)), -12i16); assert_eq!(i32::from(i9(-12)), -12i32); - + assert_eq!(i9(127), 127i8.into()); - + assert_eq!(i7::from(i6(65)), i7(65)); assert_eq!(i7::from(i6(-65)), i7(-65)); - } - } diff --git a/src/lib.rs b/src/lib.rs index bc1ddaf..5f7a928 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,33 +8,31 @@ //! - All possible lossless conversions is possible by using `From`. //! - When `TryFrom` is stabilized fallible conversions will also be supported. - -#![cfg_attr(not(feature="std"), no_std)] - +#![cfg_attr(not(feature = "std"), no_std)] mod lib { pub mod core { - #[cfg(feature="std")] - pub use std::*; - #[cfg(not(feature="std"))] + #[cfg(not(feature = "std"))] pub use core::*; + #[cfg(feature = "std")] + pub use std::*; } } mod conversion; use lib::core::ops::{ - Shr, - ShrAssign, - Shl, - ShlAssign, + BitAnd, + BitAndAssign, BitOr, BitOrAssign, BitXor, BitXorAssign, - BitAnd, - BitAndAssign, - Not + Not, + Shl, + ShlAssign, + Shr, + ShrAssign, }; use lib::core::hash::{ @@ -43,20 +41,22 @@ use lib::core::hash::{ }; use lib::core::cmp::{ - Ordering, Ord, + Ordering, PartialOrd, }; use lib::core::fmt::{ + Binary, Display, Formatter, - UpperHex, LowerHex, Octal, - Binary, + UpperHex, }; +use std::mem; + macro_rules! define_unsigned { ($name:ident, $bits:expr, $type:ident) => {define_unsigned!(#[doc=""], $name, $bits, $type);}; (#[$doc:meta], $name:ident, $bits:expr, $type:ident) => { @@ -112,14 +112,18 @@ macro_rules! implement_common { ($name:ident, $bits:expr, $type:ident) => { impl $name { /// Returns the smallest value that can be represented by this integer type. - pub fn min_value() -> $name { + pub fn min_value() -> Self { $name::MIN } /// Returns the largest value that can be represented by this integer type. - pub fn max_value() -> $name { + pub fn max_value() -> Self { $name::MAX } + fn is_valid(value: $type) -> bool { + value <= $name::MAX.0 && value >= $name::MIN.0 + } + /// Crates a new variable /// /// This function mainly exists as there is currently not a better way to construct these types. @@ -139,8 +143,8 @@ macro_rules! implement_common { /// # Panic /// /// This function will panic if `value` is not representable by this type - pub fn new(value: $type) -> $name { - assert!(value <= $name::MAX.0 && value >= $name::MIN.0); + pub fn new(value: $type) -> Self { + assert!(Self::is_valid(value)); $name(value) } @@ -182,8 +186,56 @@ macro_rules! implement_common { $name(self.0.wrapping_add(rhs.0)).mask() } - } + pub fn capacity(self) -> u32 { + $bits + } + + /// + /// Bit size of the backing type + /// + fn storage_bit_size(self) -> u32 { + (mem::size_of::<$name>() as u32) * 8 + } + + pub fn rotate_left(self, n: u32) -> Self { + let shift = n % $bits; + let mask = self.mask().0; + $name((mask << shift) | (mask >> ($bits - shift))) + } + + pub fn rotate_right(self, n: u32) -> Self { + let shift = n % $bits; + let mask = self.mask().0; + $name((mask >> shift) | (mask << ($bits - shift))) + } + + pub fn count_ones(self) -> u32 { + self.mask().0.count_ones() + } + + pub fn count_zeros(self) -> u32 { + self.capacity() - self.count_ones() + } + + pub fn leading_zeros(self) -> u32 { + let diff = self.storage_bit_size() - self.capacity(); + self.mask().0.leading_zeros() - diff + } + + pub fn trailing_zeros(self) -> u32 { + self.mask().0.trailing_zeros() + } + + pub fn reverse_bits(self) -> Self { + let bit_size = self.storage_bit_size(); + let mask = self.mask().0; + $name(mask.reverse_bits() >> (bit_size - $bits)) + } + pub fn is_power_of_two(self) -> bool { + self.count_ones() == 1 + } + } impl PartialEq for $name { fn eq(&self, other: &Self) -> bool { @@ -194,13 +246,13 @@ macro_rules! implement_common { impl Eq for $name {} impl PartialOrd for $name { - fn partial_cmp(&self, other: &$name) -> Option { + fn partial_cmp(&self, other: &Self) -> Option { self.mask().0.partial_cmp(&other.mask().0) } } impl Ord for $name { - fn cmp(&self, other: &$name) -> Ordering { + fn cmp(&self, other: &Self) -> Ordering { self.mask().0.cmp(&other.mask().0) } } @@ -243,30 +295,42 @@ macro_rules! implement_common { } } - impl Shr for $name where $type: Shr{ + impl Shr for $name + where + $type: Shr, + { type Output = $name; - fn shr(self, rhs: T) -> $name { + fn shr(self, rhs: T) -> Self::Output { $name(self.mask().0.shr(rhs)) } } - impl Shl for $name where $type: Shl { + impl Shl for $name + where + $type: Shl, + { type Output = $name; - fn shl(self, rhs: T) -> $name { + fn shl(self, rhs: T) -> Self::Output { $name(self.mask().0.shl(rhs)) } } - impl ShrAssign for $name where $type: ShrAssign { + impl ShrAssign for $name + where + $type: ShrAssign, + { fn shr_assign(&mut self, rhs: T) { *self = self.mask(); self.0.shr_assign(rhs); } } - impl ShlAssign for $name where $type: ShlAssign { + impl ShlAssign for $name + where + $type: ShlAssign, + { fn shl_assign(&mut self, rhs: T) { *self = self.mask(); self.0.shl_assign(rhs); @@ -276,7 +340,7 @@ macro_rules! implement_common { impl BitOr<$name> for $name { type Output = $name; - fn bitor(self, rhs: $name) -> Self::Output { + fn bitor(self, rhs: Self) -> Self::Output { $name(self.mask().0.bitor(rhs.mask().0)) } } @@ -306,7 +370,7 @@ macro_rules! implement_common { } impl BitOrAssign<$name> for $name { - fn bitor_assign(&mut self, other: $name) { + fn bitor_assign(&mut self, other: Self) { *self = self.mask(); self.0.bitor_assign(other.mask().0) } @@ -315,7 +379,7 @@ macro_rules! implement_common { impl BitXor<$name> for $name { type Output = $name; - fn bitxor(self, rhs: $name) -> Self::Output { + fn bitxor(self, rhs: Self) -> Self::Output { $name(self.mask().0.bitxor(rhs.mask().0)) } } @@ -345,7 +409,7 @@ macro_rules! implement_common { } impl BitXorAssign<$name> for $name { - fn bitxor_assign(&mut self, other: $name) { + fn bitxor_assign(&mut self, other: Self) { *self = self.mask(); self.0.bitxor_assign(other.mask().0) } @@ -354,7 +418,7 @@ macro_rules! implement_common { impl Not for $name { type Output = $name; - fn not(self) -> $name { + fn not(self) -> Self::Output { $name(self.mask().0.not()) } } @@ -362,7 +426,7 @@ macro_rules! implement_common { impl<'a> Not for &'a $name { type Output = <$name as Not>::Output; - fn not(self) -> $name { + fn not(self) -> Self::Output { $name(self.mask().0.not()) } } @@ -370,7 +434,7 @@ macro_rules! implement_common { impl BitAnd<$name> for $name { type Output = $name; - fn bitand(self, rhs: $name) -> Self::Output { + fn bitand(self, rhs: Self) -> Self::Output { $name(self.mask().0.bitand(rhs.mask().0)) } } @@ -400,7 +464,7 @@ macro_rules! implement_common { } impl BitAndAssign<$name> for $name { - fn bitand_assign(&mut self, other: $name) { + fn bitand_assign(&mut self, other: Self) { *self = self.mask(); self.0.bitand_assign(other.mask().0) } @@ -409,7 +473,7 @@ macro_rules! implement_common { impl lib::core::ops::Add<$name> for $name { type Output = $name; #[allow(unused_comparisons)] - fn add(self, other: $name) -> $name { + fn add(self, other: $name) -> Self::Output { if self.0 > 0 && other.0 > 0 { debug_assert!(Self::MAX.0 - other.0 >= self.0); } else if self.0 < 0 && other.0 < 0 { @@ -422,7 +486,7 @@ macro_rules! implement_common { impl lib::core::ops::Sub<$name> for $name { type Output = $name; #[allow(unused_comparisons)] - fn sub(self, other: $name) -> $name { + fn sub(self, other: Self) -> Self::Output { if self > other { debug_assert!(Self::MAX.0 + other.0 >= self.0); } else if self < other { @@ -431,14 +495,9 @@ macro_rules! implement_common { self.wrapping_sub(other) } } - - - - }; } - define_unsigned!(#[doc="The 1-bit unsigned integer type."], u1, 1, u8); define_unsigned!(#[doc="The 2-bit unsigned integer type."], u2, 2, u8); define_unsigned!(#[doc="The 3-bit unsigned integer type."], u3, 3, u8); @@ -578,7 +637,6 @@ define_unsigned!(#[doc="The 125-bit unsigned integer type."], u125, 125, u128); define_unsigned!(#[doc="The 126-bit unsigned integer type."], u126, 126, u128); define_unsigned!(#[doc="The 127-bit unsigned integer type."], u127, 127, u128); - define_signed!(#[doc="The 1-bit signed integer type."], i1, 1, i8); define_signed!(#[doc="The 2-bit signed integer type."], i2, 2, i8); define_signed!(#[doc="The 3-bit signed integer type."], i3, 3, i8); @@ -718,7 +776,6 @@ define_signed!(#[doc="The 125-bit signed integer type."], i125, 125, i128); define_signed!(#[doc="The 126-bit signed integer type."], i126, 126, i128); define_signed!(#[doc="The 127-bit signed integer type."], i127, 127, i128); - #[cfg(test)] mod tests { use super::*; @@ -732,7 +789,6 @@ mod tests { assert_eq!(i4(0b11000110u8 as i8).mask().0, 0b00000110u8 as i8); assert_eq!(i4(0b00001000u8 as i8).mask().0, 0b11111000u8 as i8); assert_eq!(i4(0b00001110u8 as i8).mask().0, 0b11111110u8 as i8); - } #[test] @@ -743,14 +799,12 @@ mod tests { assert_eq!(u7::MAX, u7(127)); assert_eq!(u9::MAX, u9(511)); - assert_eq!(i1::MAX, i1(0)); assert_eq!(i2::MAX, i2(1)); assert_eq!(i3::MAX, i3(3)); assert_eq!(i7::MAX, i7(63)); assert_eq!(i9::MAX, i9(255)); - assert_eq!(u1::MIN, u1(0)); assert_eq!(u2::MIN, u2(0)); assert_eq!(u3::MIN, u3(0)); @@ -758,14 +812,11 @@ mod tests { assert_eq!(u9::MIN, u9(0)); assert_eq!(u127::MIN, u127(0)); - assert_eq!(i1::MIN, i1(-1)); assert_eq!(i2::MIN, i2(-2)); assert_eq!(i3::MIN, i3(-4)); assert_eq!(i7::MIN, i7(-64)); assert_eq!(i9::MIN, i9(-256)); - - } #[test] @@ -794,15 +845,21 @@ mod tests { #[test] #[should_panic] - fn test_add_overflow_u127() { let _s = u127::MAX + u127(1); } + fn test_add_overflow_u127() { + let _s = u127::MAX + u127(1); + } #[test] #[should_panic] - fn test_add_overflow_i96() { let _s = i96::MAX + i96(100); } + fn test_add_overflow_i96() { + let _s = i96::MAX + i96(100); + } #[test] #[should_panic] - fn test_add_underflow_i96() { let _s = i96::MIN + i96(-100); } + fn test_add_underflow_i96() { + let _s = i96::MIN + i96(-100); + } #[test] #[should_panic] @@ -843,8 +900,8 @@ mod tests { assert_eq!(u5(1) - u5(1), u5(0)); assert_eq!(u5(3) - u5(2), u5(1)); - assert_eq!(i1(-1) - i1(-1) , i1(0)); - assert_eq!(i7::MIN - i7::MIN , i7(0)); + assert_eq!(i1(-1) - i1(-1), i1(0)); + assert_eq!(i7::MIN - i7::MIN, i7(0)); assert_eq!(i7(4) - i7(-3), i7(7)); assert_eq!(i7(-4) - i7(3), i7(-7)); assert_eq!(i7(-3) - i7(-20), i7(17)); @@ -994,4 +1051,77 @@ mod tests { assert_eq!(!u7(56), u7(71)); } + const A: u12 = u12(0b000000101100); + const B: u12 = u12(0b000000100001); + const C: u12 = u12(0b000001111001); + + #[test] + fn test_count_ones() { + assert!(A.count_ones() == 3); + assert!(B.count_ones() == 2); + assert!(C.count_ones() == 5); + } + + #[test] + fn test_count_zeros() { + assert_eq!(A.count_zeros(), A.capacity() - 3); + assert_eq!(B.count_zeros(), B.capacity() - 2); + assert_eq!(C.count_zeros(), C.capacity() - 5); + } + + #[test] + fn test_capacity() { + assert_eq!(A.count_zeros() + A.count_ones(), A.capacity()); + assert_eq!(B.count_zeros() + B.count_ones(), B.capacity()); + assert_eq!(C.count_zeros() + C.count_ones(), C.capacity()); + } + + #[test] + fn test_reverse_bits() { + let exp_a: u12 = u12::new(0b001101000000); + let exp_b: u12 = u12::new(0b100001000000); + let exp_c: u12 = u12::new(0b100111100000); + + assert_eq!(A.reverse_bits(), exp_a); + assert_eq!(B.reverse_bits(), exp_b); + assert_eq!(C.reverse_bits(), exp_c); + } + + #[test] + fn test_leading_zeros() { + assert_eq!(A.leading_zeros(), 6); + assert_eq!(B.leading_zeros(), 6); + assert_eq!(C.leading_zeros(), 5); + } + + #[test] + fn test_trailing_zeros() { + assert_eq!(A.trailing_zeros(), 2); + assert_eq!(B.trailing_zeros(), 0); + assert_eq!(C.trailing_zeros(), 0); + } + + #[test] + fn test_rotate() { + assert_eq!(A.rotate_left(6).rotate_right(2).rotate_right(4), A); + assert_eq!(B.rotate_left(3).rotate_left(2).rotate_right(5), B); + assert_eq!(C.rotate_left(6).rotate_right(2).rotate_right(4), C); + + // Rotating by 0 should have no effect + assert_eq!(A.rotate_left(0), A); + assert_eq!(B.rotate_left(0), B); + assert_eq!(C.rotate_left(0), C); + + // Rotating by a multiple of word size should also have no effect + assert_eq!(A.rotate_left(12), A); + assert_eq!(B.rotate_left(12), B); + assert_eq!(C.rotate_left(12), C); + } + + #[test] + fn test_is_power_of_two() { + let a: u12 = u12::new(0b0000001000); + assert!(a.is_power_of_two()); + assert!(!A.is_power_of_two()); + } }