diff options
| author | Anders Kaseorg <andersk@mit.edu> | 2017-07-03 17:18:01 -0400 |
|---|---|---|
| committer | Anders Kaseorg <andersk@mit.edu> | 2017-07-03 18:38:53 -0400 |
| commit | d68c3ab17b6f6c3b71d0531063aec8e64098f59c (patch) | |
| tree | a0982968fd07326593d8a54b5e38d59c309fb3a2 /src/liballoc/tests | |
| parent | 734c83642cff23f0d9b4b8f006b05437697bcd91 (diff) | |
| download | rust-d68c3ab17b6f6c3b71d0531063aec8e64098f59c.tar.gz rust-d68c3ab17b6f6c3b71d0531063aec8e64098f59c.zip | |
Document unintuitive argument order for Vec::dedup_by relation
When trying to use dedup_by to merge some auxiliary information from removed elements into kept elements, I was surprised to observe that vec.dedup_by(same_bucket) calls same_bucket(a, b) where b appears before a in the vector, and discards a when true is returned. This argument order is probably a bug, but since it has already been stabilized, I guess we should document it as a feature and move on. (Vec::dedup also uses == with this unexpected argument order, but I figure that’s not important since == is expected to be symmetric with no side effects.) Signed-off-by: Anders Kaseorg <andersk@mit.edu>
Diffstat (limited to 'src/liballoc/tests')
| -rw-r--r-- | src/liballoc/tests/vec.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/liballoc/tests/vec.rs b/src/liballoc/tests/vec.rs index fdf453b39cf..17f1229c206 100644 --- a/src/liballoc/tests/vec.rs +++ b/src/liballoc/tests/vec.rs @@ -274,6 +274,11 @@ fn test_dedup_by() { vec.dedup_by(|a, b| a.eq_ignore_ascii_case(b)); assert_eq!(vec, ["foo", "bar", "baz", "bar"]); + + let mut vec = vec![("foo", 1), ("foo", 2), ("bar", 3), ("bar", 4), ("bar", 5)]; + vec.dedup_by(|a, b| a.0 == b.0 && { b.1 += a.1; true }); + + assert_eq!(vec, [("foo", 3), ("bar", 12)]); } #[test] |
