From 729aa75e560e57b0b8b605a3629167fd6be98cc1 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Wed, 28 Oct 2015 22:09:27 -0400 Subject: [PATCH 1/2] Implement Eq for Thread --- src/libstd/thread/mod.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index 9b8f63997b64..447d396a99d6 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -535,6 +535,15 @@ impl Thread { } } +impl PartialEq for Thread { + fn eq(&self, other: &Thread) -> bool { + // Compare the Arcs + (&*self.inner as *const Inner) == (&*other.inner as *const Inner) + } +} + +impl Eq for Thread {} + #[stable(feature = "rust1", since = "1.0.0")] impl fmt::Debug for Thread { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { From 8ffb7244de436abdbd62b50cd75efea05623b670 Mon Sep 17 00:00:00 2001 From: Remi Rampin Date: Thu, 29 Oct 2015 14:14:51 -0400 Subject: [PATCH 2/2] Add tests for Thread::eq() --- src/libstd/thread/mod.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index 447d396a99d6..3aca247c17ee 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -665,6 +665,20 @@ mod tests { }).unwrap().join().unwrap(); } + #[test] + fn test_thread_eq() { + let (tx, rx) = channel(); + let t1 = thread::spawn(move|| { + tx.send(thread::current()).unwrap(); + }).thread(); + let t2 = rx.recv().unwrap(); + let t3 = thread::spawn(move|| { + }).thread(); + assert!(t1 == t1); + assert!(t1 == t2); + assert!(t1 != t3); + } + #[test] fn test_run_basic() { let (tx, rx) = channel();