diff options
author | Jimmy Ostler <jtostler1@gmail.com> | 2024-12-19 22:25:33 -0800 |
---|---|---|
committer | Miguel Ojeda <ojeda@kernel.org> | 2025-01-13 23:45:30 +0100 |
commit | 91da5a24144e5a82bf88c5f72068cf1628198668 (patch) | |
tree | 4c39526b0a90efa79e3422fc5abb6370fcb3f47e /rust/kernel/alloc/layout.rs | |
parent | 59d5846594e9f82c11af72151de7cef3f325dd4b (diff) | |
download | linux-91da5a24144e5a82bf88c5f72068cf1628198668.tar.gz linux-91da5a24144e5a82bf88c5f72068cf1628198668.tar.bz2 linux-91da5a24144e5a82bf88c5f72068cf1628198668.zip |
rust: alloc: add doctest for `ArrayLayout::new()`
Add a rustdoc example and Kunit test to the `ArrayLayout` struct's
`ArrayLayout::new()` function.
This patch depends on the first patch in this series in order for the
KUnit test to compile.
Suggested-by: Boqun Feng <boqun.feng@gmail.com>
Link: https://github.com/Rust-for-Linux/linux/issues/1131
Reviewed-by: Danilo Krummrich <dakr@kernel.org>
Signed-off-by: Jimmy Ostler <jtostler1@gmail.com>
Link: https://lore.kernel.org/r/f1564da5bcaa6be87aee312767a1d1694a03d1b7.1734674670.git.jtostler1@gmail.com
[ Added periods to example comments. Reworded title. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Diffstat (limited to 'rust/kernel/alloc/layout.rs')
-rw-r--r-- | rust/kernel/alloc/layout.rs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/rust/kernel/alloc/layout.rs b/rust/kernel/alloc/layout.rs index 4b3cd7fdc816..93ed514f7cc7 100644 --- a/rust/kernel/alloc/layout.rs +++ b/rust/kernel/alloc/layout.rs @@ -43,6 +43,25 @@ impl<T> ArrayLayout<T> { /// # Errors /// /// When `len * size_of::<T>()` overflows or when `len * size_of::<T>() > isize::MAX`. + /// + /// # Examples + /// + /// ``` + /// # use kernel::alloc::layout::{ArrayLayout, LayoutError}; + /// let layout = ArrayLayout::<i32>::new(15)?; + /// assert_eq!(layout.len(), 15); + /// + /// // Errors because `len * size_of::<T>()` overflows. + /// let layout = ArrayLayout::<i32>::new(isize::MAX as usize); + /// assert!(layout.is_err()); + /// + /// // Errors because `len * size_of::<i32>() > isize::MAX`, + /// // even though `len < isize::MAX`. + /// let layout = ArrayLayout::<i32>::new(isize::MAX as usize / 2); + /// assert!(layout.is_err()); + /// + /// # Ok::<(), Error>(()) + /// ``` pub const fn new(len: usize) -> Result<Self, LayoutError> { match len.checked_mul(core::mem::size_of::<T>()) { Some(size) if size <= ISIZE_MAX => { |