mirror of
https://github.com/rust-embedded/heapless.git
synced 2025-10-02 14:54:30 +00:00
Implement Vec::from_slice
This commit is contained in:
parent
3d20301aec
commit
779564cb9f
49
src/vec.rs
49
src/vec.rs
@ -197,6 +197,28 @@ where
|
|||||||
Vec(crate::i::Vec::new())
|
Vec(crate::i::Vec::new())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Constructs a new vector with a fixed capacity of `N` and fills it
|
||||||
|
/// with the provided slice.
|
||||||
|
///
|
||||||
|
/// This is equivalent to the following code:
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// use heapless::Vec;
|
||||||
|
/// use heapless::consts::*;
|
||||||
|
///
|
||||||
|
/// let mut v: Vec<u8, U16> = Vec::new();
|
||||||
|
/// v.extend_from_slice(&[1, 2, 3]).unwrap();
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
pub fn from_slice(other: &[T]) -> Result<Self, ()>
|
||||||
|
where
|
||||||
|
T: Clone,
|
||||||
|
{
|
||||||
|
let mut v = Vec::new();
|
||||||
|
v.extend_from_slice(other)?;
|
||||||
|
Ok(v)
|
||||||
|
}
|
||||||
|
|
||||||
/* Public API */
|
/* Public API */
|
||||||
/// Returns the maximum number of elements the vector can hold
|
/// Returns the maximum number of elements the vector can hold
|
||||||
pub fn capacity(&self) -> usize {
|
pub fn capacity(&self) -> usize {
|
||||||
@ -644,6 +666,7 @@ where
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
use as_slice::AsSlice;
|
||||||
use crate::{consts::*, Vec};
|
use crate::{consts::*, Vec};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -911,4 +934,30 @@ mod tests {
|
|||||||
v.resize_default(1).unwrap();
|
v.resize_default(1).unwrap();
|
||||||
assert_eq!(v[0], 0);
|
assert_eq!(v[0], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn extend_from_slice() {
|
||||||
|
let mut v: Vec<u8, U4> = Vec::new();
|
||||||
|
assert_eq!(v.len(), 0);
|
||||||
|
v.extend_from_slice(&[1, 2]).unwrap();
|
||||||
|
assert_eq!(v.len(), 2);
|
||||||
|
assert_eq!(v.as_slice(), &[1, 2]);
|
||||||
|
v.extend_from_slice(&[3]).unwrap();
|
||||||
|
assert_eq!(v.len(), 3);
|
||||||
|
assert_eq!(v.as_slice(), &[1, 2, 3]);
|
||||||
|
assert!(v.extend_from_slice(&[4, 5]).is_err());
|
||||||
|
assert_eq!(v.len(), 3);
|
||||||
|
assert_eq!(v.as_slice(), &[1, 2, 3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn from_slice() {
|
||||||
|
// Successful construction
|
||||||
|
let v: Vec<u8, U4> = Vec::from_slice(&[1, 2, 3]).unwrap();
|
||||||
|
assert_eq!(v.len(), 3);
|
||||||
|
assert_eq!(v.as_slice(), &[1, 2, 3]);
|
||||||
|
|
||||||
|
// Slice too large
|
||||||
|
assert!(Vec::<u8, U2>::from_slice(&[1, 2, 3]).is_err());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user