// Copyright © 2024 Mikhail Hogrefe // // This file is part of Malachite. // // Malachite is free software: you can redistribute it and/or modify it under the terms of the GNU // Lesser General Public License (LGPL) as published by the Free Software Foundation; either version // 3 of the License, or (at your option) any later version. See . use itertools::Itertools; use malachite_base::num::arithmetic::traits::PowerOf2; use malachite_base::num::basic::unsigneds::PrimitiveUnsigned; use malachite_base::num::conversion::traits::ExactFrom; use malachite_base::num::exhaustive::exhaustive_unsigneds; fn exhaustive_unsigneds_helper() where u8: ExactFrom, { assert_eq!( exhaustive_unsigneds::() .map(u8::exact_from) .take(20) .collect_vec(), &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] ); } fn exhaustive_unsigneds_long_helper(last_20: &[T]) { let expected_len = usize::power_of_2(T::WIDTH); let xs = exhaustive_unsigneds::(); assert_eq!(xs.clone().count(), expected_len); assert_eq!(xs.skip(expected_len - 20).collect_vec(), last_20); } #[test] fn test_exhaustive_unsigneds() { apply_fn_to_unsigneds!(exhaustive_unsigneds_helper); exhaustive_unsigneds_long_helper::(&[ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, ]); exhaustive_unsigneds_long_helper::(&[ 65516, 65517, 65518, 65519, 0xfff0, 0xfff1, 0xfff2, 0xfff3, 0xfff4, 0xfff5, 0xfff6, 0xfff7, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc, 0xfffd, u16::MAX - 1, u16::MAX, ]); }