diff options
author | John Hodge <tpg@ucc.asn.au> | 2019-11-02 11:04:49 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2019-11-02 11:05:00 +0800 |
commit | 8b53b38f40625ab0510f541d69db3f83332a830a (patch) | |
tree | dbf4627b0416e73b259dfa81bca405484f874fa8 /samples/test | |
parent | b60a84ffbb31809bed57664dc0e8a90d632213ad (diff) | |
download | mrust-8b53b38f40625ab0510f541d69db3f83332a830a.tar.gz |
Tests - add some random tests lying about
Diffstat (limited to 'samples/test')
-rw-r--r-- | samples/test/enums.rs | 15 | ||||
-rw-r--r-- | samples/test/funny_hash.rs | 39 | ||||
-rw-r--r-- | samples/test/thread_drop.rs | 17 | ||||
-rw-r--r-- | samples/test/vec_retain.rs | 6 |
4 files changed, 77 insertions, 0 deletions
diff --git a/samples/test/enums.rs b/samples/test/enums.rs new file mode 100644 index 00000000..38d4eb15 --- /dev/null +++ b/samples/test/enums.rs @@ -0,0 +1,15 @@ + +enum Values +{ + One, + Two, + Three, +} + +fn main() +{ + assert!(match Some(&1) { Some(1) => true, _ => false }); + assert!(match Some(1) { Some(1) => true, _ => false }); + assert!(match Values::One { Values::One => true, _ => false }); +} + diff --git a/samples/test/funny_hash.rs b/samples/test/funny_hash.rs new file mode 100644 index 00000000..9e93c296 --- /dev/null +++ b/samples/test/funny_hash.rs @@ -0,0 +1,39 @@ +use std::hash::{Hash,Hasher}; +extern { + type OpaqueSliceContents; +} + +#[repr(C)] +pub struct Slice<T> { + len: usize, + data: [T; 0], + opaque: OpaqueSliceContents, +} +impl<T> Hash for Slice<T> { + #[inline] + fn hash<H: Hasher>(&self, s: &mut H) { + (self as *const Slice<T>).hash(s) + } +} + + +fn main() { +} + +struct MyHasher { + count: usize, +} +impl Hasher for MyHasher +{ + fn finish(&self) -> u64 { + self.count as u64 + } + fn write(&mut self, bytes: &[u8]) { + self.count += bytes.len(); + } +} +fn do_hash(v: &Slice<u8>) { + let mut mh = MyHasher { count: 0 }; + v.hash(&mut mh); + assert_eq!( mh.finish() as usize, ::std::mem::size_of::<usize>() ); +} diff --git a/samples/test/thread_drop.rs b/samples/test/thread_drop.rs new file mode 100644 index 00000000..ae2e6be4 --- /dev/null +++ b/samples/test/thread_drop.rs @@ -0,0 +1,17 @@ + +use std::sync::Arc; +use std::sync::atomic::{Ordering, AtomicBool}; + +fn main() { + struct Foo(Arc<AtomicBool>); + impl Drop for Foo { + fn drop(&mut self) { + self.0.store(true, Ordering::SeqCst); + } + } + let h = Arc::new(AtomicBool::new(false)); + let h2 = Foo(h.clone()); + let th = ::std::thread::spawn(move || { let _ = h2; }); + th.join().unwrap(); + assert!(h.load(Ordering::SeqCst), "Foo's Drop impl was never called"); +} diff --git a/samples/test/vec_retain.rs b/samples/test/vec_retain.rs new file mode 100644 index 00000000..2aad521a --- /dev/null +++ b/samples/test/vec_retain.rs @@ -0,0 +1,6 @@ +fn main() +{ + let mut vec = vec![1, 2, 3]; + vec.retain(|v| { println!("{}", v); true }); + assert!(vec.len() == 3); +} |