diff options
| author | Alex Burka <aburka@seas.upenn.edu> | 2016-03-05 14:51:24 -0500 |
|---|---|---|
| committer | Alex Burka <aburka@seas.upenn.edu> | 2016-03-27 01:25:46 -0400 |
| commit | 01c0723ef247fec4b85af203c7247b66e3817e1b (patch) | |
| tree | 200bb155ea27e7404a2a768d9097ba34b1e97dfa /src | |
| parent | 68de28b309b38c5143b3c27f3db0d57f4373729e (diff) | |
| download | rust-01c0723ef247fec4b85af203c7247b66e3817e1b.tar.gz rust-01c0723ef247fec4b85af203c7247b66e3817e1b.zip | |
add #[derive(Hash)] test for #21714
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/run-pass/deriving-hash.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/test/run-pass/deriving-hash.rs b/src/test/run-pass/deriving-hash.rs index a98cfa2393f..91bfc2f9201 100644 --- a/src/test/run-pass/deriving-hash.rs +++ b/src/test/run-pass/deriving-hash.rs @@ -12,6 +12,7 @@ #![feature(hash_default)] use std::hash::{Hash, SipHasher, Hasher}; +use std::mem::size_of; #[derive(Hash)] struct Person { @@ -24,12 +25,30 @@ struct Person { #[derive(Hash)] struct __H__H; #[derive(Hash)] enum Collision<__H> { __H { __H__H: __H } } +#[derive(Hash)] +enum E { A=1, B } + fn hash<T: Hash>(t: &T) -> u64 { let mut s = SipHasher::new_with_keys(0, 0); t.hash(&mut s); s.finish() } +struct FakeHasher<'a>(&'a mut Vec<u8>); +impl<'a> Hasher for FakeHasher<'a> { + fn finish(&self) -> u64 { + unimplemented!() + } + + fn write(&mut self, bytes: &[u8]) { + self.0.extend(bytes); + } +} + +fn fake_hash(v: &mut Vec<u8>, e: E) { + e.hash(&mut FakeHasher(v)); +} + fn main() { let person1 = Person { id: 5, @@ -43,4 +62,11 @@ fn main() { }; assert_eq!(hash(&person1), hash(&person1)); assert!(hash(&person1) != hash(&person2)); + + // test #21714 + let mut va = vec![]; + let mut vb = vec![]; + fake_hash(&mut va, E::A); + fake_hash(&mut vb, E::B); + assert!(va != vb); } |
