Snap for 8730993 from 0249166812f2b30a4b7e29165f25c83932755809 to mainline-tzdata3-release
Change-Id: I94f9214ba4f13716083e6c8c0083e096600816b2
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 3f828db..89ad255 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
{
"git": {
- "sha1": "491feb0b3f9805f7548a459ac32ab24914e12db2"
+ "sha1": "a244c741ac60333e3c37298fffdbfc1aa5f3c0d6"
}
}
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 12fde18..9116b38 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -35,17 +35,17 @@
command: cargo build --all --all-targets
- run:
name: Run all tests
- command: cargo test --all --all-features
+ command: cargo test --all
- run:
name: Run all tests under miri
command: |
- cargo +nightly miri test --all-features
+ cargo +nightly miri test
- run:
name: Run all tests under sanitizers
command: |
- RUSTFLAGS="-Z sanitizer=address" cargo +nightly -Z build-std test --target x86_64-unknown-linux-gnu --all-features
- RUSTFLAGS="-Z sanitizer=leak" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu --all-features
- RUSTFLAGS="-Z sanitizer=memory" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu --all-features
+ RUSTFLAGS="-Z sanitizer=address" cargo +nightly -Z build-std test --target x86_64-unknown-linux-gnu
+ RUSTFLAGS="-Z sanitizer=leak" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu
+ RUSTFLAGS="-Z sanitizer=memory" cargo +nightly test -Z build-std --target x86_64-unknown-linux-gnu
- save_cache:
paths:
- /usr/local/cargo/registry
diff --git a/Android.bp b/Android.bp
index 260ac53..f365f34 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,5 +1,4 @@
-// This file is generated by cargo2android.py --config cargo2android.json.
-// Do not modify this file as changes will be overridden on upgrade.
+// This file is generated by cargo2android.py --device --run --dependencies.
package {
default_applicable_licenses: ["external_rust_crates_hashlink_license"],
@@ -41,11 +40,13 @@
name: "libhashlink",
host_supported: true,
crate_name: "hashlink",
- cargo_env_compat: true,
- cargo_pkg_version: "0.7.0",
srcs: ["src/lib.rs"],
edition: "2018",
rustlibs: [
"libhashbrown",
],
}
+
+// dependent_library ["feature_list"]
+// ahash-0.4.6
+// hashbrown-0.9.1 "ahash,default,inline-more"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 54c2bbe..12963ea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,11 +1,3 @@
-## [0.7.0
-- API incompatible change: depend on hashbrown 0.11, changes re-exported types.
-- Fix `LinkedHashSet::back` to take `&self` not `&mut self`.
-- API incompatible change: equality tests on `LinkedHashSet` are now *ordered*,
- similar to `LinkedHashMap`.
-- Make the serde `Deserialize` implementations on `LinkedHashMap` and
- `LinkedHashSet` generic on the `BuildHasher` type.
-
## [0.6.0]
- API incompatible change: depend on hashbrown 0.9, re-export renamed
hashbrown::TryReserveError type.
diff --git a/Cargo.toml b/Cargo.toml
index 92db926..6a5a2d4 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
[package]
edition = "2018"
name = "hashlink"
-version = "0.7.0"
+version = "0.6.0"
authors = ["kyren <kerriganw@gmail.com>"]
description = "HashMap-like containers that hold their key-value pairs in a user controllable order"
documentation = "https://docs.rs/hashlink"
@@ -22,14 +22,11 @@
license = "MIT OR Apache-2.0"
repository = "https://github.com/kyren/hashlink"
[dependencies.hashbrown]
-version = "0.11.0"
+version = "0.9.0"
[dependencies.serde]
version = "1.0"
optional = true
-[dev-dependencies.fxhash]
-version = "0.2.1"
-
[dev-dependencies.serde_test]
version = "1.0"
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index c6de186..6ad661b 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
[package]
name = "hashlink"
-version = "0.7.0"
+version = "0.6.0"
authors = ["kyren <kerriganw@gmail.com>"]
edition = "2018"
description = "HashMap-like containers that hold their key-value pairs in a user controllable order"
@@ -17,9 +17,8 @@
serde_impl = ["serde"]
[dependencies]
-hashbrown = "0.11.0"
+hashbrown = "0.9.0"
serde = { version = "1.0", optional = true }
[dev-dependencies]
serde_test = "1.0"
-fxhash = "0.2.1"
diff --git a/METADATA b/METADATA
index 1aeaa1e..d38b627 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
}
url {
type: ARCHIVE
- value: "https://static.crates.io/crates/hashlink/hashlink-0.7.0.crate"
+ value: "https://static.crates.io/crates/hashlink/hashlink-0.6.0.crate"
}
- version: "0.7.0"
+ version: "0.6.0"
license_type: NOTICE
last_upgrade_date {
- year: 2021
- month: 5
- day: 19
+ year: 2020
+ month: 11
+ day: 9
}
}
diff --git a/TEST_MAPPING b/TEST_MAPPING
deleted file mode 100644
index 91f37bf..0000000
--- a/TEST_MAPPING
+++ /dev/null
@@ -1,19 +0,0 @@
-// Generated by update_crate_tests.py for tests that depend on this crate.
-{
- "presubmit": [
- {
- "name": "keystore2_test"
- },
- {
- "name": "legacykeystore_test"
- }
- ],
- "presubmit-rust": [
- {
- "name": "keystore2_test"
- },
- {
- "name": "legacykeystore_test"
- }
- ]
-}
diff --git a/cargo2android.json b/cargo2android.json
deleted file mode 100644
index bf78496..0000000
--- a/cargo2android.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "device": true,
- "run": true
-}
\ No newline at end of file
diff --git a/src/linked_hash_map.rs b/src/linked_hash_map.rs
index 191844c..32733ea 100644
--- a/src/linked_hash_map.rs
+++ b/src/linked_hash_map.rs
@@ -441,40 +441,6 @@
}
}
}
-
- /// If an entry with this key exists, move it to the front of the list and return a reference to
- /// the value.
- #[inline]
- pub fn to_front<Q>(&mut self, k: &Q) -> Option<&mut V>
- where
- K: Borrow<Q>,
- Q: Hash + Eq + ?Sized,
- {
- match self.raw_entry_mut().from_key(k) {
- RawEntryMut::Occupied(mut occupied) => {
- occupied.to_front();
- Some(occupied.into_mut())
- }
- RawEntryMut::Vacant(_) => None,
- }
- }
-
- /// If an entry with this key exists, move it to the back of the list and return a reference to
- /// the value.
- #[inline]
- pub fn to_back<Q>(&mut self, k: &Q) -> Option<&mut V>
- where
- K: Borrow<Q>,
- Q: Hash + Eq + ?Sized,
- {
- match self.raw_entry_mut().from_key(k) {
- RawEntryMut::Occupied(mut occupied) => {
- occupied.to_back();
- Some(occupied.into_mut())
- }
- RawEntryMut::Vacant(_) => None,
- }
- }
}
impl<K, V, S> LinkedHashMap<K, V, S>
diff --git a/src/linked_hash_set.rs b/src/linked_hash_set.rs
index f55f6c5..1ab7dbb 100644
--- a/src/linked_hash_set.rs
+++ b/src/linked_hash_set.rs
@@ -250,7 +250,7 @@
}
#[inline]
- pub fn back(&self) -> Option<&T> {
+ pub fn back(&mut self) -> Option<&T> {
self.map.back().map(|(k, _)| k)
}
@@ -304,8 +304,12 @@
S: BuildHasher,
{
#[inline]
- fn eq(&self, other: &Self) -> bool {
- self.len() == other.len() && self.iter().eq(other)
+ fn eq(&self, other: &LinkedHashSet<T, S>) -> bool {
+ if self.len() != other.len() {
+ return false;
+ }
+
+ self.iter().all(|key| other.contains(key))
}
}
diff --git a/src/serde.rs b/src/serde.rs
index f44ebb3..b8e307c 100644
--- a/src/serde.rs
+++ b/src/serde.rs
@@ -31,59 +31,54 @@
}
}
-impl<'de, K, V, S> Deserialize<'de> for LinkedHashMap<K, V, S>
+#[derive(Debug)]
+pub struct LinkedHashMapVisitor<K, V> {
+ marker: PhantomData<LinkedHashMap<K, V>>,
+}
+
+impl<K, V> LinkedHashMapVisitor<K, V> {
+ fn new() -> Self {
+ LinkedHashMapVisitor {
+ marker: PhantomData,
+ }
+ }
+}
+
+impl<K, V> Default for LinkedHashMapVisitor<K, V> {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl<'de, K, V> Visitor<'de> for LinkedHashMapVisitor<K, V>
where
K: Deserialize<'de> + Eq + Hash,
V: Deserialize<'de>,
- S: BuildHasher + Default,
+{
+ type Value = LinkedHashMap<K, V>;
+
+ fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
+ write!(formatter, "a map")
+ }
+
+ #[inline]
+ fn visit_map<M: MapAccess<'de>>(self, mut map: M) -> Result<Self::Value, M::Error> {
+ let mut values = LinkedHashMap::with_capacity(map.size_hint().unwrap_or(0));
+
+ while let Some((k, v)) = map.next_entry()? {
+ values.insert(k, v);
+ }
+
+ Ok(values)
+ }
+}
+
+impl<'de, K, V> Deserialize<'de> for LinkedHashMap<K, V>
+where
+ K: Deserialize<'de> + Eq + Hash,
+ V: Deserialize<'de>,
{
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
- #[derive(Debug)]
- pub struct LinkedHashMapVisitor<K, V, S> {
- marker: PhantomData<LinkedHashMap<K, V, S>>,
- }
-
- impl<K, V, S> LinkedHashMapVisitor<K, V, S> {
- fn new() -> Self {
- LinkedHashMapVisitor {
- marker: PhantomData,
- }
- }
- }
-
- impl<K, V, S> Default for LinkedHashMapVisitor<K, V, S> {
- fn default() -> Self {
- Self::new()
- }
- }
-
- impl<'de, K, V, S> Visitor<'de> for LinkedHashMapVisitor<K, V, S>
- where
- K: Deserialize<'de> + Eq + Hash,
- V: Deserialize<'de>,
- S: BuildHasher + Default,
- {
- type Value = LinkedHashMap<K, V, S>;
-
- fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
- write!(formatter, "a map")
- }
-
- #[inline]
- fn visit_map<M: MapAccess<'de>>(self, mut map: M) -> Result<Self::Value, M::Error> {
- let mut values = LinkedHashMap::with_capacity_and_hasher(
- map.size_hint().unwrap_or(0),
- S::default(),
- );
-
- while let Some((k, v)) = map.next_entry()? {
- values.insert(k, v);
- }
-
- Ok(values)
- }
- }
-
deserializer.deserialize_map(LinkedHashMapVisitor::default())
}
}
@@ -105,57 +100,52 @@
}
}
-impl<'de, T, S> Deserialize<'de> for LinkedHashSet<T, S>
+#[derive(Debug)]
+pub struct LinkedHashSetVisitor<T> {
+ marker: PhantomData<LinkedHashSet<T>>,
+}
+
+impl<T> LinkedHashSetVisitor<T> {
+ fn new() -> Self {
+ LinkedHashSetVisitor {
+ marker: PhantomData,
+ }
+ }
+}
+
+impl<T> Default for LinkedHashSetVisitor<T> {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl<'de, T> Visitor<'de> for LinkedHashSetVisitor<T>
where
T: Deserialize<'de> + Eq + Hash,
- S: BuildHasher + Default,
+{
+ type Value = LinkedHashSet<T>;
+
+ fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
+ write!(formatter, "a sequence")
+ }
+
+ #[inline]
+ fn visit_seq<S: SeqAccess<'de>>(self, mut seq: S) -> Result<Self::Value, S::Error> {
+ let mut values = LinkedHashSet::with_capacity(seq.size_hint().unwrap_or(0));
+
+ while let Some(v) = seq.next_element()? {
+ values.insert(v);
+ }
+
+ Ok(values)
+ }
+}
+
+impl<'de, T> Deserialize<'de> for LinkedHashSet<T>
+where
+ T: Deserialize<'de> + Eq + Hash,
{
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
- #[derive(Debug)]
- pub struct LinkedHashSetVisitor<T, S> {
- marker: PhantomData<LinkedHashSet<T, S>>,
- }
-
- impl<T, S> LinkedHashSetVisitor<T, S> {
- fn new() -> Self {
- LinkedHashSetVisitor {
- marker: PhantomData,
- }
- }
- }
-
- impl<T, S> Default for LinkedHashSetVisitor<T, S> {
- fn default() -> Self {
- Self::new()
- }
- }
-
- impl<'de, T, S> Visitor<'de> for LinkedHashSetVisitor<T, S>
- where
- T: Deserialize<'de> + Eq + Hash,
- S: BuildHasher + Default,
- {
- type Value = LinkedHashSet<T, S>;
-
- fn expecting(&self, formatter: &mut Formatter) -> fmt::Result {
- write!(formatter, "a sequence")
- }
-
- #[inline]
- fn visit_seq<SA: SeqAccess<'de>>(self, mut seq: SA) -> Result<Self::Value, SA::Error> {
- let mut values = LinkedHashSet::with_capacity_and_hasher(
- seq.size_hint().unwrap_or(0),
- S::default(),
- );
-
- while let Some(v) = seq.next_element()? {
- values.insert(v);
- }
-
- Ok(values)
- }
- }
-
deserializer.deserialize_seq(LinkedHashSetVisitor::default())
}
}
diff --git a/tests/linked_hash_map.rs b/tests/linked_hash_map.rs
index fbd3d2e..19dcc00 100644
--- a/tests/linked_hash_map.rs
+++ b/tests/linked_hash_map.rs
@@ -496,18 +496,3 @@
drop(map);
assert!(c.get() == 4);
}
-
-#[test]
-fn test_order_equality() {
- let xs = [1, 2, 3, 4, 5, 6];
- let mut map1: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
- let mut map2: LinkedHashMap<String, i32> = xs.iter().map(|i| (i.to_string(), *i)).collect();
-
- assert_eq!(map1, map2);
-
- map1.to_front("4");
- assert_ne!(map1, map2);
-
- map2.to_front("4");
- assert_eq!(map1, map2);
-}
diff --git a/tests/linked_hash_set.rs b/tests/linked_hash_set.rs
index cb75887..13cceae 100644
--- a/tests/linked_hash_set.rs
+++ b/tests/linked_hash_set.rs
@@ -510,18 +510,3 @@
set.to_front(&3);
assert_eq!(set.front().copied(), Some(3));
}
-
-#[test]
-fn test_order_equality() {
- let xs = [1, 2, 3, 4, 5, 6];
- let mut set1: LinkedHashSet<i32> = xs.iter().copied().collect();
- let mut set2: LinkedHashSet<i32> = xs.iter().copied().collect();
-
- assert_eq!(set1, set2);
-
- set1.to_front(&4);
- assert_ne!(set1, set2);
-
- set2.to_front(&4);
- assert_eq!(set1, set2);
-}
diff --git a/tests/serde.rs b/tests/serde.rs
index d397a24..fce3108 100644
--- a/tests/serde.rs
+++ b/tests/serde.rs
@@ -1,6 +1,5 @@
#![cfg(feature = "serde_impl")]
-use fxhash::FxBuildHasher;
use hashlink::{LinkedHashMap, LinkedHashSet};
use serde_test::{assert_tokens, Token};
@@ -34,35 +33,6 @@
}
#[test]
-fn map_serde_tokens_empty_generic() {
- let map = LinkedHashMap::<char, u32, FxBuildHasher>::with_hasher(FxBuildHasher::default());
-
- assert_tokens(&map, &[Token::Map { len: Some(0) }, Token::MapEnd]);
-}
-
-#[test]
-fn map_serde_tokens_generic() {
- let mut map = LinkedHashMap::with_hasher(FxBuildHasher::default());
- map.insert('a', 10);
- map.insert('b', 20);
- map.insert('c', 30);
-
- assert_tokens(
- &map,
- &[
- Token::Map { len: Some(3) },
- Token::Char('a'),
- Token::I32(10),
- Token::Char('b'),
- Token::I32(20),
- Token::Char('c'),
- Token::I32(30),
- Token::MapEnd,
- ],
- );
-}
-
-#[test]
fn set_serde_tokens_empty() {
let set = LinkedHashSet::<u32>::new();
@@ -87,22 +57,3 @@
],
);
}
-
-#[test]
-fn set_serde_tokens_generic() {
- let mut set = LinkedHashSet::with_hasher(FxBuildHasher::default());
- set.insert('a');
- set.insert('b');
- set.insert('c');
-
- assert_tokens(
- &set,
- &[
- Token::Seq { len: Some(3) },
- Token::Char('a'),
- Token::Char('b'),
- Token::Char('c'),
- Token::SeqEnd,
- ],
- );
-}