use crate::integer_polynomial::arithmetic::coefficient::PolynomialCoefficient;
use crate::platform::Limb;
use malachite_base::num::basic::integers::PrimitiveInt;
use malachite_base::num::conversion::traits::ExactFrom;
use malachite_base::num::logic::traits::SignificantBits;
crate_test_fn! {vec_max_bits<C: PolynomialCoefficient>(xs: &[C]) -> (u64, bool) {
let mut negative = false;
let mut max_limbs = 0;
let mut max_limb: Limb = 0;
for x in xs {
if x.is_negative() {
negative = true;
}
let limbs = x.unsigned_abs_ref().as_limbs_asc();
let len = limbs.len();
if len == 0 {
continue;
}
if len == max_limbs {
max_limb |= limbs[len - 1];
} else if len > max_limbs {
max_limb = limbs[len - 1];
max_limbs = len;
}
}
let bits = if max_limbs == 0 {
0
} else {
(u64::exact_from(max_limbs - 1) << Limb::LOG_WIDTH) + max_limb.significant_bits()
};
(bits, negative)
}}