about summary refs log tree commit diff
diff options
context:
space:
mode:
authorStein Somers <git@steinsomers.be>2021-12-10 15:18:54 +0100
committerStein Somers <git@steinsomers.be>2021-12-10 16:30:04 +0100
commitcc35a11a393c3fca47a3b80db48c39c416f20bf6 (patch)
treea5cc1d1ed43921d5fca4353f4989cb81accd685d
parentc8bc4b7a55606ae6d7b7af7c116c8188762b0871 (diff)
downloadrust-cc35a11a393c3fca47a3b80db48c39c416f20bf6.tar.gz
rust-cc35a11a393c3fca47a3b80db48c39c416f20bf6.zip
BTree: assert presence of derived functions
-rw-r--r--library/alloc/src/collections/btree/set/tests.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/library/alloc/src/collections/btree/set/tests.rs b/library/alloc/src/collections/btree/set/tests.rs
index 9a5bfb3d958..7390ff5a59c 100644
--- a/library/alloc/src/collections/btree/set/tests.rs
+++ b/library/alloc/src/collections/btree/set/tests.rs
@@ -3,6 +3,7 @@ use super::super::testing::rng::DeterministicRng;
 use super::*;
 use crate::vec::Vec;
 use std::cmp::Ordering;
+use std::hash::{Hash, Hasher};
 use std::iter::FromIterator;
 use std::panic::{catch_unwind, AssertUnwindSafe};
 
@@ -607,6 +608,37 @@ fn assert_send() {
     }
 }
 
+#[allow(dead_code)]
+// Check that the member-like functions conditionally provided by #[derive()]
+// are not overriden by genuine member functions with a different signature.
+fn assert_derives() {
+    fn hash<T: Hash, H: Hasher>(v: BTreeSet<T>, state: &mut H) {
+        v.hash(state);
+        // Tested much more thoroughly outside the crate in btree_set_hash.rs
+    }
+    fn eq<T: PartialEq>(v: BTreeSet<T>) {
+        let _ = v.eq(&v);
+    }
+    fn ne<T: PartialEq>(v: BTreeSet<T>) {
+        let _ = v.ne(&v);
+    }
+    fn cmp<T: Ord>(v: BTreeSet<T>) {
+        let _ = v.cmp(&v);
+    }
+    fn min<T: Ord>(v: BTreeSet<T>, w: BTreeSet<T>) {
+        let _ = v.min(w);
+    }
+    fn max<T: Ord>(v: BTreeSet<T>, w: BTreeSet<T>) {
+        let _ = v.max(w);
+    }
+    fn clamp<T: Ord>(v: BTreeSet<T>, w: BTreeSet<T>, x: BTreeSet<T>) {
+        let _ = v.clamp(w, x);
+    }
+    fn partial_cmp<T: PartialOrd>(v: &BTreeSet<T>) {
+        let _ = v.partial_cmp(&v);
+    }
+}
+
 #[test]
 fn test_ord_absence() {
     fn set<K>(mut set: BTreeSet<K>) {