diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index 9b8f63997b642..3aca247c17eea 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 { @@ -656,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();