Skip to content

Commit

Permalink
Merge branch 'master' into josh/forc_debug_source_maps
Browse files Browse the repository at this point in the history
  • Loading branch information
JoshuaBatty authored Jan 30, 2025
2 parents b3fc137 + e511dda commit 739d998
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 0 deletions.
26 changes: 26 additions & 0 deletions sway-lib-std/src/vec.sw
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,32 @@ impl<T> Vec<T> {

self.len = new_len;
}

/// Returns the last element in the `Vec`.
///
/// # Returns
///
/// [Option<T>] - The last element in the `Vec` or `None`.
///
/// # Examples
///
/// ```sway
/// fn foo() {
/// let mut vec = Vec::new();
/// assert(vec.last() == None);
/// vec.push(1u64);
/// assert(vec.last() == Some(1u64));
/// vec.push(2u64);
/// assert(vec.last() == Some(2u64));
/// }
/// ```
pub fn last(self) -> Option<T> {
if self.len == 0 {
return None;
}

Some(self.buf.ptr().add::<T>(self.len - 1).read::<T>())
}
}

impl<T> AsRawSlice for Vec<T> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -805,3 +805,21 @@ fn vec_resize() {
assert(vec_2.get(1) == Some(1));
assert(vec_2.get(2) == Some(1));
}

#[test]
fn vec_last() {
let (mut vec_1, a, b, c) = setup();
assert(vec_1.last() == Some(9));

vec_1.push(2);
assert(vec_1.last() == Some(2));

vec_1.push(3);
assert(vec_1.last() == Some(3));

let _ = vec_1.pop();
assert(vec_1.last() == Some(2));

let vec_2: Vec<u64> = Vec::new();
assert(vec_2.last() == None)
}

0 comments on commit 739d998

Please sign in to comment.