summary refs log tree commit diff
path: root/src/test/ui/zero-sized
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-27 01:33:01 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2019-07-27 18:56:16 +0300
commit9be35f82c1abf2ecbab489bca9eca138ea648312 (patch)
tree69888506e34af447d9748c0d542de3ba1dd76210 /src/test/ui/zero-sized
parentca9faa52f5ada0054b1fa27d97aedf448afb059b (diff)
downloadrust-9be35f82c1abf2ecbab489bca9eca138ea648312.tar.gz
rust-9be35f82c1abf2ecbab489bca9eca138ea648312.zip
tests: Move run-pass tests without naming conflicts to ui
Diffstat (limited to 'src/test/ui/zero-sized')
-rw-r--r--src/test/ui/zero-sized/zero-size-type-destructors.rs21
-rw-r--r--src/test/ui/zero-sized/zero-sized-binary-heap-push.rs20
-rw-r--r--src/test/ui/zero-sized/zero-sized-btreemap-insert.rs25
-rw-r--r--src/test/ui/zero-sized/zero-sized-linkedlist-push.rs29
-rw-r--r--src/test/ui/zero-sized/zero-sized-tuple-struct.rs12
-rw-r--r--src/test/ui/zero-sized/zero-sized-vec-deque-push.rs32
-rw-r--r--src/test/ui/zero-sized/zero-sized-vec-push.rs20
7 files changed, 159 insertions, 0 deletions
diff --git a/src/test/ui/zero-sized/zero-size-type-destructors.rs b/src/test/ui/zero-sized/zero-size-type-destructors.rs
new file mode 100644
index 00000000000..98b5a439c82
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-size-type-destructors.rs
@@ -0,0 +1,21 @@
+// run-pass
+#![allow(non_upper_case_globals)]
+
+static mut destructions : isize = 3;
+
+pub fn foo() {
+    struct Foo;
+
+    impl Drop for Foo {
+        fn drop(&mut self) {
+          unsafe { destructions -= 1 };
+        }
+    };
+
+    let _x = [Foo, Foo, Foo];
+}
+
+pub fn main() {
+  foo();
+  assert_eq!(unsafe { destructions }, 0);
+}
diff --git a/src/test/ui/zero-sized/zero-sized-binary-heap-push.rs b/src/test/ui/zero-sized/zero-sized-binary-heap-push.rs
new file mode 100644
index 00000000000..6553c5adbe7
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-binary-heap-push.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(unused_variables)]
+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/ui/zero-sized/zero-sized-btreemap-insert.rs b/src/test/ui/zero-sized/zero-sized-btreemap-insert.rs
new file mode 100644
index 00000000000..52edb33d6ad
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-btreemap-insert.rs
@@ -0,0 +1,25 @@
+// run-pass
+#![allow(unused_variables)]
+#![allow(unused_imports)]
+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/ui/zero-sized/zero-sized-linkedlist-push.rs b/src/test/ui/zero-sized/zero-sized-linkedlist-push.rs
new file mode 100644
index 00000000000..03724085f5f
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-linkedlist-push.rs
@@ -0,0 +1,29 @@
+// run-pass
+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/ui/zero-sized/zero-sized-tuple-struct.rs b/src/test/ui/zero-sized/zero-sized-tuple-struct.rs
new file mode 100644
index 00000000000..6c438720e5d
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-tuple-struct.rs
@@ -0,0 +1,12 @@
+// run-pass
+#![allow(unused_assignments)]
+
+// Make sure that the constructor args are codegened for zero-sized tuple structs
+
+struct Foo(());
+
+fn main() {
+    let mut a = 1;
+    Foo({ a = 2 });
+    assert_eq!(a, 2);
+}
diff --git a/src/test/ui/zero-sized/zero-sized-vec-deque-push.rs b/src/test/ui/zero-sized/zero-sized-vec-deque-push.rs
new file mode 100644
index 00000000000..c541208703b
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-vec-deque-push.rs
@@ -0,0 +1,32 @@
+// run-pass
+use std::collections::VecDeque;
+use std::iter::Iterator;
+
+fn main() {
+    const N: usize = 8;
+
+    // Zero sized type
+    struct Zst;
+
+    // Test that for all possible sequences of push_front / push_back,
+    // we end up with a deque of the correct size
+
+    for len in 0..N {
+        let mut tester = VecDeque::with_capacity(len);
+        assert_eq!(tester.len(), 0);
+        assert!(tester.capacity() >= len);
+        for case in 0..(1 << len) {
+            assert_eq!(tester.len(), 0);
+            for bit in 0..len {
+                if case & (1 << bit) != 0 {
+                    tester.push_front(Zst);
+                } else {
+                    tester.push_back(Zst);
+                }
+            }
+            assert_eq!(tester.len(), len);
+            assert_eq!(tester.iter().count(), len);
+            tester.clear();
+        }
+    }
+}
diff --git a/src/test/ui/zero-sized/zero-sized-vec-push.rs b/src/test/ui/zero-sized/zero-sized-vec-push.rs
new file mode 100644
index 00000000000..9e9fbc972d5
--- /dev/null
+++ b/src/test/ui/zero-sized/zero-sized-vec-push.rs
@@ -0,0 +1,20 @@
+// run-pass
+#![allow(unused_variables)]
+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();
+    }
+}