Commit bfa7dff0 authored by Miguel Ojeda's avatar Miguel Ojeda Committed by Shuah Khan

rust: sync: make doctests compilable/testable

Rust documentation tests are going to be build/run-tested
with the KUnit integration added in a future patch, thus
update them to make them compilable/testable so that we
may start enforcing it.
Reviewed-by: default avatarMartin Rodriguez Reboredo <yakoyoku@gmail.com>
Reviewed-by: default avatarBjörn Roy Baron <bjorn3_gh@protonmail.com>
Reviewed-by: default avatarAlice Ryhl <aliceryhl@google.com>
Reviewed-by: default avatarDavid Gow <davidgow@google.com>
Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
Signed-off-by: default avatarShuah Khan <skhan@linuxfoundation.org>
parent cf36a495
...@@ -73,6 +73,7 @@ ...@@ -73,6 +73,7 @@
/// assert_eq!(cloned.b, 20); /// assert_eq!(cloned.b, 20);
/// ///
/// // The refcount drops to zero when `cloned` goes out of scope, and the memory is freed. /// // The refcount drops to zero when `cloned` goes out of scope, and the memory is freed.
/// # Ok::<(), Error>(())
/// ``` /// ```
/// ///
/// Using `Arc<T>` as the type of `self`: /// Using `Arc<T>` as the type of `self`:
...@@ -98,6 +99,7 @@ ...@@ -98,6 +99,7 @@
/// let obj = Arc::try_new(Example { a: 10, b: 20 })?; /// let obj = Arc::try_new(Example { a: 10, b: 20 })?;
/// obj.use_reference(); /// obj.use_reference();
/// obj.take_over(); /// obj.take_over();
/// # Ok::<(), Error>(())
/// ``` /// ```
/// ///
/// Coercion from `Arc<Example>` to `Arc<dyn MyTrait>`: /// Coercion from `Arc<Example>` to `Arc<dyn MyTrait>`:
...@@ -121,6 +123,7 @@ ...@@ -121,6 +123,7 @@
/// ///
/// // `coerced` has type `Arc<dyn MyTrait>`. /// // `coerced` has type `Arc<dyn MyTrait>`.
/// let coerced: Arc<dyn MyTrait> = obj; /// let coerced: Arc<dyn MyTrait> = obj;
/// # Ok::<(), Error>(())
/// ``` /// ```
pub struct Arc<T: ?Sized> { pub struct Arc<T: ?Sized> {
ptr: NonNull<ArcInner<T>>, ptr: NonNull<ArcInner<T>>,
...@@ -337,7 +340,7 @@ fn from(item: Pin<UniqueArc<T>>) -> Self { ...@@ -337,7 +340,7 @@ fn from(item: Pin<UniqueArc<T>>) -> Self {
/// # Example /// # Example
/// ///
/// ``` /// ```
/// use crate::sync::{Arc, ArcBorrow}; /// use kernel::sync::{Arc, ArcBorrow};
/// ///
/// struct Example; /// struct Example;
/// ///
...@@ -350,12 +353,13 @@ fn from(item: Pin<UniqueArc<T>>) -> Self { ...@@ -350,12 +353,13 @@ fn from(item: Pin<UniqueArc<T>>) -> Self {
/// ///
/// // Assert that both `obj` and `cloned` point to the same underlying object. /// // Assert that both `obj` and `cloned` point to the same underlying object.
/// assert!(core::ptr::eq(&*obj, &*cloned)); /// assert!(core::ptr::eq(&*obj, &*cloned));
/// # Ok::<(), Error>(())
/// ``` /// ```
/// ///
/// Using `ArcBorrow<T>` as the type of `self`: /// Using `ArcBorrow<T>` as the type of `self`:
/// ///
/// ``` /// ```
/// use crate::sync::{Arc, ArcBorrow}; /// use kernel::sync::{Arc, ArcBorrow};
/// ///
/// struct Example { /// struct Example {
/// a: u32, /// a: u32,
...@@ -370,6 +374,7 @@ fn from(item: Pin<UniqueArc<T>>) -> Self { ...@@ -370,6 +374,7 @@ fn from(item: Pin<UniqueArc<T>>) -> Self {
/// ///
/// let obj = Arc::try_new(Example { a: 10, b: 20 })?; /// let obj = Arc::try_new(Example { a: 10, b: 20 })?;
/// obj.as_arc_borrow().use_reference(); /// obj.as_arc_borrow().use_reference();
/// # Ok::<(), Error>(())
/// ``` /// ```
pub struct ArcBorrow<'a, T: ?Sized + 'a> { pub struct ArcBorrow<'a, T: ?Sized + 'a> {
inner: NonNull<ArcInner<T>>, inner: NonNull<ArcInner<T>>,
......
...@@ -63,6 +63,7 @@ macro_rules! new_mutex { ...@@ -63,6 +63,7 @@ macro_rules! new_mutex {
/// assert_eq!(e.c, 10); /// assert_eq!(e.c, 10);
/// assert_eq!(e.d.lock().a, 20); /// assert_eq!(e.d.lock().a, 20);
/// assert_eq!(e.d.lock().b, 30); /// assert_eq!(e.d.lock().b, 30);
/// # Ok::<(), Error>(())
/// ``` /// ```
/// ///
/// The following example shows how to use interior mutability to modify the contents of a struct /// The following example shows how to use interior mutability to modify the contents of a struct
......
...@@ -61,6 +61,7 @@ macro_rules! new_spinlock { ...@@ -61,6 +61,7 @@ macro_rules! new_spinlock {
/// assert_eq!(e.c, 10); /// assert_eq!(e.c, 10);
/// assert_eq!(e.d.lock().a, 20); /// assert_eq!(e.d.lock().a, 20);
/// assert_eq!(e.d.lock().b, 30); /// assert_eq!(e.d.lock().b, 30);
/// # Ok::<(), Error>(())
/// ``` /// ```
/// ///
/// The following example shows how to use interior mutability to modify the contents of a struct /// The following example shows how to use interior mutability to modify the contents of a struct
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment