Upgrade futures-test to 0.3.30 am: fe1da41207

Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/futures-test/+/2943535

Change-Id: I67d958df374a8fe71e82c40420b5910e4db20f02
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index f986bf2..941a78c 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,6 +1,6 @@
 {
   "git": {
-    "sha1": "5e3693a350f96244151081d2c030208cd15f9572"
+    "sha1": "de1a0fd64a1bcae9a1534ed4da1699632993cc26"
   },
   "path_in_vcs": "futures-test"
 }
\ No newline at end of file
diff --git a/Android.bp b/Android.bp
index 994a5b8..c8a007f 100644
--- a/Android.bp
+++ b/Android.bp
@@ -42,7 +42,7 @@
     host_supported: true,
     crate_name: "futures_test",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.3.26",
+    cargo_pkg_version: "0.3.30",
     srcs: ["src/lib.rs"],
     test_suites: ["general-tests"],
     auto_gen_config: true,
@@ -72,7 +72,7 @@
     host_supported: true,
     crate_name: "futures_test",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.3.26",
+    cargo_pkg_version: "0.3.30",
     srcs: ["src/lib.rs"],
     edition: "2018",
     features: [
diff --git a/Cargo.toml b/Cargo.toml
index 5b26e48..bb3c4a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,9 +11,9 @@
 
 [package]
 edition = "2018"
-rust-version = "1.45"
+rust-version = "1.56"
 name = "futures-test"
-version = "0.3.26"
+version = "0.3.30"
 description = """
 Common utilities for testing components built off futures-rs.
 """
@@ -26,31 +26,31 @@
 all-features = true
 
 [dependencies.futures-core]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.futures-executor]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.futures-io]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.futures-macro]
-version = "=0.3.26"
+version = "=0.3.30"
 default-features = false
 
 [dependencies.futures-sink]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.futures-task]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.futures-util]
-version = "0.3.26"
+version = "0.3.30"
 default-features = false
 
 [dependencies.pin-project]
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index e2ae339..8499e03 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,8 +1,8 @@
 [package]
 name = "futures-test"
-version = "0.3.26"
+version = "0.3.30"
 edition = "2018"
-rust-version = "1.45"
+rust-version = "1.56"
 license = "MIT OR Apache-2.0"
 repository = "https://github.com/rust-lang/futures-rs"
 homepage = "https://rust-lang.github.io/futures-rs"
@@ -11,13 +11,13 @@
 """
 
 [dependencies]
-futures-core = { version = "0.3.26", path = "../futures-core", default-features = false }
-futures-task = { version = "0.3.26", path = "../futures-task", default-features = false }
-futures-io = { version = "0.3.26", path = "../futures-io", default-features = false }
-futures-util = { version = "0.3.26", path = "../futures-util", default-features = false }
-futures-executor = { version = "0.3.26", path = "../futures-executor", default-features = false }
-futures-sink = { version = "0.3.26", path = "../futures-sink", default-features = false }
-futures-macro = { version = "=0.3.26", path = "../futures-macro", default-features = false }
+futures-core = { version = "0.3.30", path = "../futures-core", default-features = false }
+futures-task = { version = "0.3.30", path = "../futures-task", default-features = false }
+futures-io = { version = "0.3.30", path = "../futures-io", default-features = false }
+futures-util = { version = "0.3.30", path = "../futures-util", default-features = false }
+futures-executor = { version = "0.3.30", path = "../futures-executor", default-features = false }
+futures-sink = { version = "0.3.30", path = "../futures-sink", default-features = false }
+futures-macro = { version = "=0.3.30", path = "../futures-macro", default-features = false }
 pin-utils = { version = "0.1.0", default-features = false }
 pin-project = "1.0.11"
 
diff --git a/METADATA b/METADATA
index 4a885db..b20fd3a 100644
--- a/METADATA
+++ b/METADATA
@@ -1,23 +1,20 @@
 # This project was upgraded with external_updater.
-# Usage: tools/external_updater/updater.sh update rust/crates/futures-test
-# For more info, check https://cs.android.com/android/platform/superproject/+/master:tools/external_updater/README.md
+# Usage: tools/external_updater/updater.sh update external/rust/crates/futures-test
+# For more info, check https://cs.android.com/android/platform/superproject/+/main:tools/external_updater/README.md
 
 name: "futures-test"
 description: "()"
 third_party {
-  url {
-    type: HOMEPAGE
-    value: "https://crates.io/crates/futures-test"
-  }
-  url {
-    type: ARCHIVE
-    value: "https://static.crates.io/crates/futures-test/futures-test-0.3.26.crate"
-  }
-  version: "0.3.26"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2023
+    year: 2024
     month: 2
-    day: 15
+    day: 1
+  }
+  homepage: "https://crates.io/crates/futures-test"
+  identifier {
+    type: "Archive"
+    value: "https://static.crates.io/crates/futures-test/futures-test-0.3.30.crate"
+    version: "0.3.30"
   }
 }
diff --git a/README.md b/README.md
index b3c30e5..34595aa 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@
 futures-test = "0.3"
 ```
 
-The current `futures-test` requires Rust 1.45 or later.
+The current `futures-test` requires Rust 1.56 or later.
 
 ## License
 
diff --git a/src/assert_unmoved.rs b/src/assert_unmoved.rs
index 95d9a09..baeaeb5 100644
--- a/src/assert_unmoved.rs
+++ b/src/assert_unmoved.rs
@@ -7,7 +7,6 @@
 use futures_sink::Sink;
 use pin_project::{pin_project, pinned_drop};
 use std::pin::Pin;
-use std::ptr;
 use std::thread::panicking;
 
 /// Combinator that asserts that the underlying type is not moved after being polled.
@@ -24,26 +23,21 @@
 pub struct AssertUnmoved<T> {
     #[pin]
     inner: T,
-    this_ptr: *const Self,
+    this_addr: usize,
 }
 
-// Safety: having a raw pointer in a struct makes it `!Send`, however the
-// pointer is never dereferenced so this is safe.
-unsafe impl<T: Send> Send for AssertUnmoved<T> {}
-unsafe impl<T: Sync> Sync for AssertUnmoved<T> {}
-
 impl<T> AssertUnmoved<T> {
     pub(crate) fn new(inner: T) -> Self {
-        Self { inner, this_ptr: ptr::null() }
+        Self { inner, this_addr: 0 }
     }
 
     fn poll_with<'a, U>(mut self: Pin<&'a mut Self>, f: impl FnOnce(Pin<&'a mut T>) -> U) -> U {
-        let cur_this = &*self as *const Self;
-        if self.this_ptr.is_null() {
+        let cur_this = &*self as *const Self as usize;
+        if self.this_addr == 0 {
             // First time being polled
-            *self.as_mut().project().this_ptr = cur_this;
+            *self.as_mut().project().this_addr = cur_this;
         } else {
-            assert_eq!(self.this_ptr, cur_this, "AssertUnmoved moved between poll calls");
+            assert_eq!(self.this_addr, cur_this, "AssertUnmoved moved between poll calls");
         }
         f(self.project().inner)
     }
@@ -166,9 +160,9 @@
     fn drop(self: Pin<&mut Self>) {
         // If the thread is panicking then we can't panic again as that will
         // cause the process to be aborted.
-        if !panicking() && !self.this_ptr.is_null() {
-            let cur_this = &*self as *const Self;
-            assert_eq!(self.this_ptr, cur_this, "AssertUnmoved moved before drop");
+        if !panicking() && self.this_addr != 0 {
+            let cur_this = &*self as *const Self as usize;
+            assert_eq!(self.this_addr, cur_this, "AssertUnmoved moved before drop");
         }
     }
 }
diff --git a/src/lib.rs b/src/lib.rs
index 2eb4a1c..49f8348 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -61,7 +61,7 @@
 mod track_closed;
 
 /// Enables an `async` test function. The generated future will be run to completion with
-/// [`futures_executor::block_on`](futures_executor::block_on).
+/// [`futures_executor::block_on`].
 ///
 /// ```
 /// #[futures_test::test]
diff --git a/src/task/mod.rs b/src/task/mod.rs
index cec645d..e10ecbb 100644
--- a/src/task/mod.rs
+++ b/src/task/mod.rs
@@ -15,29 +15,29 @@
 //! [`Spawn`](futures_task::Spawn) implementations.
 //!
 //! Test contexts:
-//! - [`noop_context`](crate::task::noop_context) creates a context that ignores calls to
+//! - [`noop_context`] creates a context that ignores calls to
 //!   [`cx.waker().wake_by_ref()`](futures_core::task::Waker).
-//! - [`panic_context`](crate::task::panic_context) creates a context that panics when
+//! - [`panic_context`] creates a context that panics when
 //!   [`cx.waker().wake_by_ref()`](futures_core::task::Waker) is called.
 //!
 //! Test wakers:
-//! - [`noop_waker`](crate::task::noop_waker) creates a waker that ignores calls to
+//! - [`noop_waker`] creates a waker that ignores calls to
 //!   [`wake`](futures_core::task::Waker).
-//! - [`panic_waker`](crate::task::panic_waker) creates a waker that panics when
+//! - [`panic_waker`](panic_waker()) creates a waker that panics when
 //!   [`wake`](futures_core::task::Waker) is called.
-//! - [`new_count_waker`](crate::task::new_count_waker) creates a waker that increments a counter whenever
+//! - [`new_count_waker`] creates a waker that increments a counter whenever
 //!   [`wake`](futures_core::task::Waker) is called.
 //!
 //! Test spawners:
-//! - [`NoopSpawner`](crate::task::NoopSpawner) ignores calls to
+//! - [`NoopSpawner`] ignores calls to
 //!   [`spawn`](futures_util::task::SpawnExt::spawn)
-//! - [`PanicSpawner`](crate::task::PanicSpawner) panics if [`spawn`](futures_util::task::SpawnExt::spawn) is
+//! - [`PanicSpawner`] panics if [`spawn`](futures_util::task::SpawnExt::spawn) is
 //!   called.
-//! - [`RecordSpawner`](crate::task::RecordSpawner) records the spawned futures.
+//! - [`RecordSpawner`] records the spawned futures.
 //!
 //! For convenience there additionally exist various functions that directly
-//! return waker/spawner references: [`noop_waker_ref`](crate::task::noop_waker_ref),
-//! [`panic_waker_ref`](crate::task::panic_waker_ref), [`noop_spawner_mut`](crate::task::noop_spawner_mut) and [`panic_spawner_mut`](crate::task::panic_spawner_mut).
+//! return waker/spawner references: [`noop_waker_ref`], [`panic_waker_ref`],
+//! [`noop_spawner_mut`] and [`panic_spawner_mut`].
 
 mod context;
 pub use self::context::{noop_context, panic_context};