Skip to content

Commit df7ab9f

Browse files
akuzni2dhaidashenko
authored andcommitted
add a pop method to arrayvec (#963)
* add a pop method to arrayvec * rustfmt
1 parent 1976211 commit df7ab9f

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

contracts/Cargo.lock

+3-3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

contracts/crates/arrayvec/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "arrayvec"
3-
version = "1.0.0"
3+
version = "1.0.1"
44
edition = "2018"
55

66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

contracts/crates/arrayvec/src/lib.rs

+43
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,17 @@ macro_rules! arrayvec {
9090
self.xs[offset..offset + len].copy_from_slice(&data);
9191
self.len += len as $capacity_ty;
9292
}
93+
94+
/// Removes the last element from the array and returns it.
95+
/// Returns `None` if the array is empty.
96+
pub fn pop(&mut self) -> Option<$ty> {
97+
if self.len > 0 {
98+
self.len -= 1;
99+
Some(self.xs[self.len as usize])
100+
} else {
101+
None
102+
}
103+
}
93104
}
94105

95106
impl std::ops::Deref for $name {
@@ -126,6 +137,38 @@ mod tests {
126137
}
127138
arrayvec!(ArrayVec, u8, u32);
128139

140+
#[test]
141+
fn push_pop() {
142+
let mut vec = ArrayVec::new();
143+
assert!(vec.is_empty());
144+
assert_eq!(vec.pop(), None);
145+
146+
vec.push(10);
147+
assert_eq!(vec.len(), 1);
148+
assert_eq!(vec.as_slice(), &[10]);
149+
150+
vec.push(20);
151+
vec.push(30);
152+
assert_eq!(vec.len(), 3);
153+
assert_eq!(vec.as_slice(), &[10, 20, 30]);
154+
155+
// Popping elements
156+
assert_eq!(vec.pop(), Some(30));
157+
assert_eq!(vec.len(), 2);
158+
assert_eq!(vec.as_slice(), &[10, 20]);
159+
160+
assert_eq!(vec.pop(), Some(20));
161+
assert_eq!(vec.len(), 1);
162+
assert_eq!(vec.as_slice(), &[10]);
163+
164+
assert_eq!(vec.pop(), Some(10));
165+
assert_eq!(vec.len(), 0);
166+
assert!(vec.is_empty());
167+
168+
// Popping from empty vec
169+
assert_eq!(vec.pop(), None);
170+
}
171+
129172
#[test]
130173
fn remove() {
131174
let mut vec = ArrayVec::new();

0 commit comments

Comments
 (0)