mod optimize_chunk_size_and_thread_limit { use gix_features::parallel::optimize_chunk_size_and_thread_limit; #[test] fn not_enough_chunks_for_threads() { assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(10), None, Some(10)), (1, Some(5), 5) ); assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(10), Some(3), Some(10)), (1, Some(3), 3), "the thread limit is always respected" ); } #[test] fn some_more_chunks_per_thread() { assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(30), None, Some(10)), (1, Some(10), 10) ); assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(30), Some(5), Some(10)), (3, Some(5), 5), "the thread limit is always respected" ); } #[test] fn chunk_size_too_small() { assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(100), None, Some(10)), (5, Some(10), 10) ); assert_eq!( optimize_chunk_size_and_thread_limit(1, Some(100), Some(5), Some(10)), (10, Some(5), 5), "the thread limit is always respected" ); } #[test] fn chunk_size_too_big() { assert_eq!( optimize_chunk_size_and_thread_limit(50, Some(100), None, Some(10)), (5, Some(10), 10) ); assert_eq!( optimize_chunk_size_and_thread_limit(50, Some(100), Some(5), Some(10)), (10, Some(5), 5), "the thread limit is always respected" ); } mod unknown_chunk_count { use gix_features::parallel::optimize_chunk_size_and_thread_limit; #[test] fn medium_chunk_size_many_threads() { assert_eq!( optimize_chunk_size_and_thread_limit(50, None, None, Some(4)), (50, Some(4), 4), "really, what do we know" ); } #[test] fn medium_chunk_size_single_thread() { assert_eq!( optimize_chunk_size_and_thread_limit(50, None, None, Some(1)), (50, Some(1), 1), "single threaded - we don't touch that" ); } #[test] fn small_chunk_size_single_thread() { assert_eq!( optimize_chunk_size_and_thread_limit(1, None, None, Some(1)), (1, Some(1), 1), "single threaded - we don't touch that" ); } #[test] fn small_chunk_size_many_threads() { assert_eq!( optimize_chunk_size_and_thread_limit(1, None, None, Some(4)), (50, Some(4), 4), "we prefer an arbitrary number, which should really be based on effort, but the caller has to adjust for that" ); } } mod real_values { use gix_features::parallel::optimize_chunk_size_and_thread_limit; #[test] fn linux_kernel_pack_my_machine_lookup() { assert_eq!( optimize_chunk_size_and_thread_limit(10000, Some(7_500_000), None, Some(4)), (1000, Some(4), 4), "the bucket size is capped actually, somewhat arbitrarily" ); } #[test] fn linux_kernel_pack_my_machine_indexed() { assert_eq!( optimize_chunk_size_and_thread_limit(1, None, None, Some(4)), (50, Some(4), 4), "low values are raised to arbitrary value" ); assert_eq!( optimize_chunk_size_and_thread_limit(10000, None, None, Some(4)), (1000, Some(4), 4), "high values are capped" ); } } }