summaryrefslogtreecommitdiff
path: root/samples/test
diff options
context:
space:
mode:
Diffstat (limited to 'samples/test')
-rw-r--r--samples/test/enums.rs15
-rw-r--r--samples/test/funny_hash.rs39
-rw-r--r--samples/test/thread_drop.rs17
-rw-r--r--samples/test/vec_retain.rs6
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);
+}