// 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 core::hash::Hash; use itertools::{repeat_n, Itertools}; use malachite_base::bools::random::random_bools; use malachite_base::num::random::random_primitive_ints; use malachite_base::random::EXAMPLE_SEED; use malachite_base::sets::random::random_b_tree_sets_fixed_length; use malachite_base::test_util::stats::common_values_map::common_values_map_debug; use malachite_base::test_util::stats::median; use std::collections::BTreeSet; use std::fmt::Debug; fn random_b_tree_sets_fixed_length_helper( len: u64, xs: I, expected_values: &[BTreeSet], expected_common_values: &[(BTreeSet, usize)], expected_median: (BTreeSet, Option>), ) where I::Item: Clone + Debug + Eq + Hash + Ord, { let xs = random_b_tree_sets_fixed_length(len, xs); let values = xs.clone().take(20).collect_vec(); let common_values = common_values_map_debug(1000000, 10, xs.clone()); let median = median(xs.take(1000000)); assert_eq!( (values.as_slice(), common_values.as_slice(), median), (expected_values, expected_common_values, expected_median) ); } #[test] fn test_random_b_tree_sets_fixed_length() { random_b_tree_sets_fixed_length_helper( 0, random_primitive_ints::(EXAMPLE_SEED), &repeat_n(btreeset! {}, 20).collect_vec(), &[(btreeset! {}, 1000000)], (btreeset! {}, None), ); random_b_tree_sets_fixed_length_helper( 1, random_bools(EXAMPLE_SEED), &[ btreeset! {true}, btreeset! {false}, btreeset! {false}, btreeset! {false}, btreeset! {true}, btreeset! {true}, btreeset! {true}, btreeset! {false}, btreeset! {true}, btreeset! {true}, btreeset! {true}, btreeset! {true}, btreeset! {false}, btreeset! {true}, btreeset! {true}, btreeset! {true}, btreeset! {true}, btreeset! {false}, btreeset! {true}, btreeset! {false}, ], &[(btreeset! {true}, 500473), (btreeset! {false}, 499527)], (btreeset! {true}, None), ); random_b_tree_sets_fixed_length_helper( 3, random_primitive_ints::(EXAMPLE_SEED), &[ btreeset! {69, 113, 239}, btreeset! {108, 210, 228}, btreeset! {87, 161, 168}, btreeset! {32, 83, 110}, btreeset! {34, 89, 188}, btreeset! {93, 200, 238}, btreeset! {115, 149, 189}, btreeset! {149, 201, 217}, btreeset! {31, 117, 146}, btreeset! {72, 151, 169}, btreeset! {7, 33, 174}, btreeset! {38, 81, 144}, btreeset! {72, 113, 127}, btreeset! {107, 128, 233}, btreeset! {12, 46, 119}, btreeset! {18, 164, 243}, btreeset! {59, 114, 174}, btreeset! {39, 174, 247}, btreeset! {104, 160, 184}, btreeset! {37, 100, 252}, ], &[ (btreeset! {57, 142, 207}, 7), (btreeset! {32, 68, 169}, 6), (btreeset! {36, 70, 195}, 6), (btreeset! {125, 168, 194}, 6), (btreeset! {0, 97, 205}, 5), (btreeset! {2, 33, 227}, 5), (btreeset! {5, 46, 239}, 5), (btreeset! {9, 68, 189}, 5), (btreeset! {9, 78, 240}, 5), (btreeset! {1, 110, 203}, 5), ], (btreeset! {52, 133, 241}, Some(btreeset! {52, 133, 242})), ); random_b_tree_sets_fixed_length_helper( 2, random_b_tree_sets_fixed_length(2, random_primitive_ints::(EXAMPLE_SEED)), &[ btreeset! {btreeset!{69, 108}, btreeset!{113, 239}}, btreeset! {btreeset!{161, 168}, btreeset!{210, 228}}, btreeset! {btreeset!{32, 87}, btreeset!{83, 110}}, btreeset! {btreeset!{34, 188}, btreeset!{89, 238}}, btreeset! {btreeset!{93, 200}, btreeset!{115, 149}}, btreeset! {btreeset!{149, 189}, btreeset!{201, 217}}, btreeset! {btreeset!{31, 72}, btreeset!{117, 146}}, btreeset! {btreeset!{33, 174}, btreeset!{151, 169}}, btreeset! {btreeset!{7, 38}, btreeset!{81, 144}}, btreeset! {btreeset!{72, 127}, btreeset!{113, 128}}, btreeset! {btreeset!{46, 119}, btreeset!{107, 233}}, btreeset! {btreeset!{12, 18}, btreeset!{164, 243}}, btreeset! {btreeset!{59, 247}, btreeset!{114, 174}}, btreeset! {btreeset!{39, 174}, btreeset!{160, 184}}, btreeset! {btreeset!{37, 104}, btreeset!{100, 252}}, btreeset! {btreeset!{69, 107}, btreeset!{122, 228}}, btreeset! {btreeset!{142, 179}, btreeset!{242, 248}}, btreeset! {btreeset!{61, 189}, btreeset!{233, 239}}, btreeset! {btreeset!{7, 192}, btreeset!{85, 235}}, btreeset! {btreeset!{90, 200}, btreeset!{178, 185}}, ], &[ (btreeset! {btreeset!{0, 78}, btreeset!{34, 52}}, 2), (btreeset! {btreeset!{1, 58}, btreeset!{6, 112}}, 2), (btreeset! {btreeset!{1, 63}, btreeset!{8, 154}}, 2), (btreeset! {btreeset!{1, 97}, btreeset!{7, 250}}, 2), (btreeset! {btreeset!{2, 33}, btreeset!{40, 81}}, 2), (btreeset! {btreeset!{3, 160}, btreeset!{7, 29}}, 2), (btreeset! {btreeset!{3, 32}, btreeset!{12, 60}}, 2), (btreeset! {btreeset!{6, 130}, btreeset!{7, 20}}, 2), (btreeset! {btreeset!{6, 68}, btreeset!{7, 126}}, 2), (btreeset! {btreeset!{6, 77}, btreeset!{36, 54}}, 2), ], ( btreeset! {btreeset!{40, 193}, btreeset!{94, 142}}, Some(btreeset! {btreeset!{40, 193}, btreeset!{97, 243}}), ), ); }