From aca4e6a89aa0c12507e632f6df57e006d284eba0 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Sun, 17 Jan 2016 12:26:01 -0500 Subject: [PATCH] Add tests for collections to work with ZSTs --- .../run-pass/zero-sized-binary-heap-push.rs | 28 ++++++++++++++ .../run-pass/zero-sized-btreemap-insert.rs | 32 ++++++++++++++++ .../run-pass/zero-sized-linkedlist-push.rs | 38 +++++++++++++++++++ src/test/run-pass/zero-sized-vec-push.rs | 28 ++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 src/test/run-pass/zero-sized-binary-heap-push.rs create mode 100644 src/test/run-pass/zero-sized-btreemap-insert.rs create mode 100644 src/test/run-pass/zero-sized-linkedlist-push.rs create mode 100644 src/test/run-pass/zero-sized-vec-push.rs 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 or the MIT license +// , 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 or the MIT license +// , 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 or the MIT license +// , 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 or the MIT license +// , 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(); + } +}