code_ownership 2.0.0.pre.1 → 2.0.0.pre.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.cargo/config +2 -2
- data/Cargo.lock +22 -31
- data/ext/cargo-vendor/codeowners-0.2.17/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/Cargo.lock +1257 -0
- data/ext/cargo-vendor/codeowners-0.2.17/Cargo.toml +111 -0
- data/ext/cargo-vendor/codeowners-0.2.17/README.md +287 -0
- data/ext/cargo-vendor/codeowners-0.2.17/dev/run_benchmarks_for_gv.sh +12 -0
- data/ext/cargo-vendor/codeowners-0.2.17/rust-toolchain.toml +4 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/cache/file.rs +179 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/cli.rs +129 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/common_test.rs +358 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/config.rs +126 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/crosscheck.rs +90 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/lib.rs +11 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/main.rs +43 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/codeowners_file_parser.rs +504 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/codeowners_query.rs +32 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/file_generator.rs +203 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/file_owner_resolver.rs +414 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper/annotated_file_mapper.rs +158 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper/package_mapper.rs +220 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper.rs +249 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/validator.rs +218 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/ownership.rs +223 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/path_utils.rs +49 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/project.rs +229 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/project_builder.rs +337 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/project_file_builder.rs +107 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/runner/api.rs +141 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/runner/types.rs +37 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/runner.rs +390 -0
- data/ext/cargo-vendor/codeowners-0.2.17/src/tracked_files.rs +58 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/common/mod.rs +179 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/crosscheck_owners_test.rs +74 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/.github/CODEOWNERS +9 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/.keep +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/code_ownership.yml +12 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/teams/design.yml +7 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/teams/frontend.yml +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +9 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +10 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/.github/CODEOWNERS +41 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/config/code_ownership.yml +10 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/models/payroll.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +53 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +10 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +11 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +9 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +8 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +8 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +6 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +9 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +3 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +1 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +5 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/invalid_project_test.rs +144 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/multiple_directory_owners_test.rs +41 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/runner_api.rs +181 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/untracked_files_test.rs +38 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/valid_project_test.rs +348 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tests/valid_project_with_overrides_test.rs +38 -0
- data/ext/cargo-vendor/codeowners-0.2.17/tmp/.gitkeep +0 -0
- data/ext/cargo-vendor/glob-0.3.3/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/glob-0.3.3/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/glob-0.3.3/.github/workflows/rust.yml +99 -0
- data/ext/cargo-vendor/glob-0.3.3/CHANGELOG.md +44 -0
- data/ext/cargo-vendor/glob-0.3.3/Cargo.lock +107 -0
- data/ext/cargo-vendor/glob-0.3.3/Cargo.toml +45 -0
- data/ext/cargo-vendor/glob-0.3.3/Cargo.toml.orig +18 -0
- data/ext/cargo-vendor/glob-0.3.3/README.md +38 -0
- data/ext/cargo-vendor/glob-0.3.3/src/lib.rs +1511 -0
- data/ext/cargo-vendor/glob-0.3.3/tests/glob-std.rs +477 -0
- data/ext/cargo-vendor/indexmap-2.11.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/indexmap-2.11.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/indexmap-2.11.0/.github/workflows/ci.yml +165 -0
- data/ext/cargo-vendor/indexmap-2.11.0/Cargo.lock +243 -0
- data/ext/cargo-vendor/indexmap-2.11.0/Cargo.toml +148 -0
- data/ext/cargo-vendor/indexmap-2.11.0/Cargo.toml.orig +62 -0
- data/ext/cargo-vendor/indexmap-2.11.0/RELEASES.md +575 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/lib.rs +290 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map/core/entry.rs +625 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map/core.rs +764 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map/mutable.rs +165 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map/slice.rs +800 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map/tests.rs +1312 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/map.rs +1832 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/rayon/map.rs +686 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/rayon/set.rs +777 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/set/mutable.rs +86 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/set/slice.rs +427 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/set/tests.rs +1060 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/set.rs +1454 -0
- data/ext/cargo-vendor/indexmap-2.11.0/src/sval.rs +36 -0
- data/ext/cargo-vendor/indexmap-2.11.0/tests/quick.rs +894 -0
- data/ext/cargo-vendor/rayon-1.11.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/rayon-1.11.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/rayon-1.11.0/Cargo.lock +318 -0
- data/ext/cargo-vendor/rayon-1.11.0/Cargo.toml +130 -0
- data/ext/cargo-vendor/rayon-1.11.0/Cargo.toml.orig +57 -0
- data/ext/cargo-vendor/rayon-1.11.0/FAQ.md +213 -0
- data/ext/cargo-vendor/rayon-1.11.0/README.md +150 -0
- data/ext/cargo-vendor/rayon-1.11.0/RELEASES.md +922 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/array.rs +85 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/binary_heap.rs +129 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/btree_map.rs +66 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/btree_set.rs +52 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/hash_map.rs +93 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/hash_set.rs +79 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/linked_list.rs +66 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/mod.rs +84 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/collections/vec_deque.rs +159 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/blocks.rs +129 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/chain.rs +258 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/chunks.rs +216 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/cloned.rs +219 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/collect/mod.rs +114 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/collect/test.rs +368 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/copied.rs +219 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/empty.rs +108 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/enumerate.rs +128 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/filter.rs +137 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/filter_map.rs +141 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/find_first_last/mod.rs +230 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/find_first_last/test.rs +102 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/flat_map.rs +153 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/flat_map_iter.rs +145 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/flatten.rs +134 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/flatten_iter.rs +124 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold.rs +289 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold_chunks.rs +224 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold_chunks_with.rs +220 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/from_par_iter.rs +280 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/inspect.rs +253 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/interleave.rs +326 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/interleave_shortest.rs +80 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/intersperse.rs +401 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/len.rs +262 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/map.rs +255 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/map_with.rs +565 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/mod.rs +3627 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/multizip.rs +335 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/once.rs +70 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/panic_fuse.rs +338 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/par_bridge.rs +157 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/plumbing/mod.rs +476 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/positions.rs +133 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/repeat.rs +295 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/rev.rs +119 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip.rs +93 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip_any.rs +140 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip_any_while.rs +162 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/splitter.rs +172 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/step_by.rs +135 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/take.rs +84 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/take_any.rs +140 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/take_any_while.rs +162 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/test.rs +2392 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/try_fold.rs +282 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/unzip.rs +524 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/update.rs +323 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/walk_tree.rs +524 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/while_some.rs +150 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/zip.rs +153 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/iter/zip_eq.rs +67 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/lib.rs +156 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/math.rs +25 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/option.rs +197 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/range.rs +457 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/range_inclusive.rs +381 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/result.rs +132 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/chunk_by.rs +239 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/chunks.rs +387 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/mod.rs +1242 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/rchunks.rs +385 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/sort.rs +1686 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/slice/test.rs +216 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/str.rs +1005 -0
- data/ext/cargo-vendor/rayon-1.11.0/src/vec.rs +292 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/clones.rs +222 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/collect.rs +113 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/debug.rs +233 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/named-threads.rs +25 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/producer_split_at.rs +386 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/sort-panic-safe.rs +164 -0
- data/ext/cargo-vendor/rayon-1.11.0/tests/str.rs +122 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.lock +309 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.toml +93 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.toml.orig +35 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/README.md +11 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/broadcast/mod.rs +150 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/join/mod.rs +186 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/join/test.rs +150 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/latch.rs +457 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/lib.rs +864 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/registry.rs +1002 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/scope/mod.rs +773 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/scope/test.rs +621 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/README.md +219 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/counters.rs +273 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/mod.rs +324 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/spawn/mod.rs +163 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/spawn/test.rs +255 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/test.rs +200 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/thread_pool/mod.rs +502 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/src/thread_pool/test.rs +418 -0
- data/ext/cargo-vendor/rayon-core-1.13.0/tests/use_current_thread.rs +57 -0
- data/ext/cargo-vendor/serde_json-1.0.143/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/serde_json-1.0.143/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/serde_json-1.0.143/.github/workflows/ci.yml +156 -0
- data/ext/cargo-vendor/serde_json-1.0.143/Cargo.lock +419 -0
- data/ext/cargo-vendor/serde_json-1.0.143/Cargo.toml +157 -0
- data/ext/cargo-vendor/serde_json-1.0.143/Cargo.toml.orig +91 -0
- data/ext/cargo-vendor/serde_json-1.0.143/src/lib.rs +438 -0
- data/ext/cargo-vendor/serde_json-1.0.143/src/map.rs +1181 -0
- data/ext/cargo-vendor/serde_json-1.0.143/src/ser.rs +2285 -0
- data/ext/cargo-vendor/serde_json-1.0.143/src/value/de.rs +1507 -0
- data/ext/cargo-vendor/tempfile-3.21.0/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/tempfile-3.21.0/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/tempfile-3.21.0/.github/workflows/ci.yml +109 -0
- data/ext/cargo-vendor/tempfile-3.21.0/CHANGELOG.md +364 -0
- data/ext/cargo-vendor/tempfile-3.21.0/Cargo.lock +196 -0
- data/ext/cargo-vendor/tempfile-3.21.0/Cargo.toml +98 -0
- data/ext/cargo-vendor/tempfile-3.21.0/Cargo.toml.orig +47 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/.cargo-checksum.json +1 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/.cargo_vcs_info.json +6 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/.github/FUNDING.yml +1 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.lock +83 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.toml +54 -0
- data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.toml.orig +25 -0
- data/ext/code_ownership/Cargo.toml +9 -9
- data/ext/code_ownership/src/lib.rs +40 -6
- data/lib/code_ownership/cli.rb +5 -18
- data/lib/code_ownership/private/for_file_output_builder.rb +83 -0
- data/lib/code_ownership/private/team_finder.rb +21 -7
- data/lib/code_ownership/version.rb +1 -1
- data/lib/code_ownership.rb +173 -6
- metadata +513 -706
- data/ext/cargo-vendor/codeowners-0.2.7/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/codeowners-0.2.7/Cargo.lock +0 -1230
- data/ext/cargo-vendor/codeowners-0.2.7/Cargo.toml +0 -95
- data/ext/cargo-vendor/codeowners-0.2.7/README.md +0 -204
- data/ext/cargo-vendor/codeowners-0.2.7/dev/run_benchmarks_for_gv.sh +0 -13
- data/ext/cargo-vendor/codeowners-0.2.7/rust-toolchain.toml +0 -4
- data/ext/cargo-vendor/codeowners-0.2.7/src/cache/file.rs +0 -181
- data/ext/cargo-vendor/codeowners-0.2.7/src/cli.rs +0 -119
- data/ext/cargo-vendor/codeowners-0.2.7/src/common_test.rs +0 -338
- data/ext/cargo-vendor/codeowners-0.2.7/src/config.rs +0 -118
- data/ext/cargo-vendor/codeowners-0.2.7/src/lib.rs +0 -8
- data/ext/cargo-vendor/codeowners-0.2.7/src/main.rs +0 -43
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/file_generator.rs +0 -203
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/for_file_fast.rs +0 -425
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper/package_mapper.rs +0 -220
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper/team_file_mapper.rs +0 -123
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper.rs +0 -249
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/parser.rs +0 -486
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/tests.rs +0 -219
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/validator.rs +0 -218
- data/ext/cargo-vendor/codeowners-0.2.7/src/ownership.rs +0 -220
- data/ext/cargo-vendor/codeowners-0.2.7/src/project.rs +0 -229
- data/ext/cargo-vendor/codeowners-0.2.7/src/project_builder.rs +0 -319
- data/ext/cargo-vendor/codeowners-0.2.7/src/project_file_builder.rs +0 -75
- data/ext/cargo-vendor/codeowners-0.2.7/src/runner.rs +0 -312
- data/ext/cargo-vendor/codeowners-0.2.7/tests/common/mod.rs +0 -113
- data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -10
- data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/.github/CODEOWNERS +0 -37
- data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/config/code_ownership.yml +0 -10
- data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -3
- data/ext/cargo-vendor/codeowners-0.2.7/tests/invalid_project_test.rs +0 -90
- data/ext/cargo-vendor/codeowners-0.2.7/tests/multiple_directory_owners_test.rs +0 -35
- data/ext/cargo-vendor/codeowners-0.2.7/tests/valid_project_test.rs +0 -284
- data/ext/cargo-vendor/glob-0.3.2/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/glob-0.3.2/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/glob-0.3.2/.github/workflows/rust.yml +0 -65
- data/ext/cargo-vendor/glob-0.3.2/CHANGELOG.md +0 -33
- data/ext/cargo-vendor/glob-0.3.2/Cargo.lock +0 -107
- data/ext/cargo-vendor/glob-0.3.2/Cargo.toml +0 -45
- data/ext/cargo-vendor/glob-0.3.2/Cargo.toml.orig +0 -19
- data/ext/cargo-vendor/glob-0.3.2/README.md +0 -37
- data/ext/cargo-vendor/glob-0.3.2/src/lib.rs +0 -1501
- data/ext/cargo-vendor/glob-0.3.2/tests/glob-std.rs +0 -474
- data/ext/cargo-vendor/indexmap-2.10.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/indexmap-2.10.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/indexmap-2.10.0/.github/workflows/ci.yml +0 -159
- data/ext/cargo-vendor/indexmap-2.10.0/Cargo.lock +0 -236
- data/ext/cargo-vendor/indexmap-2.10.0/Cargo.toml +0 -142
- data/ext/cargo-vendor/indexmap-2.10.0/Cargo.toml.orig +0 -61
- data/ext/cargo-vendor/indexmap-2.10.0/RELEASES.md +0 -563
- data/ext/cargo-vendor/indexmap-2.10.0/src/lib.rs +0 -288
- data/ext/cargo-vendor/indexmap-2.10.0/src/map/core/entry.rs +0 -574
- data/ext/cargo-vendor/indexmap-2.10.0/src/map/core.rs +0 -735
- data/ext/cargo-vendor/indexmap-2.10.0/src/map/mutable.rs +0 -165
- data/ext/cargo-vendor/indexmap-2.10.0/src/map/slice.rs +0 -751
- data/ext/cargo-vendor/indexmap-2.10.0/src/map/tests.rs +0 -1228
- data/ext/cargo-vendor/indexmap-2.10.0/src/map.rs +0 -1697
- data/ext/cargo-vendor/indexmap-2.10.0/src/rayon/map.rs +0 -662
- data/ext/cargo-vendor/indexmap-2.10.0/src/rayon/set.rs +0 -755
- data/ext/cargo-vendor/indexmap-2.10.0/src/set/mutable.rs +0 -86
- data/ext/cargo-vendor/indexmap-2.10.0/src/set/slice.rs +0 -380
- data/ext/cargo-vendor/indexmap-2.10.0/src/set/tests.rs +0 -999
- data/ext/cargo-vendor/indexmap-2.10.0/src/set.rs +0 -1340
- data/ext/cargo-vendor/indexmap-2.10.0/tests/quick.rs +0 -800
- data/ext/cargo-vendor/rayon-1.10.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/rayon-1.10.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/rayon-1.10.0/Cargo.toml +0 -61
- data/ext/cargo-vendor/rayon-1.10.0/Cargo.toml.orig +0 -39
- data/ext/cargo-vendor/rayon-1.10.0/FAQ.md +0 -227
- data/ext/cargo-vendor/rayon-1.10.0/README.md +0 -151
- data/ext/cargo-vendor/rayon-1.10.0/RELEASES.md +0 -909
- data/ext/cargo-vendor/rayon-1.10.0/src/array.rs +0 -85
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/binary_heap.rs +0 -120
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/btree_map.rs +0 -66
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/btree_set.rs +0 -52
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/hash_map.rs +0 -96
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/hash_set.rs +0 -80
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/linked_list.rs +0 -66
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/mod.rs +0 -84
- data/ext/cargo-vendor/rayon-1.10.0/src/collections/vec_deque.rs +0 -159
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/blocks.rs +0 -131
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/chain.rs +0 -267
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/chunks.rs +0 -224
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/cloned.rs +0 -223
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/collect/mod.rs +0 -116
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/collect/test.rs +0 -373
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/copied.rs +0 -223
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/empty.rs +0 -104
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/enumerate.rs +0 -133
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/filter.rs +0 -141
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/filter_map.rs +0 -142
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/find_first_last/mod.rs +0 -230
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/find_first_last/test.rs +0 -105
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/flat_map.rs +0 -154
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/flat_map_iter.rs +0 -147
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/flatten.rs +0 -140
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/flatten_iter.rs +0 -132
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold.rs +0 -302
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold_chunks.rs +0 -236
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold_chunks_with.rs +0 -231
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/from_par_iter.rs +0 -310
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/inspect.rs +0 -257
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/interleave.rs +0 -335
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/interleave_shortest.rs +0 -85
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/intersperse.rs +0 -410
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/len.rs +0 -270
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/map.rs +0 -259
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/map_with.rs +0 -573
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/mod.rs +0 -3656
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/multizip.rs +0 -338
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/once.rs +0 -68
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/panic_fuse.rs +0 -342
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/par_bridge.rs +0 -159
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/plumbing/mod.rs +0 -483
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/positions.rs +0 -137
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/repeat.rs +0 -241
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/rev.rs +0 -123
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip.rs +0 -94
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip_any.rs +0 -144
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip_any_while.rs +0 -166
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/splitter.rs +0 -174
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/step_by.rs +0 -141
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/take.rs +0 -85
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/take_any.rs +0 -144
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/take_any_while.rs +0 -166
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/test.rs +0 -2333
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/try_fold.rs +0 -298
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/unzip.rs +0 -525
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/update.rs +0 -327
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/walk_tree.rs +0 -529
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/while_some.rs +0 -154
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/zip.rs +0 -158
- data/ext/cargo-vendor/rayon-1.10.0/src/iter/zip_eq.rs +0 -72
- data/ext/cargo-vendor/rayon-1.10.0/src/lib.rs +0 -160
- data/ext/cargo-vendor/rayon-1.10.0/src/math.rs +0 -54
- data/ext/cargo-vendor/rayon-1.10.0/src/option.rs +0 -203
- data/ext/cargo-vendor/rayon-1.10.0/src/range.rs +0 -454
- data/ext/cargo-vendor/rayon-1.10.0/src/range_inclusive.rs +0 -381
- data/ext/cargo-vendor/rayon-1.10.0/src/result.rs +0 -132
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/chunk_by.rs +0 -244
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/chunks.rs +0 -388
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/mergesort.rs +0 -755
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/mod.rs +0 -1226
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/quicksort.rs +0 -902
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/rchunks.rs +0 -386
- data/ext/cargo-vendor/rayon-1.10.0/src/slice/test.rs +0 -216
- data/ext/cargo-vendor/rayon-1.10.0/src/str.rs +0 -1010
- data/ext/cargo-vendor/rayon-1.10.0/src/vec.rs +0 -283
- data/ext/cargo-vendor/rayon-1.10.0/tests/clones.rs +0 -222
- data/ext/cargo-vendor/rayon-1.10.0/tests/collect.rs +0 -113
- data/ext/cargo-vendor/rayon-1.10.0/tests/debug.rs +0 -233
- data/ext/cargo-vendor/rayon-1.10.0/tests/named-threads.rs +0 -25
- data/ext/cargo-vendor/rayon-1.10.0/tests/producer_split_at.rs +0 -391
- data/ext/cargo-vendor/rayon-1.10.0/tests/sort-panic-safe.rs +0 -167
- data/ext/cargo-vendor/rayon-1.10.0/tests/str.rs +0 -119
- data/ext/cargo-vendor/rayon-core-1.12.1/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/rayon-core-1.12.1/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/rayon-core-1.12.1/Cargo.toml +0 -88
- data/ext/cargo-vendor/rayon-core-1.12.1/Cargo.toml.orig +0 -68
- data/ext/cargo-vendor/rayon-core-1.12.1/README.md +0 -11
- data/ext/cargo-vendor/rayon-core-1.12.1/src/broadcast/mod.rs +0 -150
- data/ext/cargo-vendor/rayon-core-1.12.1/src/join/mod.rs +0 -188
- data/ext/cargo-vendor/rayon-core-1.12.1/src/join/test.rs +0 -151
- data/ext/cargo-vendor/rayon-core-1.12.1/src/latch.rs +0 -461
- data/ext/cargo-vendor/rayon-core-1.12.1/src/lib.rs +0 -875
- data/ext/cargo-vendor/rayon-core-1.12.1/src/registry.rs +0 -996
- data/ext/cargo-vendor/rayon-core-1.12.1/src/scope/mod.rs +0 -769
- data/ext/cargo-vendor/rayon-core-1.12.1/src/scope/test.rs +0 -619
- data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/README.md +0 -219
- data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/counters.rs +0 -277
- data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/mod.rs +0 -325
- data/ext/cargo-vendor/rayon-core-1.12.1/src/spawn/mod.rs +0 -163
- data/ext/cargo-vendor/rayon-core-1.12.1/src/spawn/test.rs +0 -255
- data/ext/cargo-vendor/rayon-core-1.12.1/src/test.rs +0 -200
- data/ext/cargo-vendor/rayon-core-1.12.1/src/thread_pool/mod.rs +0 -508
- data/ext/cargo-vendor/rayon-core-1.12.1/src/thread_pool/test.rs +0 -418
- data/ext/cargo-vendor/rayon-core-1.12.1/tests/use_current_thread.rs +0 -57
- data/ext/cargo-vendor/serde_json-1.0.142/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/serde_json-1.0.142/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/serde_json-1.0.142/.github/workflows/ci.yml +0 -158
- data/ext/cargo-vendor/serde_json-1.0.142/Cargo.lock +0 -419
- data/ext/cargo-vendor/serde_json-1.0.142/Cargo.toml +0 -157
- data/ext/cargo-vendor/serde_json-1.0.142/Cargo.toml.orig +0 -91
- data/ext/cargo-vendor/serde_json-1.0.142/src/lib.rs +0 -438
- data/ext/cargo-vendor/serde_json-1.0.142/src/map.rs +0 -1174
- data/ext/cargo-vendor/serde_json-1.0.142/src/ser.rs +0 -2285
- data/ext/cargo-vendor/serde_json-1.0.142/src/value/de.rs +0 -1500
- data/ext/cargo-vendor/tempfile-3.20.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/tempfile-3.20.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/tempfile-3.20.0/.github/workflows/ci.yml +0 -107
- data/ext/cargo-vendor/tempfile-3.20.0/CHANGELOG.md +0 -360
- data/ext/cargo-vendor/tempfile-3.20.0/Cargo.lock +0 -183
- data/ext/cargo-vendor/tempfile-3.20.0/Cargo.toml +0 -98
- data/ext/cargo-vendor/tempfile-3.20.0/Cargo.toml.orig +0 -47
- data/ext/cargo-vendor/winapi-util-0.1.9/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/winapi-util-0.1.9/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/winapi-util-0.1.9/Cargo.toml +0 -53
- data/ext/cargo-vendor/winapi-util-0.1.9/Cargo.toml.orig +0 -25
- data/ext/cargo-vendor/windows-sys-0.59.0/.cargo-checksum.json +0 -1
- data/ext/cargo-vendor/windows-sys-0.59.0/.cargo_vcs_info.json +0 -6
- data/ext/cargo-vendor/windows-sys-0.59.0/Cargo.toml +0 -298
- data/ext/cargo-vendor/windows-sys-0.59.0/Cargo.toml.orig +0 -274
- data/ext/cargo-vendor/windows-sys-0.59.0/license-apache-2.0 +0 -201
- data/ext/cargo-vendor/windows-sys-0.59.0/license-mit +0 -21
- data/ext/cargo-vendor/windows-sys-0.59.0/readme.md +0 -87
- data/ext/cargo-vendor/windows-sys-0.59.0/rustfmt.toml +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/Bluetooth/mod.rs +0 -32
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/HumanInterfaceDevice/mod.rs +0 -39
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/mod.rs +0 -4
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Foundation/mod.rs +0 -1317
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Graphics/Direct3D/mod.rs +0 -9170
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Graphics/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/Ndis/mod.rs +0 -3892
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/WindowsFilteringPlatform/mod.rs +0 -269
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/mod.rs +0 -4
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/FileSystem/Minifilters/mod.rs +0 -1392
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/FileSystem/mod.rs +0 -4503
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/IO/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Memory/mod.rs +0 -11
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/OfflineRegistry/mod.rs +0 -28
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Registry/mod.rs +0 -180
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/SystemInformation/mod.rs +0 -18
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/SystemServices/mod.rs +0 -13663
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Threading/mod.rs +0 -155
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/mod.rs +0 -14
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/mod.rs +0 -12
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/HtmlHelp/mod.rs +0 -447
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/RightsManagement/mod.rs +0 -237
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/mod.rs +0 -4
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/AllJoyn/mod.rs +0 -1273
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/BiometricFramework/mod.rs +0 -1481
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Bluetooth/mod.rs +0 -1419
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Communication/mod.rs +0 -312
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/DeviceAndDriverInstallation/mod.rs +0 -3969
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/DeviceQuery/mod.rs +0 -141
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Display/mod.rs +0 -3141
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Enumeration/Pnp/mod.rs +0 -96
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Enumeration/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Fax/mod.rs +0 -1203
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/HumanInterfaceDevice/mod.rs +0 -3684
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/PortableDevices/mod.rs +0 -1999
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Properties/mod.rs +0 -261
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Pwm/mod.rs +0 -73
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Sensors/mod.rs +0 -687
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/SerialCommunication/mod.rs +0 -230
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Tapi/mod.rs +0 -3217
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Usb/mod.rs +0 -2694
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/WebServicesOnDevices/mod.rs +0 -660
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/mod.rs +0 -36
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Foundation/mod.rs +0 -10318
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Gaming/mod.rs +0 -99
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Globalization/mod.rs +0 -5135
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Dwm/mod.rs +0 -232
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Gdi/mod.rs +0 -3857
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/GdiPlus/mod.rs +0 -2307
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Hlsl/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/OpenGL/mod.rs +0 -1276
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Printing/PrintTicket/mod.rs +0 -28
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Printing/mod.rs +0 -4147
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/mod.rs +0 -12
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Management/MobileDeviceManagementRegistration/mod.rs +0 -101
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Management/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Audio/mod.rs +0 -2052
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/DxMediaObjects/mod.rs +0 -94
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/KernelStreaming/mod.rs +0 -5281
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Multimedia/mod.rs +0 -6442
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Streaming/mod.rs +0 -117
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/WindowsMediaFormat/mod.rs +0 -910
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/mod.rs +0 -187
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Dhcp/mod.rs +0 -1926
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Dns/mod.rs +0 -1564
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/InternetConnectionWizard/mod.rs +0 -22
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/IpHelper/mod.rs +0 -3004
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Multicast/mod.rs +0 -59
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Ndis/mod.rs +0 -3334
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetBios/mod.rs +0 -211
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetManagement/mod.rs +0 -4814
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetShell/mod.rs +0 -160
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetworkDiagnosticsFramework/mod.rs +0 -222
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/P2P/mod.rs +0 -1196
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/QoS/mod.rs +0 -1447
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Rras/mod.rs +0 -3212
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Snmp/mod.rs +0 -381
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WNet/mod.rs +0 -363
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WebDav/mod.rs +0 -47
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WiFi/mod.rs +0 -4311
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsConnectionManager/mod.rs +0 -119
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsFilteringPlatform/mod.rs +0 -3818
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsFirewall/mod.rs +0 -281
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsNetworkVirtualization/mod.rs +0 -104
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/mod.rs +0 -42
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/ActiveDirectory/mod.rs +0 -2383
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/Clustering/mod.rs +0 -3900
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/HttpServer/mod.rs +0 -1239
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/Ldap/mod.rs +0 -817
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WebSocket/mod.rs +0 -88
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinHttp/mod.rs +0 -1109
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinInet/mod.rs +0 -2168
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinSock/mod.rs +0 -4786
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WindowsWebServices/mod.rs +0 -3480
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/mod.rs +0 -18
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/AppLocker/mod.rs +0 -172
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authentication/Identity/mod.rs +0 -5701
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authentication/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authorization/mod.rs +0 -984
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Credentials/mod.rs +0 -797
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Catalog/mod.rs +0 -151
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Certificates/mod.rs +0 -2315
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Sip/mod.rs +0 -155
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/UI/mod.rs +0 -545
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/mod.rs +0 -8528
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/DiagnosticDataQuery/mod.rs +0 -156
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/DirectoryServices/mod.rs +0 -19
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/EnterpriseData/mod.rs +0 -36
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/ExtensibleAuthenticationProtocol/mod.rs +0 -998
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Isolation/mod.rs +0 -20
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/LicenseProtection/mod.rs +0 -8
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/NetworkAccessProtection/mod.rs +0 -149
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/WinTrust/mod.rs +0 -863
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/WinWlx/mod.rs +0 -335
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/mod.rs +0 -1156
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Cabinets/mod.rs +0 -209
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/CloudFilters/mod.rs +0 -666
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Compression/mod.rs +0 -36
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/DistributedFileSystem/mod.rs +0 -342
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/FileHistory/mod.rs +0 -97
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/FileSystem/mod.rs +0 -3699
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Imapi/mod.rs +0 -697
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/IndexServer/mod.rs +0 -279
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/InstallableFileSystems/mod.rs +0 -331
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/IscsiDisc/mod.rs +0 -1291
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Jet/mod.rs +0 -2593
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Nvme/mod.rs +0 -3428
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/OfflineFiles/mod.rs +0 -276
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/OperationRecorder/mod.rs +0 -20
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Packaging/Appx/mod.rs +0 -377
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Packaging/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/ProjectedFileSystem/mod.rs +0 -246
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/StructuredStorage/mod.rs +0 -3
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Vhd/mod.rs +0 -720
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Xps/mod.rs +0 -415
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/mod.rs +0 -38
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/AddressBook/mod.rs +0 -938
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Antimalware/mod.rs +0 -112
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ApplicationInstallationAndServicing/mod.rs +0 -2145
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ApplicationVerifier/mod.rs +0 -58
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ClrHosting/mod.rs +0 -322
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/Marshal/mod.rs +0 -172
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/StructuredStorage/mod.rs +0 -655
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/Urlmon/mod.rs +0 -905
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/mod.rs +0 -1227
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ComponentServices/mod.rs +0 -574
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Console/mod.rs +0 -373
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/CorrelationVector/mod.rs +0 -15
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DataExchange/mod.rs +0 -428
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DeploymentServices/mod.rs +0 -565
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DeveloperLicensing/mod.rs +0 -3
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Ceip/mod.rs +0 -1
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Debug/Extensions/mod.rs +0 -3710
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Debug/mod.rs +0 -5557
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Etw/mod.rs +0 -2042
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/ProcessSnapshotting/mod.rs +0 -293
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/ToolHelp/mod.rs +0 -119
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/TraceLogging/mod.rs +0 -105
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/mod.rs +0 -12
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DistributedTransactionCoordinator/mod.rs +0 -308
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Environment/mod.rs +0 -202
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ErrorReporting/mod.rs +0 -393
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventCollector/mod.rs +0 -117
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventLog/mod.rs +0 -379
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventNotificationService/mod.rs +0 -35
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/GroupPolicy/mod.rs +0 -424
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostCompute/mod.rs +0 -1
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostComputeNetwork/mod.rs +0 -86
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostComputeSystem/mod.rs +0 -171
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Hypervisor/mod.rs +0 -1983
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/IO/mod.rs +0 -53
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Iis/mod.rs +0 -1411
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Ioctl/mod.rs +0 -6216
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/JobObjects/mod.rs +0 -434
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Js/mod.rs +0 -154
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Kernel/mod.rs +0 -295
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/LibraryLoader/mod.rs +0 -106
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Mailslots/mod.rs +0 -6
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Mapi/mod.rs +0 -150
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Memory/NonVolatile/mod.rs +0 -20
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Memory/mod.rs +0 -464
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/MessageQueuing/mod.rs +0 -712
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/MixedReality/mod.rs +0 -14
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Ole/mod.rs +0 -2599
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/PasswordManagement/mod.rs +0 -22
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Performance/HardwareCounterProfiling/mod.rs +0 -27
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Performance/mod.rs +0 -1091
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Pipes/mod.rs +0 -42
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Power/mod.rs +0 -1413
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ProcessStatus/mod.rs +0 -200
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Recovery/mod.rs +0 -15
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Registry/mod.rs +0 -1114
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RemoteDesktop/mod.rs +0 -1771
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RemoteManagement/mod.rs +0 -935
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RestartManager/mod.rs +0 -86
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Restore/mod.rs +0 -66
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Rpc/mod.rs +0 -2668
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Search/Common/mod.rs +0 -21
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Search/mod.rs +0 -5993
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SecurityCenter/mod.rs +0 -41
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Services/mod.rs +0 -587
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SetupAndMigration/mod.rs +0 -4
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Shutdown/mod.rs +0 -111
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/StationsAndDesktops/mod.rs +0 -99
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SubsystemForLinux/mod.rs +0 -12
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SystemInformation/mod.rs +0 -751
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SystemServices/mod.rs +0 -4541
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Threading/mod.rs +0 -1148
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Time/mod.rs +0 -50
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/TpmBaseServices/mod.rs +0 -89
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/UserAccessLogging/mod.rs +0 -17
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Variant/mod.rs +0 -321
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/VirtualDosMachines/mod.rs +0 -297
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/WindowsProgramming/mod.rs +0 -1633
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Wmi/mod.rs +0 -2435
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/mod.rs +0 -132
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Accessibility/mod.rs +0 -1788
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/ColorSystem/mod.rs +0 -702
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Controls/Dialogs/mod.rs +0 -1128
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Controls/mod.rs +0 -7276
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/HiDpi/mod.rs +0 -66
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Ime/mod.rs +0 -1394
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/KeyboardAndMouse/mod.rs +0 -765
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Pointer/mod.rs +0 -168
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Touch/mod.rs +0 -89
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/XboxController/mod.rs +0 -151
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/mod.rs +0 -182
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/InteractionContext/mod.rs +0 -230
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Magnification/mod.rs +0 -52
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/Common/mod.rs +0 -104
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/PropertiesSystem/mod.rs +0 -322
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/mod.rs +0 -6704
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/TabletPC/mod.rs +0 -1537
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/TextServices/mod.rs +0 -794
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs +0 -3760
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/mod.rs +0 -22
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Web/InternetExplorer/mod.rs +0 -628
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Web/mod.rs +0 -2
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/mod.rs +0 -30
- data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/mod.rs +0 -4
- data/ext/cargo-vendor/windows-sys-0.59.0/src/core/literals.rs +0 -114
- data/ext/cargo-vendor/windows-sys-0.59.0/src/core/mod.rs +0 -33
- data/ext/cargo-vendor/windows-sys-0.59.0/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs +0 -8
- data/ext/cargo-vendor/windows-sys-0.59.0/src/lib.rs +0 -17
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/audit.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/ci.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/dotslash-config.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.rustfmt.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.rusty-hook.toml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/dev/run_benchmarks_for_file.sh +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/cache/mod.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/cache/noop.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/file_owner_finder.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/directory_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/escaper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_gem_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_glob_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_yml_mapper.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/cache_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/.ignore +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/gems/pets/dog.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7/tmp/.gitkeep → codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb} +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/git_stage_test.rs +0 -0
- /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/invalid_project_structure_test.rs +0 -0
- /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/.github/dependabot.yml +0 -0
- /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/.github/workflows/publish.yml +0 -0
- /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/triagebot.toml +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/.rustfmt.toml +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/README.md +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/benches/bench.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/benches/faststring.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/arbitrary.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/borsh.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/macros.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/core/extract.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/core/raw_entry_v1.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/iter.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/serde_seq.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/rayon/mod.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/serde.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/set/iter.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/util.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/equivalent_trait.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/macros_full_path.rs +0 -0
- /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/tests.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cannot_collect_filtermap_data.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cannot_zip_filtered_data.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cell_par_iter.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/mod.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/must_use.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/no_send_par_iter.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/rc_par_iter.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/delegate.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/collect/consumer.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/extend.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/find.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/for_each.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/noop.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/plumbing/README.md +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/product.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/reduce.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/sum.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/try_reduce.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/try_reduce_with.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/par_either.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/prelude.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/private.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/split_producer.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/string.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/chars.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/cross-pool.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/drain_vec.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/intersperse.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/issue671-unzip.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/issue671.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/iter_panic.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/octillion.rs +0 -0
- /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/par_bridge_recursion.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/build.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/broadcast/test.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/mod.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race1.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race2.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race3.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/rc_return.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/rc_upvar.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/scope_join_bad.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/job.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/private.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/unwind.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/double_init_fail.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/init_zero_threads.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/scope_join.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/scoped_threadpool.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/simple_panic.rs +0 -0
- /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/stack_overflow_crash.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/CONTRIBUTING.md +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/README.md +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/build.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/de.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/error.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/io/core.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/io/mod.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/iter.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/algorithm.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/bhcomp.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/bignum.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/cached.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/cached_float80.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/digit.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/errors.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/exponent.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/float.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers32.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers64.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/math.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/mod.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/num.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/parse.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/rounding.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/shift.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/small_powers.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/macros.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/number.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/raw.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/read.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/from.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/index.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/mod.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/partial_eq.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/ser.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/compiletest.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/debug.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/algorithm.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/exponent.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/float.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/math.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/num.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/parse.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/rounding.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/macros/mod.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/map.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue1004.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue520.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue795.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue845.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue953.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/stream.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/test.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_colon.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_colon.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_comma.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_comma.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_value.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_value.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/not_found.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/not_found.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_expr.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_expr.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_key.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_key.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_array_element.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_array_element.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_map_entry.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_map_entry.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_colon.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_colon.stderr +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_comma.rs +0 -0
- /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_comma.stderr +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/.github/dependabot.yml +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/LICENSE-APACHE +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/README.md +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/deny.toml +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/any.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/mod.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/unix.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/mod.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/env.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/error.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/mod.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/other.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/unix.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/windows.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/mod.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/lib.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/spooled.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/util.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/env.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/namedtempfile.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/spooled.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/tempdir.rs +0 -0
- /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/tempfile.rs +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/.github/workflows/ci.yml +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/COPYING +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/LICENSE-MIT +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/README.md +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/UNLICENSE +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/rustfmt.toml +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/console.rs +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/file.rs +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/lib.rs +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/sysinfo.rs +0 -0
- /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/win.rs +0 -0
@@ -0,0 +1,2392 @@
|
|
1
|
+
use std::sync::atomic::{AtomicUsize, Ordering};
|
2
|
+
|
3
|
+
use super::*;
|
4
|
+
use crate::prelude::*;
|
5
|
+
use rayon_core::*;
|
6
|
+
|
7
|
+
use rand::distr::StandardUniform;
|
8
|
+
use rand::{Rng, SeedableRng};
|
9
|
+
use rand_xorshift::XorShiftRng;
|
10
|
+
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
|
11
|
+
use std::collections::{BinaryHeap, VecDeque};
|
12
|
+
use std::ffi::OsStr;
|
13
|
+
use std::fmt::Debug;
|
14
|
+
use std::sync::mpsc;
|
15
|
+
|
16
|
+
fn is_indexed<T: IndexedParallelIterator>(_: T) {}
|
17
|
+
|
18
|
+
fn seeded_rng() -> XorShiftRng {
|
19
|
+
let mut seed = <XorShiftRng as SeedableRng>::Seed::default();
|
20
|
+
(0..).zip(seed.as_mut()).for_each(|(i, x)| *x = i);
|
21
|
+
XorShiftRng::from_seed(seed)
|
22
|
+
}
|
23
|
+
|
24
|
+
#[test]
|
25
|
+
fn execute() {
|
26
|
+
let a: Vec<i32> = (0..1024).collect();
|
27
|
+
let mut b = vec![];
|
28
|
+
a.par_iter().map(|&i| i + 1).collect_into_vec(&mut b);
|
29
|
+
let c: Vec<i32> = (0..1024).map(|i| i + 1).collect();
|
30
|
+
assert_eq!(b, c);
|
31
|
+
}
|
32
|
+
|
33
|
+
#[test]
|
34
|
+
fn execute_cloned() {
|
35
|
+
let a: Vec<i32> = (0..1024).collect();
|
36
|
+
let mut b: Vec<i32> = vec![];
|
37
|
+
a.par_iter().cloned().collect_into_vec(&mut b);
|
38
|
+
let c: Vec<i32> = (0..1024).collect();
|
39
|
+
assert_eq!(b, c);
|
40
|
+
}
|
41
|
+
|
42
|
+
#[test]
|
43
|
+
fn execute_range() {
|
44
|
+
let a = 0i32..1024;
|
45
|
+
let mut b = vec![];
|
46
|
+
a.into_par_iter().map(|i| i + 1).collect_into_vec(&mut b);
|
47
|
+
let c: Vec<i32> = (0..1024).map(|i| i + 1).collect();
|
48
|
+
assert_eq!(b, c);
|
49
|
+
}
|
50
|
+
|
51
|
+
#[test]
|
52
|
+
fn execute_unindexed_range() {
|
53
|
+
let a = 0i64..1024;
|
54
|
+
let b: LinkedList<i64> = a.into_par_iter().map(|i| i + 1).collect();
|
55
|
+
let c: LinkedList<i64> = (0..1024).map(|i| i + 1).collect();
|
56
|
+
assert_eq!(b, c);
|
57
|
+
}
|
58
|
+
|
59
|
+
#[test]
|
60
|
+
fn execute_pseudo_indexed_range() {
|
61
|
+
let range = i128::MAX - 1024..i128::MAX;
|
62
|
+
|
63
|
+
// Given `Some` length, collecting `Vec` will try to act indexed.
|
64
|
+
let a = range.clone().into_par_iter();
|
65
|
+
assert_eq!(a.opt_len(), Some(1024));
|
66
|
+
|
67
|
+
let b: Vec<i128> = a.map(|i| i + 1).collect();
|
68
|
+
let c: Vec<i128> = range.map(|i| i + 1).collect();
|
69
|
+
assert_eq!(b, c);
|
70
|
+
}
|
71
|
+
|
72
|
+
#[test]
|
73
|
+
fn check_map_indexed() {
|
74
|
+
let a = [1, 2, 3];
|
75
|
+
is_indexed(a.par_iter().map(|x| x));
|
76
|
+
}
|
77
|
+
|
78
|
+
#[test]
|
79
|
+
fn map_sum() {
|
80
|
+
let a: Vec<i32> = (0..1024).collect();
|
81
|
+
let r1: i32 = a.par_iter().map(|&i| i + 1).sum();
|
82
|
+
let r2 = a.iter().map(|&i| i + 1).sum();
|
83
|
+
assert_eq!(r1, r2);
|
84
|
+
}
|
85
|
+
|
86
|
+
#[test]
|
87
|
+
fn map_reduce() {
|
88
|
+
let a: Vec<i32> = (0..1024).collect();
|
89
|
+
let r1 = a.par_iter().map(|&i| i + 1).reduce(|| 0, |i, j| i + j);
|
90
|
+
let r2 = a.iter().map(|&i| i + 1).sum();
|
91
|
+
assert_eq!(r1, r2);
|
92
|
+
}
|
93
|
+
|
94
|
+
#[test]
|
95
|
+
fn map_reduce_with() {
|
96
|
+
let a: Vec<i32> = (0..1024).collect();
|
97
|
+
let r1 = a.par_iter().map(|&i| i + 1).reduce_with(|i, j| i + j);
|
98
|
+
let r2 = a.iter().map(|&i| i + 1).sum();
|
99
|
+
assert_eq!(r1, Some(r2));
|
100
|
+
}
|
101
|
+
|
102
|
+
#[test]
|
103
|
+
fn fold_map_reduce() {
|
104
|
+
// Kind of a weird test, but it demonstrates various
|
105
|
+
// transformations that are taking place. Relies on
|
106
|
+
// `with_max_len(1).fold()` being equivalent to `map()`.
|
107
|
+
//
|
108
|
+
// Take each number from 0 to 32 and fold them by appending to a
|
109
|
+
// vector. Because of `with_max_len(1)`, this will produce 32 vectors,
|
110
|
+
// each with one item. We then collect all of these into an
|
111
|
+
// individual vector by mapping each into their own vector (so we
|
112
|
+
// have Vec<Vec<i32>>) and then reducing those into a single
|
113
|
+
// vector.
|
114
|
+
let r1 = (0_i32..32)
|
115
|
+
.into_par_iter()
|
116
|
+
.with_max_len(1)
|
117
|
+
.fold(Vec::new, |mut v, e| {
|
118
|
+
v.push(e);
|
119
|
+
v
|
120
|
+
})
|
121
|
+
.map(|v| vec![v])
|
122
|
+
.reduce_with(|mut v_a, v_b| {
|
123
|
+
v_a.extend(v_b);
|
124
|
+
v_a
|
125
|
+
});
|
126
|
+
assert_eq!(
|
127
|
+
r1,
|
128
|
+
Some(vec![
|
129
|
+
vec![0],
|
130
|
+
vec![1],
|
131
|
+
vec![2],
|
132
|
+
vec![3],
|
133
|
+
vec![4],
|
134
|
+
vec![5],
|
135
|
+
vec![6],
|
136
|
+
vec![7],
|
137
|
+
vec![8],
|
138
|
+
vec![9],
|
139
|
+
vec![10],
|
140
|
+
vec![11],
|
141
|
+
vec![12],
|
142
|
+
vec![13],
|
143
|
+
vec![14],
|
144
|
+
vec![15],
|
145
|
+
vec![16],
|
146
|
+
vec![17],
|
147
|
+
vec![18],
|
148
|
+
vec![19],
|
149
|
+
vec![20],
|
150
|
+
vec![21],
|
151
|
+
vec![22],
|
152
|
+
vec![23],
|
153
|
+
vec![24],
|
154
|
+
vec![25],
|
155
|
+
vec![26],
|
156
|
+
vec![27],
|
157
|
+
vec![28],
|
158
|
+
vec![29],
|
159
|
+
vec![30],
|
160
|
+
vec![31]
|
161
|
+
])
|
162
|
+
);
|
163
|
+
}
|
164
|
+
|
165
|
+
#[test]
|
166
|
+
fn fold_is_full() {
|
167
|
+
let counter = AtomicUsize::new(0);
|
168
|
+
let a = (0_i32..2048)
|
169
|
+
.into_par_iter()
|
170
|
+
.inspect(|_| {
|
171
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
172
|
+
})
|
173
|
+
.fold(|| 0, |a, b| a + b)
|
174
|
+
.find_any(|_| true);
|
175
|
+
assert!(a.is_some());
|
176
|
+
assert!(counter.load(Ordering::SeqCst) < 2048); // should not have visited every single one
|
177
|
+
}
|
178
|
+
|
179
|
+
#[test]
|
180
|
+
fn check_step_by() {
|
181
|
+
let a: Vec<i32> = (0..1024).step_by(2).collect();
|
182
|
+
let b: Vec<i32> = (0..1024).into_par_iter().step_by(2).collect();
|
183
|
+
|
184
|
+
assert_eq!(a, b);
|
185
|
+
}
|
186
|
+
|
187
|
+
#[test]
|
188
|
+
fn check_step_by_unaligned() {
|
189
|
+
let a: Vec<i32> = (0..1029).step_by(10).collect();
|
190
|
+
let b: Vec<i32> = (0..1029).into_par_iter().step_by(10).collect();
|
191
|
+
|
192
|
+
assert_eq!(a, b)
|
193
|
+
}
|
194
|
+
|
195
|
+
#[test]
|
196
|
+
fn check_step_by_rev() {
|
197
|
+
let a: Vec<i32> = (0..1024).step_by(2).rev().collect();
|
198
|
+
let b: Vec<i32> = (0..1024).into_par_iter().step_by(2).rev().collect();
|
199
|
+
|
200
|
+
assert_eq!(a, b);
|
201
|
+
}
|
202
|
+
|
203
|
+
#[test]
|
204
|
+
fn check_enumerate() {
|
205
|
+
let a: Vec<usize> = (0..1024).rev().collect();
|
206
|
+
|
207
|
+
let mut b = vec![];
|
208
|
+
a.par_iter()
|
209
|
+
.enumerate()
|
210
|
+
.map(|(i, &x)| i + x)
|
211
|
+
.collect_into_vec(&mut b);
|
212
|
+
assert!(b.iter().all(|&x| x == a.len() - 1));
|
213
|
+
}
|
214
|
+
|
215
|
+
#[test]
|
216
|
+
fn check_enumerate_rev() {
|
217
|
+
let a: Vec<usize> = (0..1024).rev().collect();
|
218
|
+
|
219
|
+
let mut b = vec![];
|
220
|
+
a.par_iter()
|
221
|
+
.enumerate()
|
222
|
+
.rev()
|
223
|
+
.map(|(i, &x)| i + x)
|
224
|
+
.collect_into_vec(&mut b);
|
225
|
+
assert!(b.iter().all(|&x| x == a.len() - 1));
|
226
|
+
}
|
227
|
+
|
228
|
+
#[test]
|
229
|
+
fn check_indices_after_enumerate_split() {
|
230
|
+
let a: Vec<i32> = (0..1024).collect();
|
231
|
+
a.par_iter().enumerate().with_producer(WithProducer);
|
232
|
+
|
233
|
+
struct WithProducer;
|
234
|
+
impl<'a> ProducerCallback<(usize, &'a i32)> for WithProducer {
|
235
|
+
type Output = ();
|
236
|
+
fn callback<P>(self, producer: P)
|
237
|
+
where
|
238
|
+
P: Producer<Item = (usize, &'a i32)>,
|
239
|
+
{
|
240
|
+
let (a, b) = producer.split_at(512);
|
241
|
+
for ((index, value), trusted_index) in a.into_iter().zip(0..) {
|
242
|
+
assert_eq!(index, trusted_index);
|
243
|
+
assert_eq!(index, *value as usize);
|
244
|
+
}
|
245
|
+
for ((index, value), trusted_index) in b.into_iter().zip(512..) {
|
246
|
+
assert_eq!(index, trusted_index);
|
247
|
+
assert_eq!(index, *value as usize);
|
248
|
+
}
|
249
|
+
}
|
250
|
+
}
|
251
|
+
}
|
252
|
+
|
253
|
+
#[test]
|
254
|
+
fn check_increment() {
|
255
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
256
|
+
|
257
|
+
a.par_iter_mut().enumerate().for_each(|(i, v)| *v += i);
|
258
|
+
|
259
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
260
|
+
}
|
261
|
+
|
262
|
+
#[test]
|
263
|
+
fn check_skip() {
|
264
|
+
let a: Vec<usize> = (0..1024).collect();
|
265
|
+
|
266
|
+
let mut v1 = Vec::new();
|
267
|
+
a.par_iter().skip(16).collect_into_vec(&mut v1);
|
268
|
+
let v2 = a.iter().skip(16).collect::<Vec<_>>();
|
269
|
+
assert_eq!(v1, v2);
|
270
|
+
|
271
|
+
let mut v1 = Vec::new();
|
272
|
+
a.par_iter().skip(2048).collect_into_vec(&mut v1);
|
273
|
+
let v2 = a.iter().skip(2048).collect::<Vec<_>>();
|
274
|
+
assert_eq!(v1, v2);
|
275
|
+
|
276
|
+
let mut v1 = Vec::new();
|
277
|
+
a.par_iter().skip(0).collect_into_vec(&mut v1);
|
278
|
+
#[allow(clippy::iter_skip_zero)]
|
279
|
+
let v2 = a.iter().skip(0).collect::<Vec<_>>();
|
280
|
+
assert_eq!(v1, v2);
|
281
|
+
|
282
|
+
// Check that the skipped elements side effects are executed
|
283
|
+
use std::sync::atomic::{AtomicUsize, Ordering};
|
284
|
+
let num = AtomicUsize::new(0);
|
285
|
+
a.par_iter()
|
286
|
+
.map(|&n| num.fetch_add(n, Ordering::Relaxed))
|
287
|
+
.skip(512)
|
288
|
+
.count();
|
289
|
+
assert_eq!(num.load(Ordering::Relaxed), a.iter().sum::<usize>());
|
290
|
+
}
|
291
|
+
|
292
|
+
#[test]
|
293
|
+
fn check_take() {
|
294
|
+
let a: Vec<usize> = (0..1024).collect();
|
295
|
+
|
296
|
+
let mut v1 = Vec::new();
|
297
|
+
a.par_iter().take(16).collect_into_vec(&mut v1);
|
298
|
+
let v2 = a.iter().take(16).collect::<Vec<_>>();
|
299
|
+
assert_eq!(v1, v2);
|
300
|
+
|
301
|
+
let mut v1 = Vec::new();
|
302
|
+
a.par_iter().take(2048).collect_into_vec(&mut v1);
|
303
|
+
let v2 = a.iter().take(2048).collect::<Vec<_>>();
|
304
|
+
assert_eq!(v1, v2);
|
305
|
+
|
306
|
+
let mut v1 = Vec::new();
|
307
|
+
a.par_iter().take(0).collect_into_vec(&mut v1);
|
308
|
+
let v2 = a.iter().take(0).collect::<Vec<_>>();
|
309
|
+
assert_eq!(v1, v2);
|
310
|
+
}
|
311
|
+
|
312
|
+
#[test]
|
313
|
+
fn check_inspect() {
|
314
|
+
use std::sync::atomic::{AtomicUsize, Ordering};
|
315
|
+
|
316
|
+
let a = AtomicUsize::new(0);
|
317
|
+
let b: usize = (0_usize..1024)
|
318
|
+
.into_par_iter()
|
319
|
+
.inspect(|&i| {
|
320
|
+
a.fetch_add(i, Ordering::Relaxed);
|
321
|
+
})
|
322
|
+
.sum();
|
323
|
+
|
324
|
+
assert_eq!(a.load(Ordering::Relaxed), b);
|
325
|
+
}
|
326
|
+
|
327
|
+
#[test]
|
328
|
+
fn check_move() {
|
329
|
+
let a = vec![vec![1, 2, 3]];
|
330
|
+
let ptr = a[0].as_ptr();
|
331
|
+
|
332
|
+
let mut b = vec![];
|
333
|
+
a.into_par_iter().collect_into_vec(&mut b);
|
334
|
+
|
335
|
+
// a simple move means the inner vec will be completely unchanged
|
336
|
+
assert_eq!(ptr, b[0].as_ptr());
|
337
|
+
}
|
338
|
+
|
339
|
+
#[test]
|
340
|
+
fn check_drops() {
|
341
|
+
use std::sync::atomic::{AtomicUsize, Ordering};
|
342
|
+
|
343
|
+
let c = AtomicUsize::new(0);
|
344
|
+
let a = vec![DropCounter(&c); 10];
|
345
|
+
|
346
|
+
let mut b = vec![];
|
347
|
+
a.clone().into_par_iter().collect_into_vec(&mut b);
|
348
|
+
assert_eq!(c.load(Ordering::Relaxed), 0);
|
349
|
+
|
350
|
+
b.into_par_iter();
|
351
|
+
assert_eq!(c.load(Ordering::Relaxed), 10);
|
352
|
+
|
353
|
+
a.into_par_iter().with_producer(Partial);
|
354
|
+
assert_eq!(c.load(Ordering::Relaxed), 20);
|
355
|
+
|
356
|
+
#[derive(Clone)]
|
357
|
+
struct DropCounter<'a>(&'a AtomicUsize);
|
358
|
+
impl<'a> Drop for DropCounter<'a> {
|
359
|
+
fn drop(&mut self) {
|
360
|
+
self.0.fetch_add(1, Ordering::Relaxed);
|
361
|
+
}
|
362
|
+
}
|
363
|
+
|
364
|
+
struct Partial;
|
365
|
+
impl<'a> ProducerCallback<DropCounter<'a>> for Partial {
|
366
|
+
type Output = ();
|
367
|
+
fn callback<P>(self, producer: P)
|
368
|
+
where
|
369
|
+
P: Producer<Item = DropCounter<'a>>,
|
370
|
+
{
|
371
|
+
let (a, _) = producer.split_at(5);
|
372
|
+
a.into_iter().next();
|
373
|
+
}
|
374
|
+
}
|
375
|
+
}
|
376
|
+
|
377
|
+
#[test]
|
378
|
+
fn check_slice_indexed() {
|
379
|
+
let a = vec![1, 2, 3];
|
380
|
+
is_indexed(a.par_iter());
|
381
|
+
}
|
382
|
+
|
383
|
+
#[test]
|
384
|
+
fn check_slice_mut_indexed() {
|
385
|
+
let mut a = vec![1, 2, 3];
|
386
|
+
is_indexed(a.par_iter_mut());
|
387
|
+
}
|
388
|
+
|
389
|
+
#[test]
|
390
|
+
fn check_vec_indexed() {
|
391
|
+
let a = vec![1, 2, 3];
|
392
|
+
is_indexed(a.into_par_iter());
|
393
|
+
}
|
394
|
+
|
395
|
+
#[test]
|
396
|
+
fn check_range_indexed() {
|
397
|
+
is_indexed((1..5).into_par_iter());
|
398
|
+
}
|
399
|
+
|
400
|
+
#[test]
|
401
|
+
fn check_cmp_direct() {
|
402
|
+
let a = (0..1024).into_par_iter();
|
403
|
+
let b = (0..1024).into_par_iter();
|
404
|
+
|
405
|
+
let result = a.cmp(b);
|
406
|
+
|
407
|
+
assert!(result == ::std::cmp::Ordering::Equal);
|
408
|
+
}
|
409
|
+
|
410
|
+
#[test]
|
411
|
+
fn check_cmp_to_seq() {
|
412
|
+
assert_eq!(
|
413
|
+
(0..1024).into_par_iter().cmp(0..1024),
|
414
|
+
(0..1024).cmp(0..1024)
|
415
|
+
);
|
416
|
+
}
|
417
|
+
|
418
|
+
#[test]
|
419
|
+
fn check_cmp_rng_to_seq() {
|
420
|
+
let mut rng = seeded_rng();
|
421
|
+
let rng = &mut rng;
|
422
|
+
let a: Vec<i32> = rng.sample_iter(&StandardUniform).take(1024).collect();
|
423
|
+
let b: Vec<i32> = rng.sample_iter(&StandardUniform).take(1024).collect();
|
424
|
+
for i in 0..a.len() {
|
425
|
+
let par_result = a[i..].par_iter().cmp(b[i..].par_iter());
|
426
|
+
let seq_result = a[i..].iter().cmp(b[i..].iter());
|
427
|
+
|
428
|
+
assert_eq!(par_result, seq_result);
|
429
|
+
}
|
430
|
+
}
|
431
|
+
|
432
|
+
#[test]
|
433
|
+
fn check_cmp_lt_direct() {
|
434
|
+
let a = (0..1024).into_par_iter();
|
435
|
+
let b = (1..1024).into_par_iter();
|
436
|
+
|
437
|
+
let result = a.cmp(b);
|
438
|
+
|
439
|
+
assert!(result == ::std::cmp::Ordering::Less);
|
440
|
+
}
|
441
|
+
|
442
|
+
#[test]
|
443
|
+
fn check_cmp_lt_to_seq() {
|
444
|
+
assert_eq!(
|
445
|
+
(0..1024).into_par_iter().cmp(1..1024),
|
446
|
+
(0..1024).cmp(1..1024)
|
447
|
+
)
|
448
|
+
}
|
449
|
+
|
450
|
+
#[test]
|
451
|
+
fn check_cmp_gt_direct() {
|
452
|
+
let a = (1..1024).into_par_iter();
|
453
|
+
let b = (0..1024).into_par_iter();
|
454
|
+
|
455
|
+
let result = a.cmp(b);
|
456
|
+
|
457
|
+
assert!(result == ::std::cmp::Ordering::Greater);
|
458
|
+
}
|
459
|
+
|
460
|
+
#[test]
|
461
|
+
fn check_cmp_gt_to_seq() {
|
462
|
+
assert_eq!(
|
463
|
+
(1..1024).into_par_iter().cmp(0..1024),
|
464
|
+
(1..1024).cmp(0..1024)
|
465
|
+
)
|
466
|
+
}
|
467
|
+
|
468
|
+
#[test]
|
469
|
+
#[cfg_attr(any(target_os = "emscripten", target_family = "wasm"), ignore)]
|
470
|
+
fn check_cmp_short_circuit() {
|
471
|
+
// We only use a single thread in order to make the short-circuit behavior deterministic.
|
472
|
+
let pool = ThreadPoolBuilder::new().num_threads(1).build().unwrap();
|
473
|
+
|
474
|
+
let a = vec![0; 1024];
|
475
|
+
let mut b = a.clone();
|
476
|
+
b[42] = 1;
|
477
|
+
|
478
|
+
pool.install(|| {
|
479
|
+
let expected = ::std::cmp::Ordering::Less;
|
480
|
+
assert_eq!(a.par_iter().cmp(&b), expected);
|
481
|
+
|
482
|
+
for len in 1..10 {
|
483
|
+
let counter = AtomicUsize::new(0);
|
484
|
+
let result = a
|
485
|
+
.par_iter()
|
486
|
+
.with_max_len(len)
|
487
|
+
.inspect(|_| {
|
488
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
489
|
+
})
|
490
|
+
.cmp(&b);
|
491
|
+
assert_eq!(result, expected);
|
492
|
+
// should not have visited every single one
|
493
|
+
assert!(counter.into_inner() < a.len());
|
494
|
+
}
|
495
|
+
});
|
496
|
+
}
|
497
|
+
|
498
|
+
#[test]
|
499
|
+
#[cfg_attr(any(target_os = "emscripten", target_family = "wasm"), ignore)]
|
500
|
+
fn check_partial_cmp_short_circuit() {
|
501
|
+
// We only use a single thread to make the short-circuit behavior deterministic.
|
502
|
+
let pool = ThreadPoolBuilder::new().num_threads(1).build().unwrap();
|
503
|
+
|
504
|
+
let a = vec![0; 1024];
|
505
|
+
let mut b = a.clone();
|
506
|
+
b[42] = 1;
|
507
|
+
|
508
|
+
pool.install(|| {
|
509
|
+
let expected = Some(::std::cmp::Ordering::Less);
|
510
|
+
assert_eq!(a.par_iter().partial_cmp(&b), expected);
|
511
|
+
|
512
|
+
for len in 1..10 {
|
513
|
+
let counter = AtomicUsize::new(0);
|
514
|
+
let result = a
|
515
|
+
.par_iter()
|
516
|
+
.with_max_len(len)
|
517
|
+
.inspect(|_| {
|
518
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
519
|
+
})
|
520
|
+
.partial_cmp(&b);
|
521
|
+
assert_eq!(result, expected);
|
522
|
+
// should not have visited every single one
|
523
|
+
assert!(counter.into_inner() < a.len());
|
524
|
+
}
|
525
|
+
});
|
526
|
+
}
|
527
|
+
|
528
|
+
#[test]
|
529
|
+
#[cfg_attr(any(target_os = "emscripten", target_family = "wasm"), ignore)]
|
530
|
+
fn check_partial_cmp_nan_short_circuit() {
|
531
|
+
// We only use a single thread to make the short-circuit behavior deterministic.
|
532
|
+
let pool = ThreadPoolBuilder::new().num_threads(1).build().unwrap();
|
533
|
+
|
534
|
+
let a = vec![0.0; 1024];
|
535
|
+
let mut b = a.clone();
|
536
|
+
b[42] = f64::NAN;
|
537
|
+
|
538
|
+
pool.install(|| {
|
539
|
+
let expected = None;
|
540
|
+
assert_eq!(a.par_iter().partial_cmp(&b), expected);
|
541
|
+
|
542
|
+
for len in 1..10 {
|
543
|
+
let counter = AtomicUsize::new(0);
|
544
|
+
let result = a
|
545
|
+
.par_iter()
|
546
|
+
.with_max_len(len)
|
547
|
+
.inspect(|_| {
|
548
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
549
|
+
})
|
550
|
+
.partial_cmp(&b);
|
551
|
+
assert_eq!(result, expected);
|
552
|
+
// should not have visited every single one
|
553
|
+
assert!(counter.into_inner() < a.len());
|
554
|
+
}
|
555
|
+
});
|
556
|
+
}
|
557
|
+
|
558
|
+
#[test]
|
559
|
+
fn check_partial_cmp_direct() {
|
560
|
+
let a = (0..1024).into_par_iter();
|
561
|
+
let b = (0..1024).into_par_iter();
|
562
|
+
|
563
|
+
let result = a.partial_cmp(b);
|
564
|
+
|
565
|
+
assert!(result == Some(::std::cmp::Ordering::Equal));
|
566
|
+
}
|
567
|
+
|
568
|
+
#[test]
|
569
|
+
fn check_partial_cmp_to_seq() {
|
570
|
+
let par_result = (0..1024).into_par_iter().partial_cmp(0..1024);
|
571
|
+
let seq_result = (0..1024).partial_cmp(0..1024);
|
572
|
+
assert_eq!(par_result, seq_result);
|
573
|
+
}
|
574
|
+
|
575
|
+
#[test]
|
576
|
+
fn check_partial_cmp_rng_to_seq() {
|
577
|
+
let mut rng = seeded_rng();
|
578
|
+
let rng = &mut rng;
|
579
|
+
let a: Vec<i32> = rng.sample_iter(&StandardUniform).take(1024).collect();
|
580
|
+
let b: Vec<i32> = rng.sample_iter(&StandardUniform).take(1024).collect();
|
581
|
+
for i in 0..a.len() {
|
582
|
+
let par_result = a[i..].par_iter().partial_cmp(b[i..].par_iter());
|
583
|
+
let seq_result = a[i..].iter().partial_cmp(b[i..].iter());
|
584
|
+
|
585
|
+
assert_eq!(par_result, seq_result);
|
586
|
+
}
|
587
|
+
}
|
588
|
+
|
589
|
+
#[test]
|
590
|
+
fn check_partial_cmp_lt_direct() {
|
591
|
+
let a = (0..1024).into_par_iter();
|
592
|
+
let b = (1..1024).into_par_iter();
|
593
|
+
|
594
|
+
let result = a.partial_cmp(b);
|
595
|
+
|
596
|
+
assert!(result == Some(::std::cmp::Ordering::Less));
|
597
|
+
}
|
598
|
+
|
599
|
+
#[test]
|
600
|
+
fn check_partial_cmp_lt_to_seq() {
|
601
|
+
let par_result = (0..1024).into_par_iter().partial_cmp(1..1024);
|
602
|
+
let seq_result = (0..1024).partial_cmp(1..1024);
|
603
|
+
assert_eq!(par_result, seq_result);
|
604
|
+
}
|
605
|
+
|
606
|
+
#[test]
|
607
|
+
fn check_partial_cmp_gt_direct() {
|
608
|
+
let a = (1..1024).into_par_iter();
|
609
|
+
let b = (0..1024).into_par_iter();
|
610
|
+
|
611
|
+
let result = a.partial_cmp(b);
|
612
|
+
|
613
|
+
assert!(result == Some(::std::cmp::Ordering::Greater));
|
614
|
+
}
|
615
|
+
|
616
|
+
#[test]
|
617
|
+
fn check_partial_cmp_gt_to_seq() {
|
618
|
+
let par_result = (1..1024).into_par_iter().partial_cmp(0..1024);
|
619
|
+
let seq_result = (1..1024).partial_cmp(0..1024);
|
620
|
+
assert_eq!(par_result, seq_result);
|
621
|
+
}
|
622
|
+
|
623
|
+
#[test]
|
624
|
+
fn check_partial_cmp_none_direct() {
|
625
|
+
let a = vec![f64::NAN, 0.0];
|
626
|
+
let b = vec![0.0, 1.0];
|
627
|
+
|
628
|
+
let result = a.par_iter().partial_cmp(b.par_iter());
|
629
|
+
|
630
|
+
assert!(result.is_none());
|
631
|
+
}
|
632
|
+
|
633
|
+
#[test]
|
634
|
+
fn check_partial_cmp_none_to_seq() {
|
635
|
+
let a = vec![f64::NAN, 0.0];
|
636
|
+
let b = vec![0.0, 1.0];
|
637
|
+
|
638
|
+
let par_result = a.par_iter().partial_cmp(b.par_iter());
|
639
|
+
let seq_result = a.iter().partial_cmp(b.iter());
|
640
|
+
|
641
|
+
assert_eq!(par_result, seq_result);
|
642
|
+
}
|
643
|
+
|
644
|
+
#[test]
|
645
|
+
fn check_partial_cmp_late_nan_direct() {
|
646
|
+
let a = vec![0.0, f64::NAN];
|
647
|
+
let b = vec![1.0, 1.0];
|
648
|
+
|
649
|
+
let result = a.par_iter().partial_cmp(b.par_iter());
|
650
|
+
|
651
|
+
assert!(result == Some(::std::cmp::Ordering::Less));
|
652
|
+
}
|
653
|
+
|
654
|
+
#[test]
|
655
|
+
fn check_partial_cmp_late_nan_to_seq() {
|
656
|
+
let a = vec![0.0, f64::NAN];
|
657
|
+
let b = vec![1.0, 1.0];
|
658
|
+
|
659
|
+
let par_result = a.par_iter().partial_cmp(b.par_iter());
|
660
|
+
let seq_result = a.iter().partial_cmp(b.iter());
|
661
|
+
|
662
|
+
assert_eq!(par_result, seq_result);
|
663
|
+
}
|
664
|
+
|
665
|
+
#[test]
|
666
|
+
fn check_cmp_lengths() {
|
667
|
+
// comparisons should consider length if they are otherwise equal
|
668
|
+
let a = vec![0; 1024];
|
669
|
+
let b = vec![0; 1025];
|
670
|
+
|
671
|
+
assert_eq!(a.par_iter().cmp(&b), a.iter().cmp(&b));
|
672
|
+
assert_eq!(a.par_iter().partial_cmp(&b), a.iter().partial_cmp(&b));
|
673
|
+
}
|
674
|
+
|
675
|
+
#[test]
|
676
|
+
fn check_eq_direct() {
|
677
|
+
let a = (0..1024).into_par_iter();
|
678
|
+
let b = (0..1024).into_par_iter();
|
679
|
+
|
680
|
+
let result = a.eq(b);
|
681
|
+
|
682
|
+
assert!(result);
|
683
|
+
}
|
684
|
+
|
685
|
+
#[test]
|
686
|
+
fn check_eq_to_seq() {
|
687
|
+
let par_result = (0..1024).into_par_iter().eq((0..1024).into_par_iter());
|
688
|
+
let seq_result = (0..1024).eq(0..1024);
|
689
|
+
|
690
|
+
assert_eq!(par_result, seq_result);
|
691
|
+
}
|
692
|
+
|
693
|
+
#[test]
|
694
|
+
fn check_ne_direct() {
|
695
|
+
let a = (0..1024).into_par_iter();
|
696
|
+
let b = (1..1024).into_par_iter();
|
697
|
+
|
698
|
+
let result = a.ne(b);
|
699
|
+
|
700
|
+
assert!(result);
|
701
|
+
}
|
702
|
+
|
703
|
+
#[test]
|
704
|
+
fn check_ne_to_seq() {
|
705
|
+
let par_result = (0..1024).into_par_iter().ne((1..1025).into_par_iter());
|
706
|
+
let seq_result = (0..1024).ne(1..1025);
|
707
|
+
|
708
|
+
assert_eq!(par_result, seq_result);
|
709
|
+
}
|
710
|
+
|
711
|
+
#[test]
|
712
|
+
fn check_ne_lengths() {
|
713
|
+
// equality should consider length too
|
714
|
+
let a = vec![0; 1024];
|
715
|
+
let b = vec![0; 1025];
|
716
|
+
|
717
|
+
assert_eq!(a.par_iter().eq(&b), a.iter().eq(&b));
|
718
|
+
assert_eq!(a.par_iter().ne(&b), a.iter().ne(&b));
|
719
|
+
}
|
720
|
+
|
721
|
+
#[test]
|
722
|
+
fn check_lt_direct() {
|
723
|
+
assert!((0..1024).into_par_iter().lt(1..1024));
|
724
|
+
assert!(!(1..1024).into_par_iter().lt(0..1024));
|
725
|
+
}
|
726
|
+
|
727
|
+
#[test]
|
728
|
+
fn check_lt_to_seq() {
|
729
|
+
let par_result = (0..1024).into_par_iter().lt((1..1024).into_par_iter());
|
730
|
+
let seq_result = (0..1024).lt(1..1024);
|
731
|
+
|
732
|
+
assert_eq!(par_result, seq_result);
|
733
|
+
}
|
734
|
+
|
735
|
+
#[test]
|
736
|
+
fn check_le_equal_direct() {
|
737
|
+
assert!((0..1024).into_par_iter().le((0..1024).into_par_iter()));
|
738
|
+
}
|
739
|
+
|
740
|
+
#[test]
|
741
|
+
fn check_le_equal_to_seq() {
|
742
|
+
let par_result = (0..1024).into_par_iter().le((0..1024).into_par_iter());
|
743
|
+
let seq_result = (0..1024).le(0..1024);
|
744
|
+
|
745
|
+
assert_eq!(par_result, seq_result);
|
746
|
+
}
|
747
|
+
|
748
|
+
#[test]
|
749
|
+
fn check_le_less_direct() {
|
750
|
+
assert!((0..1024).into_par_iter().le((1..1024).into_par_iter()));
|
751
|
+
}
|
752
|
+
|
753
|
+
#[test]
|
754
|
+
fn check_le_less_to_seq() {
|
755
|
+
let par_result = (0..1024).into_par_iter().le((1..1024).into_par_iter());
|
756
|
+
let seq_result = (0..1024).le(1..1024);
|
757
|
+
|
758
|
+
assert_eq!(par_result, seq_result);
|
759
|
+
}
|
760
|
+
|
761
|
+
#[test]
|
762
|
+
fn check_gt_direct() {
|
763
|
+
assert!((1..1024).into_par_iter().gt((0..1024).into_par_iter()));
|
764
|
+
}
|
765
|
+
|
766
|
+
#[test]
|
767
|
+
fn check_gt_to_seq() {
|
768
|
+
let par_result = (1..1024).into_par_iter().gt((0..1024).into_par_iter());
|
769
|
+
let seq_result = (1..1024).gt(0..1024);
|
770
|
+
|
771
|
+
assert_eq!(par_result, seq_result);
|
772
|
+
}
|
773
|
+
|
774
|
+
#[test]
|
775
|
+
fn check_ge_equal_direct() {
|
776
|
+
assert!((0..1024).into_par_iter().ge((0..1024).into_par_iter()));
|
777
|
+
}
|
778
|
+
|
779
|
+
#[test]
|
780
|
+
fn check_ge_equal_to_seq() {
|
781
|
+
let par_result = (0..1024).into_par_iter().ge((0..1024).into_par_iter());
|
782
|
+
let seq_result = (0..1024).ge(0..1024);
|
783
|
+
|
784
|
+
assert_eq!(par_result, seq_result);
|
785
|
+
}
|
786
|
+
|
787
|
+
#[test]
|
788
|
+
fn check_ge_greater_direct() {
|
789
|
+
assert!((1..1024).into_par_iter().ge((0..1024).into_par_iter()));
|
790
|
+
}
|
791
|
+
|
792
|
+
#[test]
|
793
|
+
fn check_ge_greater_to_seq() {
|
794
|
+
let par_result = (1..1024).into_par_iter().ge((0..1024).into_par_iter());
|
795
|
+
let seq_result = (1..1024).ge(0..1024);
|
796
|
+
|
797
|
+
assert_eq!(par_result, seq_result);
|
798
|
+
}
|
799
|
+
|
800
|
+
#[test]
|
801
|
+
fn check_zip() {
|
802
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
803
|
+
let b: Vec<usize> = (0..1024).collect();
|
804
|
+
|
805
|
+
a.par_iter_mut().zip(&b[..]).for_each(|(a, &b)| *a += b);
|
806
|
+
|
807
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
808
|
+
}
|
809
|
+
|
810
|
+
#[test]
|
811
|
+
fn check_zip_into_par_iter() {
|
812
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
813
|
+
let b: Vec<usize> = (0..1024).collect();
|
814
|
+
|
815
|
+
a.par_iter_mut()
|
816
|
+
.zip(&b) // here we rely on &b iterating over &usize
|
817
|
+
.for_each(|(a, &b)| *a += b);
|
818
|
+
|
819
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
820
|
+
}
|
821
|
+
|
822
|
+
#[test]
|
823
|
+
fn check_zip_into_mut_par_iter() {
|
824
|
+
let a: Vec<usize> = (0..1024).rev().collect();
|
825
|
+
let mut b: Vec<usize> = (0..1024).collect();
|
826
|
+
|
827
|
+
a.par_iter().zip(&mut b).for_each(|(&a, b)| *b += a);
|
828
|
+
|
829
|
+
assert!(b.iter().all(|&x| x == b.len() - 1));
|
830
|
+
}
|
831
|
+
|
832
|
+
#[test]
|
833
|
+
fn check_zip_range() {
|
834
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
835
|
+
|
836
|
+
a.par_iter_mut()
|
837
|
+
.zip(0usize..1024)
|
838
|
+
.for_each(|(a, b)| *a += b);
|
839
|
+
|
840
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
841
|
+
}
|
842
|
+
|
843
|
+
#[test]
|
844
|
+
fn check_zip_eq() {
|
845
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
846
|
+
let b: Vec<usize> = (0..1024).collect();
|
847
|
+
|
848
|
+
a.par_iter_mut().zip_eq(&b[..]).for_each(|(a, &b)| *a += b);
|
849
|
+
|
850
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
851
|
+
}
|
852
|
+
|
853
|
+
#[test]
|
854
|
+
fn check_zip_eq_into_par_iter() {
|
855
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
856
|
+
let b: Vec<usize> = (0..1024).collect();
|
857
|
+
|
858
|
+
a.par_iter_mut()
|
859
|
+
.zip_eq(&b) // here we rely on &b iterating over &usize
|
860
|
+
.for_each(|(a, &b)| *a += b);
|
861
|
+
|
862
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
863
|
+
}
|
864
|
+
|
865
|
+
#[test]
|
866
|
+
fn check_zip_eq_into_mut_par_iter() {
|
867
|
+
let a: Vec<usize> = (0..1024).rev().collect();
|
868
|
+
let mut b: Vec<usize> = (0..1024).collect();
|
869
|
+
|
870
|
+
a.par_iter().zip_eq(&mut b).for_each(|(&a, b)| *b += a);
|
871
|
+
|
872
|
+
assert!(b.iter().all(|&x| x == b.len() - 1));
|
873
|
+
}
|
874
|
+
|
875
|
+
#[test]
|
876
|
+
fn check_zip_eq_range() {
|
877
|
+
let mut a: Vec<usize> = (0..1024).rev().collect();
|
878
|
+
|
879
|
+
a.par_iter_mut()
|
880
|
+
.zip_eq(0usize..1024)
|
881
|
+
.for_each(|(a, b)| *a += b);
|
882
|
+
|
883
|
+
assert!(a.iter().all(|&x| x == a.len() - 1));
|
884
|
+
}
|
885
|
+
|
886
|
+
#[test]
|
887
|
+
fn check_sum_filtered_ints() {
|
888
|
+
let a: Vec<i32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
889
|
+
let par_sum_evens: i32 = a.par_iter().filter(|&x| (x & 1) == 0).sum();
|
890
|
+
let seq_sum_evens = a.iter().filter(|&x| (x & 1) == 0).sum();
|
891
|
+
assert_eq!(par_sum_evens, seq_sum_evens);
|
892
|
+
}
|
893
|
+
|
894
|
+
#[test]
|
895
|
+
fn check_sum_filtermap_ints() {
|
896
|
+
let a: Vec<i32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
897
|
+
let par_sum_evens: u32 = a
|
898
|
+
.par_iter()
|
899
|
+
.filter_map(|&x| if (x & 1) == 0 { Some(x as u32) } else { None })
|
900
|
+
.sum();
|
901
|
+
let seq_sum_evens = a
|
902
|
+
.iter()
|
903
|
+
.filter_map(|&x| if (x & 1) == 0 { Some(x as u32) } else { None })
|
904
|
+
.sum();
|
905
|
+
assert_eq!(par_sum_evens, seq_sum_evens);
|
906
|
+
}
|
907
|
+
|
908
|
+
#[test]
|
909
|
+
fn check_flat_map_nested_ranges() {
|
910
|
+
// FIXME -- why are precise type hints required on the integers here?
|
911
|
+
|
912
|
+
let v: i32 = (0_i32..10)
|
913
|
+
.into_par_iter()
|
914
|
+
.flat_map(|i| (0_i32..10).into_par_iter().map(move |j| (i, j)))
|
915
|
+
.map(|(i, j)| i * j)
|
916
|
+
.sum();
|
917
|
+
|
918
|
+
let w = (0_i32..10)
|
919
|
+
.flat_map(|i| (0_i32..10).map(move |j| (i, j)))
|
920
|
+
.map(|(i, j)| i * j)
|
921
|
+
.sum();
|
922
|
+
|
923
|
+
assert_eq!(v, w);
|
924
|
+
}
|
925
|
+
|
926
|
+
#[test]
|
927
|
+
fn check_empty_flat_map_sum() {
|
928
|
+
let a: Vec<i32> = (0..1024).collect();
|
929
|
+
let empty = &a[..0];
|
930
|
+
|
931
|
+
// empty on the inside
|
932
|
+
let b: i32 = a.par_iter().flat_map(|_| empty).sum();
|
933
|
+
assert_eq!(b, 0);
|
934
|
+
|
935
|
+
// empty on the outside
|
936
|
+
let c: i32 = empty.par_iter().flat_map(|_| a.par_iter()).sum();
|
937
|
+
assert_eq!(c, 0);
|
938
|
+
}
|
939
|
+
|
940
|
+
#[test]
|
941
|
+
fn check_flatten_vec() {
|
942
|
+
let a: Vec<i32> = (0..1024).collect();
|
943
|
+
let b: Vec<Vec<i32>> = vec![a.clone(), a.clone(), a.clone(), a.clone()];
|
944
|
+
let c: Vec<i32> = b.par_iter().flatten().cloned().collect();
|
945
|
+
let mut d = a.clone();
|
946
|
+
d.extend(&a);
|
947
|
+
d.extend(&a);
|
948
|
+
d.extend(&a);
|
949
|
+
|
950
|
+
assert_eq!(d, c);
|
951
|
+
}
|
952
|
+
|
953
|
+
#[test]
|
954
|
+
fn check_flatten_vec_empty() {
|
955
|
+
let a: Vec<Vec<i32>> = vec![vec![]];
|
956
|
+
let b: Vec<i32> = a.par_iter().flatten().cloned().collect();
|
957
|
+
|
958
|
+
assert_eq!(vec![] as Vec<i32>, b);
|
959
|
+
}
|
960
|
+
|
961
|
+
#[test]
|
962
|
+
fn check_slice_split() {
|
963
|
+
let v: Vec<_> = (0..1000).collect();
|
964
|
+
for m in 1..100 {
|
965
|
+
let a: Vec<_> = v.split(|x| x % m == 0).collect();
|
966
|
+
let b: Vec<_> = v.par_split(|x| x % m == 0).collect();
|
967
|
+
assert_eq!(a, b);
|
968
|
+
}
|
969
|
+
|
970
|
+
// same as std::slice::split() examples
|
971
|
+
let slice = [10, 40, 33, 20];
|
972
|
+
let v: Vec<_> = slice.par_split(|num| num % 3 == 0).collect();
|
973
|
+
assert_eq!(v, &[&slice[..2], &slice[3..]]);
|
974
|
+
|
975
|
+
let slice = [10, 40, 33];
|
976
|
+
let v: Vec<_> = slice.par_split(|num| num % 3 == 0).collect();
|
977
|
+
assert_eq!(v, &[&slice[..2], &slice[..0]]);
|
978
|
+
|
979
|
+
let slice = [10, 6, 33, 20];
|
980
|
+
let v: Vec<_> = slice.par_split(|num| num % 3 == 0).collect();
|
981
|
+
assert_eq!(v, &[&slice[..1], &slice[..0], &slice[3..]]);
|
982
|
+
}
|
983
|
+
|
984
|
+
#[test]
|
985
|
+
fn check_slice_split_inclusive() {
|
986
|
+
let v: Vec<_> = (0..1000).collect();
|
987
|
+
for m in 1..100 {
|
988
|
+
let a: Vec<_> = v.split_inclusive(|x| x % m == 0).collect();
|
989
|
+
let b: Vec<_> = v.par_split_inclusive(|x| x % m == 0).collect();
|
990
|
+
assert_eq!(a, b);
|
991
|
+
}
|
992
|
+
|
993
|
+
// same as std::slice::split_inclusive() examples
|
994
|
+
let slice = [10, 40, 33, 20];
|
995
|
+
let v: Vec<_> = slice.par_split_inclusive(|num| num % 3 == 0).collect();
|
996
|
+
assert_eq!(v, &[&slice[..3], &slice[3..]]);
|
997
|
+
|
998
|
+
let slice = [3, 10, 40, 33];
|
999
|
+
let v: Vec<_> = slice.par_split_inclusive(|num| num % 3 == 0).collect();
|
1000
|
+
assert_eq!(v, &[&slice[..1], &slice[1..]]);
|
1001
|
+
}
|
1002
|
+
|
1003
|
+
#[test]
|
1004
|
+
fn check_slice_split_mut() {
|
1005
|
+
let mut v1: Vec<_> = (0..1000).collect();
|
1006
|
+
let mut v2 = v1.clone();
|
1007
|
+
for m in 1..100 {
|
1008
|
+
let a: Vec<_> = v1.split_mut(|x| x % m == 0).collect();
|
1009
|
+
let b: Vec<_> = v2.par_split_mut(|x| x % m == 0).collect();
|
1010
|
+
assert_eq!(a, b);
|
1011
|
+
}
|
1012
|
+
|
1013
|
+
// same as std::slice::split_mut() example
|
1014
|
+
let mut v = [10, 40, 30, 20, 60, 50];
|
1015
|
+
v.par_split_mut(|num| num % 3 == 0).for_each(|group| {
|
1016
|
+
group[0] = 1;
|
1017
|
+
});
|
1018
|
+
assert_eq!(v, [1, 40, 30, 1, 60, 1]);
|
1019
|
+
}
|
1020
|
+
|
1021
|
+
#[test]
|
1022
|
+
fn check_slice_split_inclusive_mut() {
|
1023
|
+
let mut v1: Vec<_> = (0..1000).collect();
|
1024
|
+
let mut v2 = v1.clone();
|
1025
|
+
for m in 1..100 {
|
1026
|
+
let a: Vec<_> = v1.split_inclusive_mut(|x| x % m == 0).collect();
|
1027
|
+
let b: Vec<_> = v2.par_split_inclusive_mut(|x| x % m == 0).collect();
|
1028
|
+
assert_eq!(a, b);
|
1029
|
+
}
|
1030
|
+
|
1031
|
+
// same as std::slice::split_inclusive_mut() example
|
1032
|
+
let mut v = [10, 40, 30, 20, 60, 50];
|
1033
|
+
v.par_split_inclusive_mut(|num| num % 3 == 0)
|
1034
|
+
.for_each(|group| {
|
1035
|
+
let terminator_idx = group.len() - 1;
|
1036
|
+
group[terminator_idx] = 1;
|
1037
|
+
});
|
1038
|
+
assert_eq!(v, [10, 40, 1, 20, 1, 1]);
|
1039
|
+
}
|
1040
|
+
|
1041
|
+
#[test]
|
1042
|
+
fn check_chunks() {
|
1043
|
+
let a: Vec<i32> = vec![1, 5, 10, 4, 100, 3, 1000, 2, 10000, 1];
|
1044
|
+
let par_sum_product_pairs: i32 = a.par_chunks(2).map(|c| c.iter().product::<i32>()).sum();
|
1045
|
+
let seq_sum_product_pairs = a.chunks(2).map(|c| c.iter().product::<i32>()).sum();
|
1046
|
+
assert_eq!(par_sum_product_pairs, 12345);
|
1047
|
+
assert_eq!(par_sum_product_pairs, seq_sum_product_pairs);
|
1048
|
+
|
1049
|
+
let par_sum_product_triples: i32 = a.par_chunks(3).map(|c| c.iter().product::<i32>()).sum();
|
1050
|
+
let seq_sum_product_triples = a.chunks(3).map(|c| c.iter().product::<i32>()).sum();
|
1051
|
+
assert_eq!(par_sum_product_triples, 5_0 + 12_00 + 20_000_000 + 1);
|
1052
|
+
assert_eq!(par_sum_product_triples, seq_sum_product_triples);
|
1053
|
+
}
|
1054
|
+
|
1055
|
+
#[test]
|
1056
|
+
fn check_chunks_mut() {
|
1057
|
+
let mut a: Vec<i32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
1058
|
+
let mut b: Vec<i32> = a.clone();
|
1059
|
+
a.par_chunks_mut(2).for_each(|c| c[0] = c.iter().sum());
|
1060
|
+
b.chunks_mut(2).for_each(|c| c[0] = c.iter().sum());
|
1061
|
+
assert_eq!(a, &[3, 2, 7, 4, 11, 6, 15, 8, 19, 10]);
|
1062
|
+
assert_eq!(a, b);
|
1063
|
+
|
1064
|
+
let mut a: Vec<i32> = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
1065
|
+
let mut b: Vec<i32> = a.clone();
|
1066
|
+
a.par_chunks_mut(3).for_each(|c| c[0] = c.iter().sum());
|
1067
|
+
b.chunks_mut(3).for_each(|c| c[0] = c.iter().sum());
|
1068
|
+
assert_eq!(a, &[6, 2, 3, 15, 5, 6, 24, 8, 9, 10]);
|
1069
|
+
assert_eq!(a, b);
|
1070
|
+
}
|
1071
|
+
|
1072
|
+
#[test]
|
1073
|
+
fn check_windows() {
|
1074
|
+
let a: Vec<i32> = (0..1024).collect();
|
1075
|
+
let par: Vec<_> = a.par_windows(2).collect();
|
1076
|
+
let seq: Vec<_> = a.windows(2).collect();
|
1077
|
+
assert_eq!(par, seq);
|
1078
|
+
|
1079
|
+
let par: Vec<_> = a.par_windows(100).collect();
|
1080
|
+
let seq: Vec<_> = a.windows(100).collect();
|
1081
|
+
assert_eq!(par, seq);
|
1082
|
+
|
1083
|
+
let par: Vec<_> = a.par_windows(1_000_000).collect();
|
1084
|
+
let seq: Vec<_> = a.windows(1_000_000).collect();
|
1085
|
+
assert_eq!(par, seq);
|
1086
|
+
|
1087
|
+
let par: Vec<_> = a
|
1088
|
+
.par_windows(2)
|
1089
|
+
.chain(a.par_windows(1_000_000))
|
1090
|
+
.zip(a.par_windows(2))
|
1091
|
+
.collect();
|
1092
|
+
let seq: Vec<_> = a
|
1093
|
+
.windows(2)
|
1094
|
+
.chain(a.windows(1_000_000))
|
1095
|
+
.zip(a.windows(2))
|
1096
|
+
.collect();
|
1097
|
+
assert_eq!(par, seq);
|
1098
|
+
}
|
1099
|
+
|
1100
|
+
#[test]
|
1101
|
+
fn check_options() {
|
1102
|
+
let mut a = vec![None, Some(1), None, None, Some(2), Some(4)];
|
1103
|
+
|
1104
|
+
assert_eq!(7, a.par_iter().flat_map(|opt| opt).sum::<i32>());
|
1105
|
+
assert_eq!(7, a.par_iter().flat_map(|opt| opt).sum::<i32>());
|
1106
|
+
|
1107
|
+
a.par_iter_mut()
|
1108
|
+
.flat_map(|opt| opt)
|
1109
|
+
.for_each(|x| *x = *x * *x);
|
1110
|
+
|
1111
|
+
assert_eq!(21, a.into_par_iter().flat_map(|opt| opt).sum::<i32>());
|
1112
|
+
}
|
1113
|
+
|
1114
|
+
#[test]
|
1115
|
+
fn check_results() {
|
1116
|
+
let mut a = vec![Err(()), Ok(1i32), Err(()), Err(()), Ok(2), Ok(4)];
|
1117
|
+
|
1118
|
+
assert_eq!(7, a.par_iter().flat_map(|res| res).sum::<i32>());
|
1119
|
+
|
1120
|
+
assert_eq!(Err::<i32, ()>(()), a.par_iter().cloned().sum());
|
1121
|
+
assert_eq!(Ok(7), a.par_iter().cloned().filter(Result::is_ok).sum());
|
1122
|
+
|
1123
|
+
assert_eq!(Err::<i32, ()>(()), a.par_iter().cloned().product());
|
1124
|
+
assert_eq!(Ok(8), a.par_iter().cloned().filter(Result::is_ok).product());
|
1125
|
+
|
1126
|
+
a.par_iter_mut()
|
1127
|
+
.flat_map(|res| res)
|
1128
|
+
.for_each(|x| *x = *x * *x);
|
1129
|
+
|
1130
|
+
assert_eq!(21, a.into_par_iter().flat_map(|res| res).sum::<i32>());
|
1131
|
+
}
|
1132
|
+
|
1133
|
+
#[test]
|
1134
|
+
fn check_binary_heap() {
|
1135
|
+
use std::collections::BinaryHeap;
|
1136
|
+
|
1137
|
+
let a: BinaryHeap<i32> = (0..10).collect();
|
1138
|
+
|
1139
|
+
assert_eq!(45, a.par_iter().sum::<i32>());
|
1140
|
+
assert_eq!(45, a.into_par_iter().sum::<i32>());
|
1141
|
+
}
|
1142
|
+
|
1143
|
+
#[test]
|
1144
|
+
fn check_btree_map() {
|
1145
|
+
use std::collections::BTreeMap;
|
1146
|
+
|
1147
|
+
let mut a: BTreeMap<i32, i32> = (0..10).map(|i| (i, -i)).collect();
|
1148
|
+
|
1149
|
+
assert_eq!(45, a.par_iter().map(|(&k, _)| k).sum::<i32>());
|
1150
|
+
assert_eq!(-45, a.par_iter().map(|(_, &v)| v).sum::<i32>());
|
1151
|
+
|
1152
|
+
a.par_iter_mut().for_each(|(k, v)| *v += *k);
|
1153
|
+
|
1154
|
+
assert_eq!(0, a.into_par_iter().map(|(_, v)| v).sum::<i32>());
|
1155
|
+
}
|
1156
|
+
|
1157
|
+
#[test]
|
1158
|
+
fn check_btree_set() {
|
1159
|
+
use std::collections::BTreeSet;
|
1160
|
+
|
1161
|
+
let a: BTreeSet<i32> = (0..10).collect();
|
1162
|
+
|
1163
|
+
assert_eq!(45, a.par_iter().sum::<i32>());
|
1164
|
+
assert_eq!(45, a.into_par_iter().sum::<i32>());
|
1165
|
+
}
|
1166
|
+
|
1167
|
+
#[test]
|
1168
|
+
fn check_hash_map() {
|
1169
|
+
use std::collections::HashMap;
|
1170
|
+
|
1171
|
+
let mut a: HashMap<i32, i32> = (0..10).map(|i| (i, -i)).collect();
|
1172
|
+
|
1173
|
+
assert_eq!(45, a.par_iter().map(|(&k, _)| k).sum::<i32>());
|
1174
|
+
assert_eq!(-45, a.par_iter().map(|(_, &v)| v).sum::<i32>());
|
1175
|
+
|
1176
|
+
a.par_iter_mut().for_each(|(k, v)| *v += *k);
|
1177
|
+
|
1178
|
+
assert_eq!(0, a.into_par_iter().map(|(_, v)| v).sum::<i32>());
|
1179
|
+
}
|
1180
|
+
|
1181
|
+
#[test]
|
1182
|
+
fn check_hash_set() {
|
1183
|
+
use std::collections::HashSet;
|
1184
|
+
|
1185
|
+
let a: HashSet<i32> = (0..10).collect();
|
1186
|
+
|
1187
|
+
assert_eq!(45, a.par_iter().sum::<i32>());
|
1188
|
+
assert_eq!(45, a.into_par_iter().sum::<i32>());
|
1189
|
+
}
|
1190
|
+
|
1191
|
+
#[test]
|
1192
|
+
fn check_linked_list() {
|
1193
|
+
use std::collections::LinkedList;
|
1194
|
+
|
1195
|
+
let mut a: LinkedList<i32> = (0..10).collect();
|
1196
|
+
|
1197
|
+
assert_eq!(45, a.par_iter().sum::<i32>());
|
1198
|
+
|
1199
|
+
a.par_iter_mut().for_each(|x| *x = -*x);
|
1200
|
+
|
1201
|
+
assert_eq!(-45, a.into_par_iter().sum::<i32>());
|
1202
|
+
}
|
1203
|
+
|
1204
|
+
#[test]
|
1205
|
+
fn check_vec_deque() {
|
1206
|
+
use std::collections::VecDeque;
|
1207
|
+
|
1208
|
+
let mut a: VecDeque<i32> = (0..10).collect();
|
1209
|
+
|
1210
|
+
// try to get it to wrap around
|
1211
|
+
a.drain(..5);
|
1212
|
+
a.extend(0..5);
|
1213
|
+
|
1214
|
+
assert_eq!(45, a.par_iter().sum::<i32>());
|
1215
|
+
|
1216
|
+
a.par_iter_mut().for_each(|x| *x = -*x);
|
1217
|
+
|
1218
|
+
assert_eq!(-45, a.into_par_iter().sum::<i32>());
|
1219
|
+
}
|
1220
|
+
|
1221
|
+
#[test]
|
1222
|
+
fn check_chain() {
|
1223
|
+
let mut res = vec![];
|
1224
|
+
|
1225
|
+
// stays indexed in the face of madness
|
1226
|
+
Some(0)
|
1227
|
+
.into_par_iter()
|
1228
|
+
.chain(Ok::<_, ()>(1))
|
1229
|
+
.chain(1..4)
|
1230
|
+
.chain(Err("huh?"))
|
1231
|
+
.chain(None)
|
1232
|
+
.chain(vec![5, 8, 13])
|
1233
|
+
.map(|x| (x as u8 + b'a') as char)
|
1234
|
+
.chain(vec!['x', 'y', 'z'])
|
1235
|
+
.zip((0i32..1000).into_par_iter().map(|x| -x))
|
1236
|
+
.enumerate()
|
1237
|
+
.map(|(a, (b, c))| (a, b, c))
|
1238
|
+
.chain(None)
|
1239
|
+
.collect_into_vec(&mut res);
|
1240
|
+
|
1241
|
+
assert_eq!(
|
1242
|
+
res,
|
1243
|
+
vec![
|
1244
|
+
(0, 'a', 0),
|
1245
|
+
(1, 'b', -1),
|
1246
|
+
(2, 'b', -2),
|
1247
|
+
(3, 'c', -3),
|
1248
|
+
(4, 'd', -4),
|
1249
|
+
(5, 'f', -5),
|
1250
|
+
(6, 'i', -6),
|
1251
|
+
(7, 'n', -7),
|
1252
|
+
(8, 'x', -8),
|
1253
|
+
(9, 'y', -9),
|
1254
|
+
(10, 'z', -10)
|
1255
|
+
]
|
1256
|
+
);
|
1257
|
+
|
1258
|
+
// unindexed is ok too
|
1259
|
+
let res: Vec<i32> = Some(1i32)
|
1260
|
+
.into_par_iter()
|
1261
|
+
.chain(
|
1262
|
+
(2i32..4)
|
1263
|
+
.into_par_iter()
|
1264
|
+
.chain(vec![5, 6, 7, 8, 9])
|
1265
|
+
.chain(Some((10, 100)).into_par_iter().flat_map(|(a, b)| a..b))
|
1266
|
+
.filter(|x| x & 1 == 1),
|
1267
|
+
)
|
1268
|
+
.collect();
|
1269
|
+
let other: Vec<i32> = (0..100).filter(|x| x & 1 == 1).collect();
|
1270
|
+
assert_eq!(res, other);
|
1271
|
+
|
1272
|
+
// chain collect is ok with the "fake" specialization
|
1273
|
+
let res: Vec<i32> = Some(1i32).into_par_iter().chain(None).collect();
|
1274
|
+
assert_eq!(res, &[1]);
|
1275
|
+
}
|
1276
|
+
|
1277
|
+
#[test]
|
1278
|
+
fn check_count() {
|
1279
|
+
let c0 = (0_u32..24 * 1024).filter(|i| i % 2 == 0).count();
|
1280
|
+
let c1 = (0_u32..24 * 1024)
|
1281
|
+
.into_par_iter()
|
1282
|
+
.filter(|i| i % 2 == 0)
|
1283
|
+
.count();
|
1284
|
+
assert_eq!(c0, c1);
|
1285
|
+
}
|
1286
|
+
|
1287
|
+
#[test]
|
1288
|
+
fn find_any() {
|
1289
|
+
let a: Vec<i32> = (0..1024).collect();
|
1290
|
+
|
1291
|
+
assert!(a.par_iter().find_any(|&&x| x % 42 == 41).is_some());
|
1292
|
+
assert_eq!(
|
1293
|
+
a.par_iter().find_any(|&&x| x % 19 == 1 && x % 53 == 0),
|
1294
|
+
Some(&742_i32)
|
1295
|
+
);
|
1296
|
+
assert_eq!(a.par_iter().find_any(|&&x| x < 0), None);
|
1297
|
+
|
1298
|
+
assert!(a.par_iter().position_any(|&x| x % 42 == 41).is_some());
|
1299
|
+
assert_eq!(
|
1300
|
+
a.par_iter().position_any(|&x| x % 19 == 1 && x % 53 == 0),
|
1301
|
+
Some(742_usize)
|
1302
|
+
);
|
1303
|
+
assert_eq!(a.par_iter().position_any(|&x| x < 0), None);
|
1304
|
+
|
1305
|
+
assert!(a.par_iter().any(|&x| x > 1000));
|
1306
|
+
assert!(!a.par_iter().any(|&x| x < 0));
|
1307
|
+
|
1308
|
+
assert!(!a.par_iter().all(|&x| x > 1000));
|
1309
|
+
assert!(a.par_iter().all(|&x| x >= 0));
|
1310
|
+
}
|
1311
|
+
|
1312
|
+
#[test]
|
1313
|
+
fn find_first_or_last() {
|
1314
|
+
let a: Vec<i32> = (0..1024).collect();
|
1315
|
+
|
1316
|
+
assert_eq!(a.par_iter().find_first(|&&x| x % 42 == 41), Some(&41_i32));
|
1317
|
+
assert_eq!(
|
1318
|
+
a.par_iter().find_first(|&&x| x % 19 == 1 && x % 53 == 0),
|
1319
|
+
Some(&742_i32)
|
1320
|
+
);
|
1321
|
+
assert_eq!(a.par_iter().find_first(|&&x| x < 0), None);
|
1322
|
+
|
1323
|
+
assert_eq!(
|
1324
|
+
a.par_iter().position_first(|&x| x % 42 == 41),
|
1325
|
+
Some(41_usize)
|
1326
|
+
);
|
1327
|
+
assert_eq!(
|
1328
|
+
a.par_iter().position_first(|&x| x % 19 == 1 && x % 53 == 0),
|
1329
|
+
Some(742_usize)
|
1330
|
+
);
|
1331
|
+
assert_eq!(a.par_iter().position_first(|&x| x < 0), None);
|
1332
|
+
|
1333
|
+
assert_eq!(a.par_iter().find_last(|&&x| x % 42 == 41), Some(&1007_i32));
|
1334
|
+
assert_eq!(
|
1335
|
+
a.par_iter().find_last(|&&x| x % 19 == 1 && x % 53 == 0),
|
1336
|
+
Some(&742_i32)
|
1337
|
+
);
|
1338
|
+
assert_eq!(a.par_iter().find_last(|&&x| x < 0), None);
|
1339
|
+
|
1340
|
+
assert_eq!(
|
1341
|
+
a.par_iter().position_last(|&x| x % 42 == 41),
|
1342
|
+
Some(1007_usize)
|
1343
|
+
);
|
1344
|
+
assert_eq!(
|
1345
|
+
a.par_iter().position_last(|&x| x % 19 == 1 && x % 53 == 0),
|
1346
|
+
Some(742_usize)
|
1347
|
+
);
|
1348
|
+
assert_eq!(a.par_iter().position_last(|&x| x < 0), None);
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
#[test]
|
1352
|
+
fn find_map_first_or_last_or_any() {
|
1353
|
+
let mut a: Vec<i32> = vec![];
|
1354
|
+
|
1355
|
+
assert!(a.par_iter().find_map_any(half_if_positive).is_none());
|
1356
|
+
assert!(a.par_iter().find_map_first(half_if_positive).is_none());
|
1357
|
+
assert!(a.par_iter().find_map_last(half_if_positive).is_none());
|
1358
|
+
|
1359
|
+
a = (-1024..-3).collect();
|
1360
|
+
|
1361
|
+
assert!(a.par_iter().find_map_any(half_if_positive).is_none());
|
1362
|
+
assert!(a.par_iter().find_map_first(half_if_positive).is_none());
|
1363
|
+
assert!(a.par_iter().find_map_last(half_if_positive).is_none());
|
1364
|
+
|
1365
|
+
assert!(a.par_iter().find_map_any(half_if_negative).is_some());
|
1366
|
+
assert_eq!(
|
1367
|
+
a.par_iter().find_map_first(half_if_negative),
|
1368
|
+
Some(-512_i32)
|
1369
|
+
);
|
1370
|
+
assert_eq!(a.par_iter().find_map_last(half_if_negative), Some(-2_i32));
|
1371
|
+
|
1372
|
+
a.append(&mut (2..1025).collect());
|
1373
|
+
|
1374
|
+
assert!(a.par_iter().find_map_any(half_if_positive).is_some());
|
1375
|
+
assert_eq!(a.par_iter().find_map_first(half_if_positive), Some(1_i32));
|
1376
|
+
assert_eq!(a.par_iter().find_map_last(half_if_positive), Some(512_i32));
|
1377
|
+
|
1378
|
+
fn half_if_positive(x: &i32) -> Option<i32> {
|
1379
|
+
if *x > 0 {
|
1380
|
+
Some(x / 2)
|
1381
|
+
} else {
|
1382
|
+
None
|
1383
|
+
}
|
1384
|
+
}
|
1385
|
+
|
1386
|
+
fn half_if_negative(x: &i32) -> Option<i32> {
|
1387
|
+
if *x < 0 {
|
1388
|
+
Some(x / 2)
|
1389
|
+
} else {
|
1390
|
+
None
|
1391
|
+
}
|
1392
|
+
}
|
1393
|
+
}
|
1394
|
+
|
1395
|
+
#[test]
|
1396
|
+
fn check_find_not_present() {
|
1397
|
+
let counter = AtomicUsize::new(0);
|
1398
|
+
let value: Option<i32> = (0_i32..2048).into_par_iter().find_any(|&p| {
|
1399
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
1400
|
+
p >= 2048
|
1401
|
+
});
|
1402
|
+
assert!(value.is_none());
|
1403
|
+
assert!(counter.load(Ordering::SeqCst) == 2048); // should have visited every single one
|
1404
|
+
}
|
1405
|
+
|
1406
|
+
#[test]
|
1407
|
+
fn check_find_is_present() {
|
1408
|
+
let counter = AtomicUsize::new(0);
|
1409
|
+
let value: Option<i32> = (0_i32..2048).into_par_iter().find_any(|&p| {
|
1410
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
1411
|
+
(1024..1096).contains(&p)
|
1412
|
+
});
|
1413
|
+
let q = value.unwrap();
|
1414
|
+
assert!((1024..1096).contains(&q));
|
1415
|
+
assert!(counter.load(Ordering::SeqCst) < 2048); // should not have visited every single one
|
1416
|
+
}
|
1417
|
+
|
1418
|
+
#[test]
|
1419
|
+
fn check_while_some() {
|
1420
|
+
let value = (0_i32..2048).into_par_iter().map(Some).while_some().max();
|
1421
|
+
assert_eq!(value, Some(2047));
|
1422
|
+
|
1423
|
+
let counter = AtomicUsize::new(0);
|
1424
|
+
let value = (0_i32..2048)
|
1425
|
+
.into_par_iter()
|
1426
|
+
.map(|x| {
|
1427
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
1428
|
+
if x < 1024 {
|
1429
|
+
Some(x)
|
1430
|
+
} else {
|
1431
|
+
None
|
1432
|
+
}
|
1433
|
+
})
|
1434
|
+
.while_some()
|
1435
|
+
.max();
|
1436
|
+
assert!(value < Some(1024));
|
1437
|
+
assert!(counter.load(Ordering::SeqCst) < 2048); // should not have visited every single one
|
1438
|
+
}
|
1439
|
+
|
1440
|
+
#[test]
|
1441
|
+
fn par_iter_collect_option() {
|
1442
|
+
let a: Option<Vec<_>> = (0_i32..2048).map(Some).collect();
|
1443
|
+
let b: Option<Vec<_>> = (0_i32..2048).into_par_iter().map(Some).collect();
|
1444
|
+
assert_eq!(a, b);
|
1445
|
+
|
1446
|
+
let c: Option<Vec<_>> = (0_i32..2048)
|
1447
|
+
.into_par_iter()
|
1448
|
+
.map(|x| if x == 1234 { None } else { Some(x) })
|
1449
|
+
.collect();
|
1450
|
+
assert_eq!(c, None);
|
1451
|
+
}
|
1452
|
+
|
1453
|
+
#[test]
|
1454
|
+
fn par_iter_collect_result() {
|
1455
|
+
let a: Result<Vec<_>, ()> = (0_i32..2048).map(Ok).collect();
|
1456
|
+
let b: Result<Vec<_>, ()> = (0_i32..2048).into_par_iter().map(Ok).collect();
|
1457
|
+
assert_eq!(a, b);
|
1458
|
+
|
1459
|
+
let c: Result<Vec<_>, _> = (0_i32..2048)
|
1460
|
+
.into_par_iter()
|
1461
|
+
.map(|x| if x == 1234 { Err(x) } else { Ok(x) })
|
1462
|
+
.collect();
|
1463
|
+
assert_eq!(c, Err(1234));
|
1464
|
+
|
1465
|
+
let d: Result<Vec<_>, _> = (0_i32..2048)
|
1466
|
+
.into_par_iter()
|
1467
|
+
.map(|x| if x % 100 == 99 { Err(x) } else { Ok(x) })
|
1468
|
+
.collect();
|
1469
|
+
assert_eq!(d.map_err(|x| x % 100), Err(99));
|
1470
|
+
}
|
1471
|
+
|
1472
|
+
#[test]
|
1473
|
+
fn par_iter_collect() {
|
1474
|
+
let a: Vec<i32> = (0..1024).collect();
|
1475
|
+
let b: Vec<i32> = a.par_iter().map(|&i| i + 1).collect();
|
1476
|
+
let c: Vec<i32> = (0..1024).map(|i| i + 1).collect();
|
1477
|
+
assert_eq!(b, c);
|
1478
|
+
}
|
1479
|
+
|
1480
|
+
#[test]
|
1481
|
+
fn par_iter_collect_vecdeque() {
|
1482
|
+
let a: Vec<i32> = (0..1024).collect();
|
1483
|
+
let b: VecDeque<i32> = a.par_iter().cloned().collect();
|
1484
|
+
let c: VecDeque<i32> = a.iter().cloned().collect();
|
1485
|
+
assert_eq!(b, c);
|
1486
|
+
}
|
1487
|
+
|
1488
|
+
#[test]
|
1489
|
+
fn par_iter_collect_binaryheap() {
|
1490
|
+
let a: Vec<i32> = (0..1024).collect();
|
1491
|
+
let mut b: BinaryHeap<i32> = a.par_iter().cloned().collect();
|
1492
|
+
assert_eq!(b.peek(), Some(&1023));
|
1493
|
+
assert_eq!(b.len(), 1024);
|
1494
|
+
for n in (0..1024).rev() {
|
1495
|
+
assert_eq!(b.pop(), Some(n));
|
1496
|
+
assert_eq!(b.len() as i32, n);
|
1497
|
+
}
|
1498
|
+
}
|
1499
|
+
|
1500
|
+
#[test]
|
1501
|
+
fn par_iter_collect_hashmap() {
|
1502
|
+
let a: Vec<i32> = (0..1024).collect();
|
1503
|
+
let b: HashMap<i32, String> = a.par_iter().map(|&i| (i, format!("{i}"))).collect();
|
1504
|
+
assert_eq!(&b[&3], "3");
|
1505
|
+
assert_eq!(b.len(), 1024);
|
1506
|
+
}
|
1507
|
+
|
1508
|
+
#[test]
|
1509
|
+
fn par_iter_collect_hashset() {
|
1510
|
+
let a: Vec<i32> = (0..1024).collect();
|
1511
|
+
let b: HashSet<i32> = a.par_iter().cloned().collect();
|
1512
|
+
assert_eq!(b.len(), 1024);
|
1513
|
+
}
|
1514
|
+
|
1515
|
+
#[test]
|
1516
|
+
fn par_iter_collect_btreemap() {
|
1517
|
+
let a: Vec<i32> = (0..1024).collect();
|
1518
|
+
let b: BTreeMap<i32, String> = a.par_iter().map(|&i| (i, format!("{i}"))).collect();
|
1519
|
+
assert_eq!(&b[&3], "3");
|
1520
|
+
assert_eq!(b.len(), 1024);
|
1521
|
+
}
|
1522
|
+
|
1523
|
+
#[test]
|
1524
|
+
fn par_iter_collect_btreeset() {
|
1525
|
+
let a: Vec<i32> = (0..1024).collect();
|
1526
|
+
let b: BTreeSet<i32> = a.par_iter().cloned().collect();
|
1527
|
+
assert_eq!(b.len(), 1024);
|
1528
|
+
}
|
1529
|
+
|
1530
|
+
#[test]
|
1531
|
+
fn par_iter_collect_linked_list() {
|
1532
|
+
let a: Vec<i32> = (0..1024).collect();
|
1533
|
+
let b: LinkedList<_> = a.par_iter().map(|&i| (i, format!("{i}"))).collect();
|
1534
|
+
let c: LinkedList<_> = a.iter().map(|&i| (i, format!("{i}"))).collect();
|
1535
|
+
assert_eq!(b, c);
|
1536
|
+
}
|
1537
|
+
|
1538
|
+
#[test]
|
1539
|
+
fn par_iter_collect_linked_list_flat_map_filter() {
|
1540
|
+
let b: LinkedList<i32> = (0_i32..1024)
|
1541
|
+
.into_par_iter()
|
1542
|
+
.flat_map(|i| 0..i)
|
1543
|
+
.filter(|&i| i % 2 == 0)
|
1544
|
+
.collect();
|
1545
|
+
let c: LinkedList<i32> = (0_i32..1024)
|
1546
|
+
.flat_map(|i| 0..i)
|
1547
|
+
.filter(|&i| i % 2 == 0)
|
1548
|
+
.collect();
|
1549
|
+
assert_eq!(b, c);
|
1550
|
+
}
|
1551
|
+
|
1552
|
+
#[test]
|
1553
|
+
fn par_iter_collect_cows() {
|
1554
|
+
use std::borrow::Cow;
|
1555
|
+
|
1556
|
+
let s = "Fearless Concurrency with Rust";
|
1557
|
+
|
1558
|
+
// Collects `i32` into a `Vec`
|
1559
|
+
let a: Cow<'_, [i32]> = (0..1024).collect();
|
1560
|
+
let b: Cow<'_, [i32]> = a.par_iter().cloned().collect();
|
1561
|
+
assert_eq!(a, b);
|
1562
|
+
|
1563
|
+
// Collects `char` into a `String`
|
1564
|
+
let a: Cow<'_, str> = s.chars().collect();
|
1565
|
+
let b: Cow<'_, str> = s.par_chars().collect();
|
1566
|
+
assert_eq!(a, b);
|
1567
|
+
|
1568
|
+
// Collects `str` into a `String`
|
1569
|
+
let sw = s.split_whitespace();
|
1570
|
+
let psw = s.par_split_whitespace();
|
1571
|
+
let a: Cow<'_, str> = sw.clone().collect();
|
1572
|
+
let b: Cow<'_, str> = psw.clone().collect();
|
1573
|
+
assert_eq!(a, b);
|
1574
|
+
|
1575
|
+
// Collects `String` into a `String`
|
1576
|
+
let a: Cow<'_, str> = sw.map(str::to_owned).collect();
|
1577
|
+
let b: Cow<'_, str> = psw.map(str::to_owned).collect();
|
1578
|
+
assert_eq!(a, b);
|
1579
|
+
|
1580
|
+
// Collects `OsStr` into a `OsString`
|
1581
|
+
let sw = s.split_whitespace().map(OsStr::new);
|
1582
|
+
let psw = s.par_split_whitespace().map(OsStr::new);
|
1583
|
+
let a: Cow<'_, OsStr> = Cow::Owned(sw.clone().collect());
|
1584
|
+
let b: Cow<'_, OsStr> = psw.clone().collect();
|
1585
|
+
assert_eq!(a, b);
|
1586
|
+
|
1587
|
+
// Collects `OsString` into a `OsString`
|
1588
|
+
let a: Cow<'_, OsStr> = Cow::Owned(sw.map(OsStr::to_owned).collect());
|
1589
|
+
let b: Cow<'_, OsStr> = psw.map(OsStr::to_owned).collect();
|
1590
|
+
assert_eq!(a, b);
|
1591
|
+
}
|
1592
|
+
|
1593
|
+
#[test]
|
1594
|
+
fn par_iter_unindexed_flat_map() {
|
1595
|
+
let b: Vec<i64> = (0_i64..1024).into_par_iter().flat_map(Some).collect();
|
1596
|
+
let c: Vec<i64> = (0_i64..1024).flat_map(Some).collect();
|
1597
|
+
assert_eq!(b, c);
|
1598
|
+
}
|
1599
|
+
|
1600
|
+
#[test]
|
1601
|
+
fn min_max() {
|
1602
|
+
let rng = seeded_rng();
|
1603
|
+
let a: Vec<i32> = rng.sample_iter(&StandardUniform).take(1024).collect();
|
1604
|
+
for i in 0..=a.len() {
|
1605
|
+
let slice = &a[..i];
|
1606
|
+
assert_eq!(slice.par_iter().min(), slice.iter().min());
|
1607
|
+
assert_eq!(slice.par_iter().max(), slice.iter().max());
|
1608
|
+
}
|
1609
|
+
}
|
1610
|
+
|
1611
|
+
#[test]
|
1612
|
+
fn min_max_by() {
|
1613
|
+
let rng = seeded_rng();
|
1614
|
+
// Make sure there are duplicate keys, for testing sort stability
|
1615
|
+
let r: Vec<i32> = rng.sample_iter(&StandardUniform).take(512).collect();
|
1616
|
+
let a: Vec<(i32, u16)> = r.iter().chain(&r).cloned().zip(0..).collect();
|
1617
|
+
for i in 0..=a.len() {
|
1618
|
+
let slice = &a[..i];
|
1619
|
+
assert_eq!(
|
1620
|
+
slice.par_iter().min_by(|x, y| x.0.cmp(&y.0)),
|
1621
|
+
slice.iter().min_by(|x, y| x.0.cmp(&y.0))
|
1622
|
+
);
|
1623
|
+
assert_eq!(
|
1624
|
+
slice.par_iter().max_by(|x, y| x.0.cmp(&y.0)),
|
1625
|
+
slice.iter().max_by(|x, y| x.0.cmp(&y.0))
|
1626
|
+
);
|
1627
|
+
}
|
1628
|
+
}
|
1629
|
+
|
1630
|
+
#[test]
|
1631
|
+
fn min_max_by_key() {
|
1632
|
+
let rng = seeded_rng();
|
1633
|
+
// Make sure there are duplicate keys, for testing sort stability
|
1634
|
+
let r: Vec<i32> = rng.sample_iter(&StandardUniform).take(512).collect();
|
1635
|
+
let a: Vec<(i32, u16)> = r.iter().chain(&r).cloned().zip(0..).collect();
|
1636
|
+
for i in 0..=a.len() {
|
1637
|
+
let slice = &a[..i];
|
1638
|
+
assert_eq!(
|
1639
|
+
slice.par_iter().min_by_key(|x| x.0),
|
1640
|
+
slice.iter().min_by_key(|x| x.0)
|
1641
|
+
);
|
1642
|
+
assert_eq!(
|
1643
|
+
slice.par_iter().max_by_key(|x| x.0),
|
1644
|
+
slice.iter().max_by_key(|x| x.0)
|
1645
|
+
);
|
1646
|
+
}
|
1647
|
+
}
|
1648
|
+
|
1649
|
+
#[test]
|
1650
|
+
fn check_rev() {
|
1651
|
+
let a: Vec<usize> = (0..1024).rev().collect();
|
1652
|
+
let b: Vec<usize> = (0..1024).collect();
|
1653
|
+
|
1654
|
+
assert!(a.par_iter().rev().zip(b).all(|(&a, b)| a == b));
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
#[test]
|
1658
|
+
fn scope_mix() {
|
1659
|
+
let counter_p = &AtomicUsize::new(0);
|
1660
|
+
scope(|s| {
|
1661
|
+
s.spawn(move |s| {
|
1662
|
+
divide_and_conquer(s, counter_p, 1024);
|
1663
|
+
});
|
1664
|
+
s.spawn(move |_| {
|
1665
|
+
let a: Vec<i32> = (0..1024).collect();
|
1666
|
+
let r1 = a.par_iter().map(|&i| i + 1).reduce_with(|i, j| i + j);
|
1667
|
+
let r2 = a.iter().map(|&i| i + 1).sum();
|
1668
|
+
assert_eq!(r1.unwrap(), r2);
|
1669
|
+
});
|
1670
|
+
});
|
1671
|
+
}
|
1672
|
+
|
1673
|
+
fn divide_and_conquer<'scope>(scope: &Scope<'scope>, counter: &'scope AtomicUsize, size: usize) {
|
1674
|
+
if size > 1 {
|
1675
|
+
scope.spawn(move |scope| divide_and_conquer(scope, counter, size / 2));
|
1676
|
+
scope.spawn(move |scope| divide_and_conquer(scope, counter, size / 2));
|
1677
|
+
} else {
|
1678
|
+
// count the leaves
|
1679
|
+
counter.fetch_add(1, Ordering::SeqCst);
|
1680
|
+
}
|
1681
|
+
}
|
1682
|
+
|
1683
|
+
#[test]
|
1684
|
+
fn check_split() {
|
1685
|
+
use std::ops::Range;
|
1686
|
+
|
1687
|
+
let a = (0..1024).into_par_iter();
|
1688
|
+
|
1689
|
+
let b = split(0..1024, |Range { start, end }| {
|
1690
|
+
let mid = (end - start) / 2;
|
1691
|
+
if mid > start {
|
1692
|
+
(start..mid, Some(mid..end))
|
1693
|
+
} else {
|
1694
|
+
(start..end, None)
|
1695
|
+
}
|
1696
|
+
})
|
1697
|
+
.flat_map(|range| range);
|
1698
|
+
|
1699
|
+
assert_eq!(a.collect::<Vec<_>>(), b.collect::<Vec<_>>());
|
1700
|
+
}
|
1701
|
+
|
1702
|
+
#[test]
|
1703
|
+
fn check_lengths() {
|
1704
|
+
fn check(min: usize, max: usize) {
|
1705
|
+
let range = 0..1024 * 1024;
|
1706
|
+
|
1707
|
+
// Check against normalized values.
|
1708
|
+
let min_check = Ord::min(Ord::max(min, 1), range.len());
|
1709
|
+
let max_check = Ord::max(max, min_check.saturating_add(min_check - 1));
|
1710
|
+
|
1711
|
+
assert!(
|
1712
|
+
range
|
1713
|
+
.into_par_iter()
|
1714
|
+
.with_min_len(min)
|
1715
|
+
.with_max_len(max)
|
1716
|
+
.fold(|| 0, |count, _| count + 1)
|
1717
|
+
.all(|c| c >= min_check && c <= max_check),
|
1718
|
+
"check_lengths failed {:?} -> {:?} ",
|
1719
|
+
(min, max),
|
1720
|
+
(min_check, max_check)
|
1721
|
+
);
|
1722
|
+
}
|
1723
|
+
|
1724
|
+
let lengths = [0, 1, 10, 100, 1_000, 10_000, 100_000, 1_000_000, usize::MAX];
|
1725
|
+
for &min in &lengths {
|
1726
|
+
for &max in &lengths {
|
1727
|
+
check(min, max);
|
1728
|
+
}
|
1729
|
+
}
|
1730
|
+
}
|
1731
|
+
|
1732
|
+
#[test]
|
1733
|
+
fn check_map_with() {
|
1734
|
+
let (sender, receiver) = mpsc::channel();
|
1735
|
+
let a: HashSet<_> = (0..1024).collect();
|
1736
|
+
|
1737
|
+
a.par_iter()
|
1738
|
+
.cloned()
|
1739
|
+
.map_with(sender, |s, i| s.send(i).unwrap())
|
1740
|
+
.count();
|
1741
|
+
|
1742
|
+
let b: HashSet<_> = receiver.iter().collect();
|
1743
|
+
assert_eq!(a, b);
|
1744
|
+
}
|
1745
|
+
|
1746
|
+
#[test]
|
1747
|
+
fn check_fold_with() {
|
1748
|
+
let (sender, receiver) = mpsc::channel();
|
1749
|
+
let a: HashSet<_> = (0..1024).collect();
|
1750
|
+
|
1751
|
+
a.par_iter()
|
1752
|
+
.cloned()
|
1753
|
+
.fold_with(sender, |s, i| {
|
1754
|
+
s.send(i).unwrap();
|
1755
|
+
s
|
1756
|
+
})
|
1757
|
+
.count();
|
1758
|
+
|
1759
|
+
let b: HashSet<_> = receiver.iter().collect();
|
1760
|
+
assert_eq!(a, b);
|
1761
|
+
}
|
1762
|
+
|
1763
|
+
#[test]
|
1764
|
+
fn check_for_each_with() {
|
1765
|
+
let (sender, receiver) = mpsc::channel();
|
1766
|
+
let a: HashSet<_> = (0..1024).collect();
|
1767
|
+
|
1768
|
+
a.par_iter()
|
1769
|
+
.cloned()
|
1770
|
+
.for_each_with(sender, |s, i| s.send(i).unwrap());
|
1771
|
+
|
1772
|
+
let b: HashSet<_> = receiver.iter().collect();
|
1773
|
+
assert_eq!(a, b);
|
1774
|
+
}
|
1775
|
+
|
1776
|
+
#[test]
|
1777
|
+
fn check_extend_items() {
|
1778
|
+
fn check<C>()
|
1779
|
+
where
|
1780
|
+
C: Default
|
1781
|
+
+ Eq
|
1782
|
+
+ Debug
|
1783
|
+
+ Extend<i32>
|
1784
|
+
+ for<'a> Extend<&'a i32>
|
1785
|
+
+ ParallelExtend<i32>
|
1786
|
+
+ for<'a> ParallelExtend<&'a i32>,
|
1787
|
+
{
|
1788
|
+
let mut serial = C::default();
|
1789
|
+
let mut parallel = C::default();
|
1790
|
+
|
1791
|
+
// extend with references
|
1792
|
+
let v: Vec<_> = (0..128).collect();
|
1793
|
+
serial.extend(&v);
|
1794
|
+
parallel.par_extend(&v);
|
1795
|
+
assert_eq!(serial, parallel);
|
1796
|
+
|
1797
|
+
// extend with values
|
1798
|
+
serial.extend(-128..0);
|
1799
|
+
parallel.par_extend(-128..0);
|
1800
|
+
assert_eq!(serial, parallel);
|
1801
|
+
}
|
1802
|
+
|
1803
|
+
check::<BTreeSet<_>>();
|
1804
|
+
check::<HashSet<_>>();
|
1805
|
+
check::<LinkedList<_>>();
|
1806
|
+
check::<Vec<_>>();
|
1807
|
+
check::<VecDeque<_>>();
|
1808
|
+
}
|
1809
|
+
|
1810
|
+
#[test]
|
1811
|
+
fn check_extend_heap() {
|
1812
|
+
let mut serial: BinaryHeap<_> = Default::default();
|
1813
|
+
let mut parallel: BinaryHeap<_> = Default::default();
|
1814
|
+
|
1815
|
+
// extend with references
|
1816
|
+
let v: Vec<_> = (0..128).collect();
|
1817
|
+
serial.extend(&v);
|
1818
|
+
parallel.par_extend(&v);
|
1819
|
+
assert_eq!(
|
1820
|
+
serial.clone().into_sorted_vec(),
|
1821
|
+
parallel.clone().into_sorted_vec()
|
1822
|
+
);
|
1823
|
+
|
1824
|
+
// extend with values
|
1825
|
+
serial.extend(-128..0);
|
1826
|
+
parallel.par_extend(-128..0);
|
1827
|
+
assert_eq!(serial.into_sorted_vec(), parallel.into_sorted_vec());
|
1828
|
+
}
|
1829
|
+
|
1830
|
+
#[test]
|
1831
|
+
fn check_extend_pairs() {
|
1832
|
+
fn check<C>()
|
1833
|
+
where
|
1834
|
+
C: Default
|
1835
|
+
+ Eq
|
1836
|
+
+ Debug
|
1837
|
+
+ Extend<(usize, i32)>
|
1838
|
+
+ for<'a> Extend<(&'a usize, &'a i32)>
|
1839
|
+
+ ParallelExtend<(usize, i32)>
|
1840
|
+
+ for<'a> ParallelExtend<(&'a usize, &'a i32)>,
|
1841
|
+
{
|
1842
|
+
let mut serial = C::default();
|
1843
|
+
let mut parallel = C::default();
|
1844
|
+
|
1845
|
+
// extend with references
|
1846
|
+
let m: HashMap<_, _> = (0..128).enumerate().collect();
|
1847
|
+
serial.extend(&m);
|
1848
|
+
parallel.par_extend(&m);
|
1849
|
+
assert_eq!(serial, parallel);
|
1850
|
+
|
1851
|
+
// extend with values
|
1852
|
+
let v: Vec<(_, _)> = (-128..0).enumerate().collect();
|
1853
|
+
serial.extend(v.clone());
|
1854
|
+
parallel.par_extend(v);
|
1855
|
+
assert_eq!(serial, parallel);
|
1856
|
+
}
|
1857
|
+
|
1858
|
+
check::<BTreeMap<usize, i32>>();
|
1859
|
+
check::<HashMap<usize, i32>>();
|
1860
|
+
}
|
1861
|
+
|
1862
|
+
#[test]
|
1863
|
+
fn check_unzip_into_vecs() {
|
1864
|
+
let mut a = vec![];
|
1865
|
+
let mut b = vec![];
|
1866
|
+
(0..1024)
|
1867
|
+
.into_par_iter()
|
1868
|
+
.map(|i| i * i)
|
1869
|
+
.enumerate()
|
1870
|
+
.unzip_into_vecs(&mut a, &mut b);
|
1871
|
+
|
1872
|
+
let (c, d): (Vec<_>, Vec<_>) = (0..1024).map(|i| i * i).enumerate().unzip();
|
1873
|
+
assert_eq!(a, c);
|
1874
|
+
assert_eq!(b, d);
|
1875
|
+
}
|
1876
|
+
|
1877
|
+
#[test]
|
1878
|
+
fn check_unzip() {
|
1879
|
+
// indexed, unindexed
|
1880
|
+
let (a, b): (Vec<_>, HashSet<_>) = (0..1024).into_par_iter().map(|i| i * i).enumerate().unzip();
|
1881
|
+
let (c, d): (Vec<_>, HashSet<_>) = (0..1024).map(|i| i * i).enumerate().unzip();
|
1882
|
+
assert_eq!(a, c);
|
1883
|
+
assert_eq!(b, d);
|
1884
|
+
|
1885
|
+
// unindexed, indexed
|
1886
|
+
let (a, b): (HashSet<_>, Vec<_>) = (0..1024).into_par_iter().map(|i| i * i).enumerate().unzip();
|
1887
|
+
let (c, d): (HashSet<_>, Vec<_>) = (0..1024).map(|i| i * i).enumerate().unzip();
|
1888
|
+
assert_eq!(a, c);
|
1889
|
+
assert_eq!(b, d);
|
1890
|
+
|
1891
|
+
// indexed, indexed
|
1892
|
+
let (a, b): (Vec<_>, Vec<_>) = (0..1024).into_par_iter().map(|i| i * i).enumerate().unzip();
|
1893
|
+
let (c, d): (Vec<_>, Vec<_>) = (0..1024).map(|i| i * i).enumerate().unzip();
|
1894
|
+
assert_eq!(a, c);
|
1895
|
+
assert_eq!(b, d);
|
1896
|
+
|
1897
|
+
// unindexed producer
|
1898
|
+
let (a, b): (Vec<_>, Vec<_>) = (0..1024)
|
1899
|
+
.into_par_iter()
|
1900
|
+
.filter_map(|i| Some((i, i * i)))
|
1901
|
+
.unzip();
|
1902
|
+
let (c, d): (Vec<_>, Vec<_>) = (0..1024).map(|i| (i, i * i)).unzip();
|
1903
|
+
assert_eq!(a, c);
|
1904
|
+
assert_eq!(b, d);
|
1905
|
+
}
|
1906
|
+
|
1907
|
+
#[test]
|
1908
|
+
fn check_partition() {
|
1909
|
+
let (a, b): (Vec<_>, Vec<_>) = (0..1024).into_par_iter().partition(|&i| i % 3 == 0);
|
1910
|
+
let (c, d): (Vec<_>, Vec<_>) = (0..1024).partition(|&i| i % 3 == 0);
|
1911
|
+
assert_eq!(a, c);
|
1912
|
+
assert_eq!(b, d);
|
1913
|
+
}
|
1914
|
+
|
1915
|
+
#[test]
|
1916
|
+
fn check_partition_map() {
|
1917
|
+
let input = "a b c 1 2 3 x y z";
|
1918
|
+
let (a, b): (Vec<_>, String) =
|
1919
|
+
input
|
1920
|
+
.par_split_whitespace()
|
1921
|
+
.partition_map(|s| match s.parse::<i32>() {
|
1922
|
+
Ok(n) => Either::Left(n),
|
1923
|
+
Err(_) => Either::Right(s),
|
1924
|
+
});
|
1925
|
+
assert_eq!(a, vec![1, 2, 3]);
|
1926
|
+
assert_eq!(b, "abcxyz");
|
1927
|
+
}
|
1928
|
+
|
1929
|
+
#[test]
|
1930
|
+
fn check_either() {
|
1931
|
+
type I = crate::vec::IntoIter<i32>;
|
1932
|
+
type E = Either<I, I>;
|
1933
|
+
|
1934
|
+
let v: Vec<i32> = (0..1024).collect();
|
1935
|
+
|
1936
|
+
// try iterating the left side
|
1937
|
+
let left: E = Either::Left(v.clone().into_par_iter());
|
1938
|
+
assert!(left.eq(v.clone()));
|
1939
|
+
|
1940
|
+
// try iterating the right side
|
1941
|
+
let right: E = Either::Right(v.clone().into_par_iter());
|
1942
|
+
assert!(right.eq(v.clone()));
|
1943
|
+
|
1944
|
+
// try an indexed iterator
|
1945
|
+
let left: E = Either::Left(v.clone().into_par_iter());
|
1946
|
+
assert!(left.enumerate().eq(v.into_par_iter().enumerate()));
|
1947
|
+
}
|
1948
|
+
|
1949
|
+
#[test]
|
1950
|
+
fn check_either_extend() {
|
1951
|
+
type E = Either<Vec<i32>, HashSet<i32>>;
|
1952
|
+
|
1953
|
+
let v: Vec<i32> = (0..1024).collect();
|
1954
|
+
|
1955
|
+
// try extending the left side
|
1956
|
+
let mut left: E = Either::Left(vec![]);
|
1957
|
+
left.par_extend(v.clone());
|
1958
|
+
assert_eq!(left.as_ref(), Either::Left(&v));
|
1959
|
+
|
1960
|
+
// try extending the right side
|
1961
|
+
let mut right: E = Either::Right(HashSet::default());
|
1962
|
+
right.par_extend(v.clone());
|
1963
|
+
assert_eq!(right, Either::Right(v.iter().cloned().collect()));
|
1964
|
+
}
|
1965
|
+
|
1966
|
+
#[test]
|
1967
|
+
fn check_interleave_eq() {
|
1968
|
+
let xs: Vec<usize> = (0..10).collect();
|
1969
|
+
let ys: Vec<usize> = (10..20).collect();
|
1970
|
+
|
1971
|
+
let mut actual = vec![];
|
1972
|
+
xs.par_iter()
|
1973
|
+
.interleave(&ys)
|
1974
|
+
.map(|&i| i)
|
1975
|
+
.collect_into_vec(&mut actual);
|
1976
|
+
|
1977
|
+
let expected: Vec<usize> = (0..10)
|
1978
|
+
.zip(10..20)
|
1979
|
+
.flat_map(|(i, j)| vec![i, j].into_iter())
|
1980
|
+
.collect();
|
1981
|
+
assert_eq!(expected, actual);
|
1982
|
+
}
|
1983
|
+
|
1984
|
+
#[test]
|
1985
|
+
fn check_interleave_uneven() {
|
1986
|
+
let cases: Vec<(Vec<usize>, Vec<usize>, Vec<usize>)> = vec![
|
1987
|
+
(
|
1988
|
+
(0..9).collect(),
|
1989
|
+
vec![10],
|
1990
|
+
vec![0, 10, 1, 2, 3, 4, 5, 6, 7, 8],
|
1991
|
+
),
|
1992
|
+
(
|
1993
|
+
vec![10],
|
1994
|
+
(0..9).collect(),
|
1995
|
+
vec![10, 0, 1, 2, 3, 4, 5, 6, 7, 8],
|
1996
|
+
),
|
1997
|
+
(
|
1998
|
+
(0..5).collect(),
|
1999
|
+
(5..10).collect(),
|
2000
|
+
(0..5)
|
2001
|
+
.zip(5..10)
|
2002
|
+
.flat_map(|(i, j)| vec![i, j].into_iter())
|
2003
|
+
.collect(),
|
2004
|
+
),
|
2005
|
+
(vec![], (0..9).collect(), (0..9).collect()),
|
2006
|
+
((0..9).collect(), vec![], (0..9).collect()),
|
2007
|
+
(
|
2008
|
+
(0..50).collect(),
|
2009
|
+
(50..100).collect(),
|
2010
|
+
(0..50)
|
2011
|
+
.zip(50..100)
|
2012
|
+
.flat_map(|(i, j)| vec![i, j].into_iter())
|
2013
|
+
.collect(),
|
2014
|
+
),
|
2015
|
+
];
|
2016
|
+
|
2017
|
+
for (i, (xs, ys, expected)) in cases.into_iter().enumerate() {
|
2018
|
+
let mut res = vec![];
|
2019
|
+
xs.par_iter()
|
2020
|
+
.interleave(&ys)
|
2021
|
+
.map(|&i| i)
|
2022
|
+
.collect_into_vec(&mut res);
|
2023
|
+
assert_eq!(expected, res, "Case {i} failed");
|
2024
|
+
|
2025
|
+
res.truncate(0);
|
2026
|
+
xs.par_iter()
|
2027
|
+
.interleave(&ys)
|
2028
|
+
.rev()
|
2029
|
+
.map(|&i| i)
|
2030
|
+
.collect_into_vec(&mut res);
|
2031
|
+
assert_eq!(
|
2032
|
+
expected.into_iter().rev().collect::<Vec<usize>>(),
|
2033
|
+
res,
|
2034
|
+
"Case {i} reversed failed"
|
2035
|
+
);
|
2036
|
+
}
|
2037
|
+
}
|
2038
|
+
|
2039
|
+
#[test]
|
2040
|
+
fn check_interleave_shortest() {
|
2041
|
+
let cases: Vec<(Vec<usize>, Vec<usize>, Vec<usize>)> = vec![
|
2042
|
+
((0..9).collect(), vec![10], vec![0, 10, 1]),
|
2043
|
+
(vec![10], (0..9).collect(), vec![10, 0]),
|
2044
|
+
(
|
2045
|
+
(0..5).collect(),
|
2046
|
+
(5..10).collect(),
|
2047
|
+
(0..5)
|
2048
|
+
.zip(5..10)
|
2049
|
+
.flat_map(|(i, j)| vec![i, j].into_iter())
|
2050
|
+
.collect(),
|
2051
|
+
),
|
2052
|
+
(vec![], (0..9).collect(), vec![]),
|
2053
|
+
((0..9).collect(), vec![], vec![0]),
|
2054
|
+
(
|
2055
|
+
(0..50).collect(),
|
2056
|
+
(50..100).collect(),
|
2057
|
+
(0..50)
|
2058
|
+
.zip(50..100)
|
2059
|
+
.flat_map(|(i, j)| vec![i, j].into_iter())
|
2060
|
+
.collect(),
|
2061
|
+
),
|
2062
|
+
];
|
2063
|
+
|
2064
|
+
for (i, (xs, ys, expected)) in cases.into_iter().enumerate() {
|
2065
|
+
let mut res = vec![];
|
2066
|
+
xs.par_iter()
|
2067
|
+
.interleave_shortest(&ys)
|
2068
|
+
.map(|&i| i)
|
2069
|
+
.collect_into_vec(&mut res);
|
2070
|
+
assert_eq!(expected, res, "Case {i} failed");
|
2071
|
+
|
2072
|
+
res.truncate(0);
|
2073
|
+
xs.par_iter()
|
2074
|
+
.interleave_shortest(&ys)
|
2075
|
+
.rev()
|
2076
|
+
.map(|&i| i)
|
2077
|
+
.collect_into_vec(&mut res);
|
2078
|
+
assert_eq!(
|
2079
|
+
expected.into_iter().rev().collect::<Vec<usize>>(),
|
2080
|
+
res,
|
2081
|
+
"Case {i} reversed failed"
|
2082
|
+
);
|
2083
|
+
}
|
2084
|
+
}
|
2085
|
+
|
2086
|
+
#[test]
|
2087
|
+
#[should_panic(expected = "chunk_size must not be zero")]
|
2088
|
+
fn check_chunks_zero_size() {
|
2089
|
+
let _: Vec<Vec<i32>> = vec![1, 2, 3].into_par_iter().chunks(0).collect();
|
2090
|
+
}
|
2091
|
+
|
2092
|
+
#[test]
|
2093
|
+
fn check_chunks_even_size() {
|
2094
|
+
assert_eq!(
|
2095
|
+
vec![vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9]],
|
2096
|
+
(1..10).into_par_iter().chunks(3).collect::<Vec<Vec<i32>>>()
|
2097
|
+
);
|
2098
|
+
}
|
2099
|
+
|
2100
|
+
#[test]
|
2101
|
+
fn check_chunks_empty() {
|
2102
|
+
let v: Vec<i32> = vec![];
|
2103
|
+
let expected: Vec<Vec<i32>> = vec![];
|
2104
|
+
assert_eq!(
|
2105
|
+
expected,
|
2106
|
+
v.into_par_iter().chunks(2).collect::<Vec<Vec<i32>>>()
|
2107
|
+
);
|
2108
|
+
}
|
2109
|
+
|
2110
|
+
#[test]
|
2111
|
+
fn check_chunks_len() {
|
2112
|
+
assert_eq!(4, (0..8).into_par_iter().chunks(2).len());
|
2113
|
+
assert_eq!(3, (0..9).into_par_iter().chunks(3).len());
|
2114
|
+
assert_eq!(3, (0..8).into_par_iter().chunks(3).len());
|
2115
|
+
assert_eq!(1, [1].par_iter().chunks(3).len());
|
2116
|
+
assert_eq!(0, (0..0).into_par_iter().chunks(3).len());
|
2117
|
+
}
|
2118
|
+
|
2119
|
+
#[test]
|
2120
|
+
fn check_chunks_uneven() {
|
2121
|
+
let cases: Vec<(Vec<u32>, usize, Vec<Vec<u32>>)> = vec![
|
2122
|
+
((0..5).collect(), 3, vec![vec![0, 1, 2], vec![3, 4]]),
|
2123
|
+
(vec![1], 5, vec![vec![1]]),
|
2124
|
+
((0..4).collect(), 3, vec![vec![0, 1, 2], vec![3]]),
|
2125
|
+
];
|
2126
|
+
|
2127
|
+
for (i, (v, n, expected)) in cases.into_iter().enumerate() {
|
2128
|
+
let mut res: Vec<Vec<u32>> = vec![];
|
2129
|
+
v.par_iter()
|
2130
|
+
.chunks(n)
|
2131
|
+
.map(|v| v.into_iter().cloned().collect())
|
2132
|
+
.collect_into_vec(&mut res);
|
2133
|
+
assert_eq!(expected, res, "Case {i} failed");
|
2134
|
+
|
2135
|
+
res.truncate(0);
|
2136
|
+
v.into_par_iter().chunks(n).rev().collect_into_vec(&mut res);
|
2137
|
+
assert_eq!(
|
2138
|
+
expected.into_iter().rev().collect::<Vec<Vec<u32>>>(),
|
2139
|
+
res,
|
2140
|
+
"Case {i} reversed failed"
|
2141
|
+
);
|
2142
|
+
}
|
2143
|
+
}
|
2144
|
+
|
2145
|
+
#[test]
|
2146
|
+
#[ignore] // it's quick enough on optimized 32-bit platforms, but otherwise... ... ...
|
2147
|
+
#[should_panic(expected = "overflow")]
|
2148
|
+
#[cfg(debug_assertions)]
|
2149
|
+
fn check_repeat_unbounded() {
|
2150
|
+
// use just one thread, so we don't get infinite adaptive splitting
|
2151
|
+
// (forever stealing and re-splitting jobs that will panic on overflow)
|
2152
|
+
let pool = ThreadPoolBuilder::new().num_threads(1).build().unwrap();
|
2153
|
+
pool.install(|| {
|
2154
|
+
println!("counted {} repeats", repeat(()).count());
|
2155
|
+
});
|
2156
|
+
}
|
2157
|
+
|
2158
|
+
#[test]
|
2159
|
+
fn check_repeat_find_any() {
|
2160
|
+
let even = repeat(4).find_any(|&x| x % 2 == 0);
|
2161
|
+
assert_eq!(even, Some(4));
|
2162
|
+
}
|
2163
|
+
|
2164
|
+
#[test]
|
2165
|
+
fn check_repeat_take() {
|
2166
|
+
let v: Vec<_> = repeat(4).take(4).collect();
|
2167
|
+
assert_eq!(v, [4, 4, 4, 4]);
|
2168
|
+
}
|
2169
|
+
|
2170
|
+
#[test]
|
2171
|
+
fn check_repeat_zip() {
|
2172
|
+
let v = vec![4, 4, 4, 4];
|
2173
|
+
let mut fours: Vec<_> = repeat(4).zip(v).collect();
|
2174
|
+
assert_eq!(fours.len(), 4);
|
2175
|
+
while let Some(item) = fours.pop() {
|
2176
|
+
assert_eq!(item, (4, 4));
|
2177
|
+
}
|
2178
|
+
}
|
2179
|
+
|
2180
|
+
#[test]
|
2181
|
+
fn check_repeat_n_zip_left() {
|
2182
|
+
let v = vec![4, 4, 4, 4];
|
2183
|
+
let mut fours: Vec<_> = repeat_n(4, usize::MAX).zip(v).collect();
|
2184
|
+
assert_eq!(fours.len(), 4);
|
2185
|
+
while let Some(item) = fours.pop() {
|
2186
|
+
assert_eq!(item, (4, 4));
|
2187
|
+
}
|
2188
|
+
}
|
2189
|
+
|
2190
|
+
#[test]
|
2191
|
+
fn check_repeat_n_zip_right() {
|
2192
|
+
let v = vec![4, 4, 4, 4];
|
2193
|
+
let mut fours: Vec<_> = v.into_par_iter().zip(repeat_n(4, usize::MAX)).collect();
|
2194
|
+
assert_eq!(fours.len(), 4);
|
2195
|
+
while let Some(item) = fours.pop() {
|
2196
|
+
assert_eq!(item, (4, 4));
|
2197
|
+
}
|
2198
|
+
}
|
2199
|
+
|
2200
|
+
#[test]
|
2201
|
+
fn count_repeat_n_clones() {
|
2202
|
+
use std::sync::atomic::{AtomicUsize, Ordering};
|
2203
|
+
|
2204
|
+
static CLONES: AtomicUsize = AtomicUsize::new(0);
|
2205
|
+
static DROPS: AtomicUsize = AtomicUsize::new(0);
|
2206
|
+
|
2207
|
+
struct Counter;
|
2208
|
+
|
2209
|
+
impl Clone for Counter {
|
2210
|
+
fn clone(&self) -> Self {
|
2211
|
+
CLONES.fetch_add(1, Ordering::Relaxed);
|
2212
|
+
Counter
|
2213
|
+
}
|
2214
|
+
}
|
2215
|
+
|
2216
|
+
impl Drop for Counter {
|
2217
|
+
fn drop(&mut self) {
|
2218
|
+
DROPS.fetch_add(1, Ordering::Relaxed);
|
2219
|
+
}
|
2220
|
+
}
|
2221
|
+
|
2222
|
+
#[track_caller]
|
2223
|
+
fn check(clones: usize, drops: usize) {
|
2224
|
+
assert_eq!(CLONES.swap(0, Ordering::Relaxed), clones, "clones");
|
2225
|
+
assert_eq!(DROPS.swap(0, Ordering::Relaxed), drops, "drops");
|
2226
|
+
}
|
2227
|
+
|
2228
|
+
drop(repeat_n(Counter, 100));
|
2229
|
+
check(0, 1);
|
2230
|
+
|
2231
|
+
let empty = repeat_n(Counter, 0);
|
2232
|
+
check(0, 1);
|
2233
|
+
let empty2 = empty.clone();
|
2234
|
+
check(0, 0);
|
2235
|
+
assert_eq!(empty.count(), 0);
|
2236
|
+
assert_eq!(empty2.count(), 0);
|
2237
|
+
check(0, 0);
|
2238
|
+
|
2239
|
+
let par_iter = repeat_n(Counter, 100);
|
2240
|
+
let par_iter2 = par_iter.clone();
|
2241
|
+
check(1, 0);
|
2242
|
+
assert_eq!(par_iter.count(), 100);
|
2243
|
+
check(99, 100);
|
2244
|
+
assert_eq!(par_iter2.map(std::mem::forget).count(), 100);
|
2245
|
+
check(99, 0);
|
2246
|
+
|
2247
|
+
// Clone once in `split_at` and again for the first item, leaving its unused tail.
|
2248
|
+
// The other split doesn't have a tail, so it can avoid a clone.
|
2249
|
+
let step99 = repeat_n(Counter, 100).step_by(99);
|
2250
|
+
assert_eq!(step99.count(), 2);
|
2251
|
+
check(2, 3);
|
2252
|
+
|
2253
|
+
// Same without any parallel splitting
|
2254
|
+
let step99 = repeat_n(Counter, 100).step_by(99).with_min_len(2);
|
2255
|
+
assert_eq!(step99.count(), 2);
|
2256
|
+
check(1, 2);
|
2257
|
+
|
2258
|
+
// Clone once in `split_at` and again for both items, leaving both unused tails.
|
2259
|
+
let step50 = repeat_n(Counter, 100).step_by(50);
|
2260
|
+
assert_eq!(step50.count(), 2);
|
2261
|
+
check(3, 4);
|
2262
|
+
}
|
2263
|
+
|
2264
|
+
#[test]
|
2265
|
+
fn check_empty() {
|
2266
|
+
// drive_unindexed
|
2267
|
+
let mut v: Vec<i32> = empty().filter(|_| unreachable!()).collect();
|
2268
|
+
assert!(v.is_empty());
|
2269
|
+
|
2270
|
+
// drive (indexed)
|
2271
|
+
empty().collect_into_vec(&mut v);
|
2272
|
+
assert!(v.is_empty());
|
2273
|
+
|
2274
|
+
// with_producer
|
2275
|
+
let v: Vec<(i32, i32)> = empty().zip(1..10).collect();
|
2276
|
+
assert!(v.is_empty());
|
2277
|
+
}
|
2278
|
+
|
2279
|
+
#[test]
|
2280
|
+
fn check_once() {
|
2281
|
+
// drive_unindexed
|
2282
|
+
let mut v: Vec<i32> = once(42).filter(|_| true).collect();
|
2283
|
+
assert_eq!(v, &[42]);
|
2284
|
+
|
2285
|
+
// drive (indexed)
|
2286
|
+
once(42).collect_into_vec(&mut v);
|
2287
|
+
assert_eq!(v, &[42]);
|
2288
|
+
|
2289
|
+
// with_producer
|
2290
|
+
let v: Vec<(i32, i32)> = once(42).zip(1..10).collect();
|
2291
|
+
assert_eq!(v, &[(42, 1)]);
|
2292
|
+
}
|
2293
|
+
|
2294
|
+
#[test]
|
2295
|
+
fn check_update() {
|
2296
|
+
let mut v: Vec<Vec<_>> = vec![vec![1], vec![3, 2, 1]];
|
2297
|
+
v.par_iter_mut().update(|v| v.push(0)).for_each(|_| ());
|
2298
|
+
|
2299
|
+
assert_eq!(v, vec![vec![1, 0], vec![3, 2, 1, 0]]);
|
2300
|
+
}
|
2301
|
+
|
2302
|
+
#[test]
|
2303
|
+
fn walk_tree_prefix() {
|
2304
|
+
let v: Vec<u32> = crate::iter::walk_tree_prefix(0u32..100, |r| {
|
2305
|
+
// root is smallest
|
2306
|
+
let mid = (r.start + 1 + r.end) / 2;
|
2307
|
+
// small indices to the left, large to the right
|
2308
|
+
std::iter::once((r.start + 1)..mid)
|
2309
|
+
.chain(std::iter::once(mid..r.end))
|
2310
|
+
.filter(|r| !r.is_empty())
|
2311
|
+
})
|
2312
|
+
.map(|r| r.start)
|
2313
|
+
.collect();
|
2314
|
+
assert!(v.into_iter().eq(0..100));
|
2315
|
+
}
|
2316
|
+
|
2317
|
+
#[test]
|
2318
|
+
fn walk_tree_postfix() {
|
2319
|
+
let v: Vec<_> = crate::iter::walk_tree_postfix(0u64..100, |r| {
|
2320
|
+
// root is largest
|
2321
|
+
let mid = (r.start + r.end - 1) / 2;
|
2322
|
+
// small indices to the left, large to the right
|
2323
|
+
std::iter::once(r.start..mid)
|
2324
|
+
.chain(std::iter::once(mid..(r.end - 1)))
|
2325
|
+
.filter(|r| !r.is_empty())
|
2326
|
+
})
|
2327
|
+
.map(|r| r.end - 1)
|
2328
|
+
.collect();
|
2329
|
+
assert!(v.into_iter().eq(0..100));
|
2330
|
+
}
|
2331
|
+
|
2332
|
+
#[test]
|
2333
|
+
fn walk_flat_tree_prefix() {
|
2334
|
+
let v: Vec<_> =
|
2335
|
+
crate::iter::walk_tree_prefix(0, |&e| if e < 99 { Some(e + 1) } else { None }).collect();
|
2336
|
+
assert!(v.into_iter().eq(0..100));
|
2337
|
+
}
|
2338
|
+
|
2339
|
+
#[test]
|
2340
|
+
fn walk_flat_tree_postfix() {
|
2341
|
+
let v: Vec<_> =
|
2342
|
+
crate::iter::walk_tree_postfix(99, |&e| if e > 0 { Some(e - 1) } else { None }).collect();
|
2343
|
+
assert!(v.into_iter().eq(0..100));
|
2344
|
+
}
|
2345
|
+
|
2346
|
+
#[test]
|
2347
|
+
fn walk_tree_prefix_degree5() {
|
2348
|
+
let depth = 5;
|
2349
|
+
let nodes_number = (1 - 5i32.pow(depth)) / (1 - 5);
|
2350
|
+
let nodes = (0..nodes_number).collect::<Vec<_>>();
|
2351
|
+
let v: Vec<i32> = crate::iter::walk_tree_prefix(nodes.as_slice(), |&r| {
|
2352
|
+
r.split_first()
|
2353
|
+
.into_iter()
|
2354
|
+
.filter_map(|(_, r)| if r.is_empty() { None } else { Some(r) })
|
2355
|
+
.flat_map(|r| r.chunks(r.len() / 5))
|
2356
|
+
})
|
2357
|
+
.filter_map(|r| r.first().copied())
|
2358
|
+
.collect();
|
2359
|
+
assert_eq!(v, nodes);
|
2360
|
+
}
|
2361
|
+
|
2362
|
+
#[test]
|
2363
|
+
fn walk_tree_postfix_degree5() {
|
2364
|
+
let depth = 5;
|
2365
|
+
let nodes_number = (1 - 5i32.pow(depth)) / (1 - 5);
|
2366
|
+
let nodes = (0..nodes_number).collect::<Vec<_>>();
|
2367
|
+
let v: Vec<i32> = crate::iter::walk_tree_postfix(nodes.as_slice(), |&r| {
|
2368
|
+
r.split_last()
|
2369
|
+
.into_iter()
|
2370
|
+
.filter_map(|(_, r)| if r.is_empty() { None } else { Some(r) })
|
2371
|
+
.flat_map(|r| r.chunks(r.len() / 5))
|
2372
|
+
})
|
2373
|
+
.filter_map(|r| r.last().copied())
|
2374
|
+
.collect();
|
2375
|
+
assert_eq!(v, nodes)
|
2376
|
+
}
|
2377
|
+
|
2378
|
+
#[test]
|
2379
|
+
fn blocks() {
|
2380
|
+
let count = AtomicUsize::new(0);
|
2381
|
+
let v: Vec<usize> = (0..1000)
|
2382
|
+
.into_par_iter()
|
2383
|
+
.map(|_| count.fetch_add(1, Ordering::Relaxed))
|
2384
|
+
.by_uniform_blocks(100)
|
2385
|
+
.collect();
|
2386
|
+
let m = v
|
2387
|
+
.chunks(100)
|
2388
|
+
.map(|c| c.iter().max().copied().unwrap())
|
2389
|
+
.collect::<Vec<usize>>();
|
2390
|
+
assert!(m.windows(2).all(|w| w[0].lt(&w[1])));
|
2391
|
+
assert_eq!(v.len(), 1000);
|
2392
|
+
}
|