about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2016-01-20 23:53:24 +0000
committerbors <bors@rust-lang.org>2016-01-20 23:53:24 +0000
commit7dce32e65d53ff9cfd8dba89121efa4c977030de (patch)
treee45ff7c757e7f3ca71a1f3c68e1221ab1698f8ce /src/test
parent4bb9d453cf9640b08d97543cd5ed9ded52fd757f (diff)
parentaca4e6a89aa0c12507e632f6df57e006d284eba0 (diff)
downloadrust-7dce32e65d53ff9cfd8dba89121efa4c977030de.tar.gz
rust-7dce32e65d53ff9cfd8dba89121efa4c977030de.zip
Auto merge of #30982 - KiChjang:zst-collections-tests, r=bluss
Fixes #28518.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-pass/zero-sized-binary-heap-push.rs28
-rw-r--r--src/test/run-pass/zero-sized-btreemap-insert.rs32
-rw-r--r--src/test/run-pass/zero-sized-linkedlist-push.rs38
-rw-r--r--src/test/run-pass/zero-sized-vec-push.rs28
4 files changed, 126 insertions, 0 deletions
diff --git a/src/test/run-pass/zero-sized-binary-heap-push.rs b/src/test/run-pass/zero-sized-binary-heap-push.rs
new file mode 100644
index 00000000000..0866a767934
--- /dev/null
+++ b/src/test/run-pass/zero-sized-binary-heap-push.rs
@@ -0,0 +1,28 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::collections::BinaryHeap;
+use std::iter::Iterator;
+
+fn main() {
+    const N: usize = 8;
+
+    for len in 0..N {
+        let mut tester = BinaryHeap::with_capacity(len);
+        assert_eq!(tester.len(), 0);
+        assert!(tester.capacity() >= len);
+        for bit in 0..len {
+            tester.push(());
+        }
+        assert_eq!(tester.len(), len);
+        assert_eq!(tester.iter().count(), len);
+        tester.clear();
+    }
+}
diff --git a/src/test/run-pass/zero-sized-btreemap-insert.rs b/src/test/run-pass/zero-sized-btreemap-insert.rs
new file mode 100644
index 00000000000..aff124c30ec
--- /dev/null
+++ b/src/test/run-pass/zero-sized-btreemap-insert.rs
@@ -0,0 +1,32 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::cmp::{Ord, Ordering, PartialOrd};
+use std::collections::BTreeMap;
+use std::iter::Iterator;
+
+#[derive(Eq, Hash, Debug, Ord, PartialEq, PartialOrd)]
+struct Zst;
+
+fn main() {
+    const N: usize = 8;
+
+    for len in 0..N {
+        let mut tester = BTreeMap::new();
+        assert_eq!(tester.len(), 0);
+        for bit in 0..len {
+            tester.insert(Zst, ());
+        }
+        assert_eq!(tester.len(), if len == 0 { 0 } else { 1 });
+        assert_eq!(tester.iter().count(), if len == 0 { 0 } else { 1 });
+        assert_eq!(tester.get(&Zst).is_some(), len > 0);
+        tester.clear();
+    }
+}
diff --git a/src/test/run-pass/zero-sized-linkedlist-push.rs b/src/test/run-pass/zero-sized-linkedlist-push.rs
new file mode 100644
index 00000000000..9c424854d48
--- /dev/null
+++ b/src/test/run-pass/zero-sized-linkedlist-push.rs
@@ -0,0 +1,38 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::collections::LinkedList;
+use std::iter::Iterator;
+
+fn main() {
+    const N: usize = 8;
+
+    // Test that for all possible sequences of push_front / push_back,
+    // we end up with a LinkedList of the correct size
+
+    for len in 0..N {
+        let mut tester = LinkedList::new();
+        assert_eq!(tester.len(), 0);
+        assert_eq!(tester.front(), None);
+        for case in 0..(1 << len) {
+            assert_eq!(tester.len(), 0);
+            for bit in 0..len {
+                if case & (1 << bit) != 0 {
+                    tester.push_front(());
+                } else {
+                    tester.push_back(());
+                }
+            }
+            assert_eq!(tester.len(), len);
+            assert_eq!(tester.iter().count(), len);
+            tester.clear();
+        }
+    }
+}
diff --git a/src/test/run-pass/zero-sized-vec-push.rs b/src/test/run-pass/zero-sized-vec-push.rs
new file mode 100644
index 00000000000..e472e9380a3
--- /dev/null
+++ b/src/test/run-pass/zero-sized-vec-push.rs
@@ -0,0 +1,28 @@
+// Copyright 2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::iter::Iterator;
+use std::vec::Vec;
+
+fn main() {
+    const N: usize = 8;
+
+    for len in 0..N {
+        let mut tester = Vec::with_capacity(len);
+        assert_eq!(tester.len(), 0);
+        assert!(tester.capacity() >= len);
+        for bit in 0..len {
+            tester.push(());
+        }
+        assert_eq!(tester.len(), len);
+        assert_eq!(tester.iter().count(), len);
+        tester.clear();
+    }
+}