Repository: lurtz/rust-ubung
Pull request #45: Experiment with async / await via tokio
Author: login: lurtz
Created: 2025-03-02T23:42:58Z | Merged: 2025-04-26T15:44:45Z

async / await seems to become the way to handle lots of IO tasks with ease. Lets see what it can do compared to the old way.

https://www.youtube.com/watch?v=o2ob8zkeq2s

- [x] signal handler
- [x] tests


Diff:
diff --git a/Cargo.toml b/Cargo.toml
index 4408426..aadab27 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,12 +4,13 @@ resolver = "2"
 members = [
         "adder",
         "assoc_types",
+        "async_io",
         "cxx",
         "embed",
-	"fourier_transform",
+        "fourier_transform",
         "makros",
         "matrix",
         "pin",
         "romans",
-        "type_state"
+        "type_state",
 ]
diff --git a/async_io/Cargo.toml b/async_io/Cargo.toml
new file mode 100644
index 0000000..0072583
--- /dev/null
+++ b/async_io/Cargo.toml
@@ -0,0 +1,13 @@
+[package]
+name = "async_io"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+tokio = { version = "1.43.0", features = ["full"] }
+
+[dev-dependencies]
+mockall = "0.13.0"
+tokio-test = "0.4.4"
diff --git a/async_io/src/main.rs b/async_io/src/main.rs
new file mode 100644
index 0000000..e585612
--- /dev/null
+++ b/async_io/src/main.rs
@@ -0,0 +1,519 @@
+use std::io::{self, ErrorKind};
+#[cfg(not(test))]
+use std::io::{stdin, stdout, Write};
+use std::sync::{Arc, Mutex};
+
+use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use tokio::net::TcpListener;
+#[cfg(not(test))]
+use tokio::signal;
+use tokio::sync::watch as Channel_type;
+use tokio::task::JoinHandle;
+
+#[cfg(test)]
+use mockall::{automock, mock};
+
+struct LeSharedState {
+    counter: usize,
+    x: usize,
+    y: usize,
+    sender: Channel_type::Sender<String>,
+}
+
+impl Default for LeSharedState {
+    fn default() -> Self {
+        let sender = Channel_type::Sender::<String>::new("".to_string());
+        Self {
+            counter: Default::default(),
+            x: Default::default(),
+            y: Default::default(),
+            sender,
+        }
+    }
+}
+
+fn exchange(current: &mut usize, new: &usize) -> usize {
+    let old_current = *current;
+    *current = *new;
+    old_current
+}
+
+impl LeSharedState {
+    fn inc_counter(&mut self) -> usize {
+        self.counter += 1;
+        self.counter
+    }
+
+    fn set_x(&mut self, x: usize) -> usize {
+        exchange(&mut self.x, &x)
+    }
+
+    fn set_y(&mut self, y: usize) -> usize {
+        exchange(&mut self.y, &y)
+    }
+
+    fn get_z(&self) -> usize {
+        self.x + self.y
+    }
+
+    fn send_event(&self, event: &str) -> Result<(), Channel_type::error::SendError<String>> {
+        self.sender.send(event.to_string())
+    }
+
+    fn get_event_update_receiver(&self) -> Channel_type::Receiver<String> {
+        self.sender.subscribe()
+    }
+}
+
+type State = Arc<Mutex<LeSharedState>>;
+
+async fn read_int<Reader>(socket: &mut Reader, buf: &mut [u8]) -> Result<usize, std::io::Error>
+where
+    Reader: AsyncReadExt + Unpin,
+{
+    let n = socket.read(buf).await?;
+    if 0 == n {
+        return Err(std::io::Error::from(ErrorKind::ConnectionAborted));
+    }
+    let x: usize = std::str::from_utf8(&buf[0..n])
+        .unwrap()
+        .trim()
+        .parse()
+        .unwrap();
+    Ok(x)
+}
+
+async fn read_int_and_watch_for_event<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<usize, std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    let n;
+    loop {
+        tokio::select! {
+            x = read_int(socket, buf) => {n=x?; break;},
+            _ = event_receiver.changed() => {
+                socket
+                    .write_all(format!("\n got event: {}\n", *event_receiver.borrow_and_update()).as_bytes())
+                    .await?;
+            }
+        };
+    }
+    Ok(n)
+}
+
+async fn read_x_and_y_and_reply_with_sum<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    task_state: &mut State,
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<(), std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    {
+        socket.write_all("< x = ".as_bytes()).await?;
+        let x = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_x(x);
+    }
+    {
+        socket.write_all("< y = ".as_bytes()).await?;
+        let y = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_y(y);
+    }
+
+    // Write the data back
+    let z = l(task_state).get_z();
+    socket
+        .write_all(format!("> z = {}\n", z).as_bytes())
+        .await?;
+
+    Ok(())
+}
+
+fn l(state: &State) -> std::sync::MutexGuard<'_, LeSharedState> {
+    state.lock().unwrap()
+}
+
+#[cfg_attr(test, automock)]
+// TODO make it clonable
+trait Stdio {
+    fn print(&self, line: &str) -> io::Result<usize>;
+    fn flush(&self) -> io::Result<usize>;
+    fn read_line(&self, buffer: &mut String) -> io::Result<usize>;
+}
+
+#[cfg(not(test))]
+#[derive(Default)]
+struct StdioImpl {}
+
+#[cfg(not(test))]
+impl Stdio for StdioImpl {
+    fn print(&self, line: &str) -> io::Result<usize> {
+        stdout().write(line.as_bytes())
+    }
+
+    fn flush(&self) -> io::Result<usize> {
+        stdout().flush().map(|_| 0)
+    }
+
+    fn read_line(&self, buffer: &mut String) -> io::Result<usize> {
+        stdin().read_line(buffer)
+    }
+}
+
+fn io_thread_main(thread_state: &mut State, stdio: &dyn Stdio) -> io::Result<()> {
+    let mut buffer = String::new();
+    buffer.reserve(10);
+    loop {
+        stdio.print("Enter event content: ")?;
+        stdio.flush()?;
+        stdio.read_line(&mut buffer)?;
+
+        let _ = l(thread_state).send_event(buffer.trim());
+        buffer.clear();
+    }
+}
+
+fn create_new_connection_handler<Socket>(le_state: State) -> impl Fn(Socket) -> JoinHandle<()>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin + Send + 'static,
+{
+    move |mut socket| {
+        println!("new connection {}", l(&le_state).inc_counter());
+        let mut task_state = le_state.clone();
+
+        tokio::spawn(async move {
+            let mut buf = vec![0; 10];
+            let mut event_receiver = l(&task_state).get_event_update_receiver();
+
+            // In a loop, read data from the socket and write the data back.
+            loop {
+                if let Err(e) = read_x_and_y_and_reply_with_sum(
+                    &mut socket,
+                    &mut buf,
+                    &mut task_state,
+                    &mut event_receiver,
+                )
+                .await
+                {
+                    eprintln!("socket failure; err = {:?}", e);
+                    break;
+                }
+            }
+        })
+    }
+}
+
+#[cfg_attr(test, automock)]
+trait CtrlCWaiter {
+    async fn ctrl_c_pressed(&self);
+}
+
+#[cfg(not(test))]
+#[derive(Default)]
+struct CtrlCWaiterImpl {}
+
+#[cfg(not(test))]
+impl CtrlCWaiter for CtrlCWaiterImpl {
+    async fn ctrl_c_pressed(&self) {
+        signal::ctrl_c().await.unwrap();
+    }
+}
+
+#[cfg(test)]
+mock! {
+    pub AsyncMockCtrlWaiter {}
+    impl Clone for AsyncMockCtrlWaiter {
+        fn clone(&self) -> Self;
+    }
+    impl CtrlCWaiter for AsyncMockCtrlWaiter {
+        // This implementation of the mock trait method is required to allow the mock methods to return a future.
+        fn ctrl_c_pressed(
+            &self,
+        )-> impl std::future::Future<Output=()> + Send;
+    }
+}
+
+async fn main2(
+    listener: TcpListener,
+    ctrl_c_waiter: &impl CtrlCWaiter,
+    stdio: Box<dyn Stdio + Send>,
+) -> Result<(), Box<dyn std::error::Error>> {
+    println!("listening on {}", listener.local_addr()?);
+
+    let le_state = State::default();
+
+    // send event from user io thread, cannot be managed by tokio, because
+    // reading from stdin blocks. Due to that the runtime will not shutdown
+    // without user input. But with a normal OS thread the application
+    // terminates as expected.
+    let mut thread_state = le_state.clone();
+    std::thread::spawn(move || {
+        let _ = io_thread_main(&mut thread_state, stdio.as_ref());
+    });
+
+    let handle_new_connection = create_new_connection_handler(le_state);
+
+    tokio::spawn(async move {
+        loop {
+            let (socket, _) = listener.accept().await.unwrap();
+            handle_new_connection(socket);
+        }
+    });
+
+    ctrl_c_waiter.ctrl_c_pressed().await;
+    println!("terminating");
+
+    Ok(())
+}
+
+#[cfg(not(test))]
+#[tokio::main(flavor = "current_thread")]
+async fn main() -> Result<(), Box<dyn std::error::Error>> {
+    let listener = TcpListener::bind("127.0.0.1:8080").await?;
+    main2(
+        listener,
+        &CtrlCWaiterImpl::default(),
+        Box::new(StdioImpl::default()),
+    )
+    .await
+}
+
+#[cfg(test)]
+mod test {
+    use std::{
+        io::{self, ErrorKind, Read, Write},
+        net::TcpStream,
+        ops::DerefMut,
+        sync::{mpsc, Arc},
+        thread::{self},
+    };
+
+    use crate::{
+        create_new_connection_handler, l, main2, read_x_and_y_and_reply_with_sum,
+        MockAsyncMockCtrlWaiter, MockCtrlCWaiter, MockStdio, State,
+    };
+    use mockall::predicate::eq;
+    use tokio::{
+        net::TcpListener,
+        sync::{oneshot, Mutex},
+    };
+    use tokio_test::io::Builder;
+
+    fn nothing() {}
+
+    fn create_ctrl_c_mock() -> (MockAsyncMockCtrlWaiter, tokio::sync::oneshot::Sender<()>) {
+        let (tx, rx) = oneshot::channel();
+        let rx = Arc::new(Mutex::new(rx));
+        let mut ctrl_c_mock = MockAsyncMockCtrlWaiter::new();
+        ctrl_c_mock
+            .expect_ctrl_c_pressed()
+            .once()
+            .returning(move || {
+                let rxc = rx.clone();
+                Box::pin(async move {
+                    rxc.try_lock().unwrap().deref_mut().await.unwrap();
+                    ()
+                })
+            });
+        (ctrl_c_mock, tx)
+    }
+
+    #[tokio::test]
+    async fn test_read_x_and_y_and_reply_with_sum() {
+        let mut task_state = State::default();
+        let mut buf = vec![0; 10];
+        let mut event_receiver = l(&task_state).get_event_update_receiver();
+        let mut socket = Builder::new()
+            .write(b"< x = ")
+            .read(b"3")
+            .write(b"< y = ")
+            .read(b"4")
+            .write(b"> z = 7\n")
+            .build();
+        let r = read_x_and_y_and_reply_with_sum(
+            &mut socket,
+            &mut buf,
+            &mut task_state,
+            &mut event_receiver,
+        )
+        .await;
+        assert!(r.is_ok());
+    }
+
+    #[tokio::test]
+    async fn test_send_event() {
+        let mut task_state = State::default();
+        let mut buf = vec![0; 10];
+        let mut event_receiver = l(&task_state).get_event_update_receiver();
+        assert!(l(&task_state).send_event("blub").is_ok());
+        let mut socket = Builder::new()
+            .write(b"< x = ")
+            .write(b"\n got event: blub\n")
+            .read(b"3")
+            .write(b"< y = ")
+            .read(b"4")
+            .write(b"> z = 7\n")
+            .build();
+        let r = read_x_and_y_and_reply_with_sum(
+            &mut socket,
+            &mut buf,
+            &mut task_state,
+            &mut event_receiver,
+        )
+        .await;
+        assert!(r.is_ok());
+    }
+
+    #[tokio::test]
+    async fn test_return_connection_aborted() {
+        let mut task_state = State::default();
+        let mut buf = vec![0; 10];
+        let mut event_receiver = l(&task_state).get_event_update_receiver();
+        let mut socket = Builder::new().write(b"< x = ").build();
+        let r = read_x_and_y_and_reply_with_sum(
+            &mut socket,
+            &mut buf,
+            &mut task_state,
+            &mut event_receiver,
+        )
+        .await;
+        assert!(r.is_err());
+        let error = r.unwrap_err();
+        assert_eq!(ErrorKind::ConnectionAborted, error.kind());
+    }
+
+    #[tokio::test]
+    async fn test_create_new_connection_handler_computes_result() {
+        let task_state = State::default();
+        let socket = Builder::new()
+            .write(b"< x = ")
+            .read(b"3")
+            .write(b"< y = ")
+            .read(b"4")
+            .write(b"> z = 7\n")
+            .write(b"< x = ")
+            .build();
+        assert!(create_new_connection_handler(task_state)(socket)
+            .await
+            .is_ok());
+    }
+
+    #[tokio::test]
+    async fn test_create_new_connection_handler_aborts_connection() {
+        let task_state = State::default();
+        let socket = Builder::new().write(b"< x = ").build();
+        assert!(create_new_connection_handler(task_state)(socket)
+            .await
+            .is_ok());
+    }
+
+    #[tokio::test]
+    async fn test_main_terminates_when_ctrl_pressed() {
+        let mut ctrl_c_mock = MockCtrlCWaiter::new();
+        ctrl_c_mock
+            .expect_ctrl_c_pressed()
+            .once()
+            .returning(nothing);
+        let mut stdio_mock = Box::new(MockStdio::default());
+        stdio_mock
+            .expect_print()
+            .once()
+            .returning(|_| Err(io::Error::new(ErrorKind::BrokenPipe, "")));
+
+        let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
+        let _mr = main2(listener, &ctrl_c_mock, stdio_mock).await;
+    }
+
+    #[tokio::test]
+    async fn test_main_accepts_connection() {
+        let (mut ctrl_c_mock, tx) = create_ctrl_c_mock();
+        let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
+        let local_address = listener.local_addr().unwrap();
+        let response = thread::spawn(move || {
+            let mut to_server = TcpStream::connect(local_address).unwrap();
+            let mut buf = [0; 10];
+            to_server.read_exact(&mut buf[0..6]).unwrap();
+            assert_eq!("< x = ", std::str::from_utf8(&buf[0..6]).unwrap());
+            to_server.write_all(b"7\n").unwrap();
+            to_server.read_exact(&mut buf[0..6]).unwrap();
+            assert_eq!("< y = ", std::str::from_utf8(&buf[0..6]).unwrap());
+            to_server.write_all(b"3\n").unwrap();
+            to_server.read_exact(&mut buf[0..9]).unwrap();
+            tx.send(()).unwrap();
+            buf
+        });
+        let mut stdio_mock = Box::new(MockStdio::new());
+        stdio_mock
+            .expect_print()
+            .with(eq("Enter event content: "))
+            .returning(|_a| Ok(0));
+        stdio_mock.expect_flush().once().returning(|| Ok(0));
+        let (tx, rx) = mpsc::channel();
+        stdio_mock.expect_read_line().once().returning(move |_| {
+            rx.recv().unwrap();
+            Err(io::Error::new(io::ErrorKind::BrokenPipe, ""))
+        });
+        let _mr = main2(listener, &ctrl_c_mock, stdio_mock).await;
+        tx.send(()).unwrap();
+        _mr.unwrap();
+        let result = response.join().unwrap();
+        assert_eq!("> z = 10\n", std::str::from_utf8(&result[0..9]).unwrap());
+    }
+
+    #[tokio::test]
+    async fn test_main_sends_event() {
+        let (mut ctrl_c_mock, tx) = create_ctrl_c_mock();
+        let (set_connected, is_connected) = mpsc::channel();
+        let listener = TcpListener::bind("127.0.0.1:0").await.unwrap();
+        let local_address = listener.local_addr().unwrap();
+        let response = thread::spawn(move || {
+            let mut to_server = TcpStream::connect(local_address).unwrap();
+            let mut buf = [0; 20];
+            to_server.read_exact(&mut buf[0..6]).unwrap();
+            set_connected.send(()).unwrap();
+            assert_eq!("< x = ", std::str::from_utf8(&buf[0..6]).unwrap());
+            to_server.read_exact(&mut buf[0..18]).unwrap();
+            tx.send(()).unwrap();
+            buf
+        });
+        let mut stdio_mock = Box::new(MockStdio::new());
+        stdio_mock
+            .expect_print()
+            .once()
+            .with(eq("Enter event content: "))
+            .returning(|_a| Ok(0));
+        stdio_mock.expect_flush().once().returning(|| Ok(0));
+        stdio_mock
+            .expect_read_line()
+            .once()
+            .returning(move |buf: &mut String| {
+                is_connected.recv().unwrap();
+                buf.clear();
+                buf.reserve(4);
+                buf.push_str("blub");
+                Ok(buf.len())
+            });
+        let (tx, rx) = mpsc::channel();
+        stdio_mock
+            .expect_print()
+            .once()
+            .with(eq("Enter event content: "))
+            .returning(move |_| {
+                rx.recv().unwrap();
+                Err(io::Error::new(io::ErrorKind::BrokenPipe, ""))
+            });
+        let _mr = main2(listener, &ctrl_c_mock, stdio_mock).await;
+        tx.send(()).unwrap();
+        _mr.unwrap();
+        let result = response.join().unwrap();
+        assert_eq!(
+            "\n got event: blub\n",
+            std::str::from_utf8(&result[0..18]).unwrap()
+        );
+    }
+}


Reviews:
user: login: lurtz
state: COMMENTED
author_association: OWNER
submitted_at: 2025-04-08T22:50:37Z

Review comments:
diff_hunk: @@ -0,0 +1,452 @@
+use std::io::{stdin, stdout, ErrorKind, Write};
+use std::sync::{Arc, Mutex};
+
+use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use tokio::net::TcpListener;
+#[cfg(not(test))]
+use tokio::signal;
+use tokio::sync::watch as Channel_type;
+use tokio::task::JoinHandle;
+
+#[cfg(test)]
+use mockall::{automock, mock};
+
+struct LeSharedState {
+    counter: usize,
+    x: usize,
+    y: usize,
+    sender: Channel_type::Sender<String>,
+}
+
+impl Default for LeSharedState {
+    fn default() -> Self {
+        let sender = Channel_type::Sender::<String>::new("".to_string());
+        Self {
+            counter: Default::default(),
+            x: Default::default(),
+            y: Default::default(),
+            sender,
+        }
+    }
+}
+
+fn exchange(current: &mut usize, new: &usize) -> usize {
+    let old_current = *current;
+    *current = *new;
+    old_current
+}
+
+impl LeSharedState {
+    fn inc_counter(&mut self) -> usize {
+        self.counter += 1;
+        self.counter
+    }
+
+    fn set_x(&mut self, x: usize) -> usize {
+        exchange(&mut self.x, &x)
+    }
+
+    fn set_y(&mut self, y: usize) -> usize {
+        exchange(&mut self.y, &y)
+    }
+
+    fn get_z(&self) -> usize {
+        self.x + self.y
+    }
+
+    fn send_event(&self, event: &str) -> Result<(), Channel_type::error::SendError<String>> {
+        self.sender.send(event.to_string())
+    }
+
+    fn get_event_update_receiver(&self) -> Channel_type::Receiver<String> {
+        self.sender.subscribe()
+    }
+}
+
+type State = Arc<Mutex<LeSharedState>>;
+
+async fn read_int<Reader>(socket: &mut Reader, buf: &mut [u8]) -> Result<usize, std::io::Error>
+where
+    Reader: AsyncReadExt + Unpin,
+{
+    let n = socket.read(buf).await?;
+    if 0 == n {
+        return Err(std::io::Error::from(ErrorKind::ConnectionAborted));
+    }
+    let x: usize = std::str::from_utf8(&buf[0..n])
+        .unwrap()
+        .trim()
+        .parse()
+        .unwrap();
+    Ok(x)
+}
+
+async fn read_int_and_watch_for_event<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<usize, std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    let n;
+    loop {
+        tokio::select! {
+            x = read_int(socket, buf) => {n=x?; break;},
+            _ = event_receiver.changed() => {
+                socket
+                    .write_all(format!("\n got event: {}\n", *event_receiver.borrow_and_update()).as_bytes())
+                    .await?;
+            }
+        };
+    }
+    Ok(n)
+}
+
+async fn read_x_and_y_and_reply_with_sum<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    task_state: &mut State,
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<(), std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    {
+        socket.write_all("< x = ".as_bytes()).await?;
+        let x = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_x(x);
+    }
+    {
+        socket.write_all("< y = ".as_bytes()).await?;
+        let y = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_y(y);
+    }
+
+    // Write the data back
+    let z = l(task_state).get_z();
+    socket
+        .write_all(format!("> z = {}\n", z).as_bytes())
+        .await?;
+
+    Ok(())
+}
+
+fn l(state: &State) -> std::sync::MutexGuard<'_, LeSharedState> {
+    state.lock().unwrap()
+}
+
+#[cfg_attr(test, automock)]
+// TODO make it clonable
+trait Stdio {
+    fn print(&self, line: &str);
+    fn flush(&self);
+    fn read_line(&self, buffer: &mut String);
+}
+
+#[derive(Default)]
+struct StdioImpl {}
+
+impl Stdio for StdioImpl {
+    fn print(&self, line: &str) {
+        let _ = stdout().write(line.as_bytes());
+    }
+
+    fn flush(&self) {
+        stdout().flush().expect("flush failed");
+    }
+
+    fn read_line(&self, buffer: &mut String) {
+        stdin().read_line(buffer).expect("no proper string entered");
+    }
+}
+
+fn io_thread_main(thread_state: &mut State, stdio: &dyn Stdio) {
+    let mut buffer = String::new();
+    buffer.reserve(10);
+    loop {
+        stdio.print("Enter event content: ");
+        stdio.flush();
+        stdio.read_line(&mut buffer);
+
+        let _ = l(thread_state).send_event(buffer.trim());
+        buffer.clear();
+    }
path: async_io/src/main.rs
user: login: lurtz
body: this never terminates, not ok for tests
created_at: 2025-04-08T22:47:47Z
author_association: OWNER
diff_hunk: @@ -0,0 +1,452 @@
+use std::io::{stdin, stdout, ErrorKind, Write};
+use std::sync::{Arc, Mutex};
+
+use tokio::io::{AsyncReadExt, AsyncWriteExt};
+use tokio::net::TcpListener;
+#[cfg(not(test))]
+use tokio::signal;
+use tokio::sync::watch as Channel_type;
+use tokio::task::JoinHandle;
+
+#[cfg(test)]
+use mockall::{automock, mock};
+
+struct LeSharedState {
+    counter: usize,
+    x: usize,
+    y: usize,
+    sender: Channel_type::Sender<String>,
+}
+
+impl Default for LeSharedState {
+    fn default() -> Self {
+        let sender = Channel_type::Sender::<String>::new("".to_string());
+        Self {
+            counter: Default::default(),
+            x: Default::default(),
+            y: Default::default(),
+            sender,
+        }
+    }
+}
+
+fn exchange(current: &mut usize, new: &usize) -> usize {
+    let old_current = *current;
+    *current = *new;
+    old_current
+}
+
+impl LeSharedState {
+    fn inc_counter(&mut self) -> usize {
+        self.counter += 1;
+        self.counter
+    }
+
+    fn set_x(&mut self, x: usize) -> usize {
+        exchange(&mut self.x, &x)
+    }
+
+    fn set_y(&mut self, y: usize) -> usize {
+        exchange(&mut self.y, &y)
+    }
+
+    fn get_z(&self) -> usize {
+        self.x + self.y
+    }
+
+    fn send_event(&self, event: &str) -> Result<(), Channel_type::error::SendError<String>> {
+        self.sender.send(event.to_string())
+    }
+
+    fn get_event_update_receiver(&self) -> Channel_type::Receiver<String> {
+        self.sender.subscribe()
+    }
+}
+
+type State = Arc<Mutex<LeSharedState>>;
+
+async fn read_int<Reader>(socket: &mut Reader, buf: &mut [u8]) -> Result<usize, std::io::Error>
+where
+    Reader: AsyncReadExt + Unpin,
+{
+    let n = socket.read(buf).await?;
+    if 0 == n {
+        return Err(std::io::Error::from(ErrorKind::ConnectionAborted));
+    }
+    let x: usize = std::str::from_utf8(&buf[0..n])
+        .unwrap()
+        .trim()
+        .parse()
+        .unwrap();
+    Ok(x)
+}
+
+async fn read_int_and_watch_for_event<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<usize, std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    let n;
+    loop {
+        tokio::select! {
+            x = read_int(socket, buf) => {n=x?; break;},
+            _ = event_receiver.changed() => {
+                socket
+                    .write_all(format!("\n got event: {}\n", *event_receiver.borrow_and_update()).as_bytes())
+                    .await?;
+            }
+        };
+    }
+    Ok(n)
+}
+
+async fn read_x_and_y_and_reply_with_sum<Socket>(
+    socket: &mut Socket,
+    buf: &mut [u8],
+    task_state: &mut State,
+    event_receiver: &mut Channel_type::Receiver<String>,
+) -> Result<(), std::io::Error>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin,
+{
+    {
+        socket.write_all("< x = ".as_bytes()).await?;
+        let x = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_x(x);
+    }
+    {
+        socket.write_all("< y = ".as_bytes()).await?;
+        let y = read_int_and_watch_for_event(socket, buf, event_receiver).await?;
+        l(task_state).set_y(y);
+    }
+
+    // Write the data back
+    let z = l(task_state).get_z();
+    socket
+        .write_all(format!("> z = {}\n", z).as_bytes())
+        .await?;
+
+    Ok(())
+}
+
+fn l(state: &State) -> std::sync::MutexGuard<'_, LeSharedState> {
+    state.lock().unwrap()
+}
+
+#[cfg_attr(test, automock)]
+// TODO make it clonable
+trait Stdio {
+    fn print(&self, line: &str);
+    fn flush(&self);
+    fn read_line(&self, buffer: &mut String);
+}
+
+#[derive(Default)]
+struct StdioImpl {}
+
+impl Stdio for StdioImpl {
+    fn print(&self, line: &str) {
+        let _ = stdout().write(line.as_bytes());
+    }
+
+    fn flush(&self) {
+        stdout().flush().expect("flush failed");
+    }
+
+    fn read_line(&self, buffer: &mut String) {
+        stdin().read_line(buffer).expect("no proper string entered");
+    }
+}
+
+fn io_thread_main(thread_state: &mut State, stdio: &dyn Stdio) {
+    let mut buffer = String::new();
+    buffer.reserve(10);
+    loop {
+        stdio.print("Enter event content: ");
+        stdio.flush();
+        stdio.read_line(&mut buffer);
+
+        let _ = l(thread_state).send_event(buffer.trim());
+        buffer.clear();
+    }
+}
+
+fn create_new_connection_handler<Socket>(le_state: State) -> impl Fn(Socket) -> JoinHandle<()>
+where
+    Socket: AsyncReadExt + AsyncWriteExt + Unpin + Send + 'static,
+{
+    move |mut socket| {
+        println!("new connection {}", l(&le_state).inc_counter());
+        let mut task_state = le_state.clone();
+
+        tokio::spawn(async move {
+            let mut buf = vec![0; 10];
+            let mut event_receiver = l(&task_state).get_event_update_receiver();
+
+            // In a loop, read data from the socket and write the data back.
+            loop {
+                if let Err(e) = read_x_and_y_and_reply_with_sum(
+                    &mut socket,
+                    &mut buf,
+                    &mut task_state,
+                    &mut event_receiver,
+                )
+                .await
+                {
+                    eprintln!("socket failure; err = {:?}", e);
+                    break;
+                }
+            }
+        })
+    }
+}
+
+#[cfg_attr(test, automock)]
+trait CtrlCWaiter {
+    async fn ctrl_c_pressed(&self);
+}
+
+#[cfg(not(test))]
+#[derive(Default)]
+struct CtrlCWaiterImpl {}
+
+#[cfg(not(test))]
+impl CtrlCWaiter for CtrlCWaiterImpl {
+    async fn ctrl_c_pressed(&self) {
+        signal::ctrl_c().await.unwrap();
+    }
+}
+
+#[cfg(test)]
+mock! {
+    pub AsyncMockCtrlWaiter {}
+    impl Clone for AsyncMockCtrlWaiter {
+        fn clone(&self) -> Self;
+    }
+    impl CtrlCWaiter for AsyncMockCtrlWaiter {
+        // This implementation of the mock trait method is required to allow the mock methods to return a future.
+        fn ctrl_c_pressed(
+            &self,
+        )-> impl std::future::Future<Output=()> + Send;
+    }
+}
+
+async fn main2(
+    listener: TcpListener,
+    ctrl_c_waiter: &impl CtrlCWaiter,
+    stdio: Box<dyn Stdio + Send>,
+) -> Result<(), Box<dyn std::error::Error>> {
+    println!("listening on {}", listener.local_addr()?);
+
+    let le_state = State::default();
+
+    // send event from user io thread, cannot be managed by tokio, because
+    // reading from stdin blocks. Due to that the runtime will not shutdown
+    // without user input. But with a normal OS thread the application
+    // terminates as expected.
+    let mut thread_state = le_state.clone();
+    std::thread::spawn(move || {
+        io_thread_main(&mut thread_state, stdio.as_ref());
+    });
+
+    let handle_new_connection = create_new_connection_handler(le_state);
+
+    tokio::spawn(async move {
+        loop {
+            let (socket, _) = listener.accept().await.unwrap();
+            handle_new_connection(socket);
+        }
+    });
+
+    ctrl_c_waiter.ctrl_c_pressed().await;
+    println!("terminating");
path: async_io/src/main.rs
user: login: lurtz
body: should make more use of Stdio trait
created_at: 2025-04-08T22:49:06Z
author_association: OWNER

PR comments:
user: login: github-actions[bot]
created_at: 2025-03-10T23:20:13Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>82.52%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L103-L104'>103&ndash;104</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L106-L127'>106&ndash;127</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L129-L130'>129&ndash;130</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L132-L134'>132&ndash;134</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L136-L148'>136&ndash;148</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L152-L159'>152&ndash;159</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L16'>16</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L160-L169'>160&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L190'>190</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L20-L24'>20&ndash;24</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L27-L31'>27&ndash;31</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L34-L37'>34&ndash;37</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L39-L41'>39&ndash;41</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L43-L45'>43&ndash;45</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L47-L49'>47&ndash;49</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L51-L53'>51&ndash;53</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L55-L57'>55&ndash;57</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L62-L73'>62&ndash;73</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L75-L79'>75&ndash;79</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L87-L89'>87&ndash;89</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L91-L94'>91&ndash;94</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/async_io/src/main.rs#L96-L99'>96&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/29ae3f3a3d8aaa60729dc1cf9df86dfc0e66843a/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-10T23:29:49Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>82.52%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L103-L104'>103&ndash;104</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L106-L127'>106&ndash;127</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L129-L130'>129&ndash;130</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L132-L134'>132&ndash;134</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L136-L148'>136&ndash;148</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L152-L159'>152&ndash;159</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L16'>16</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L160-L169'>160&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L190'>190</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L20-L24'>20&ndash;24</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L27-L31'>27&ndash;31</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L34-L37'>34&ndash;37</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L39-L41'>39&ndash;41</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L43-L45'>43&ndash;45</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L47-L49'>47&ndash;49</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L51-L53'>51&ndash;53</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L55-L57'>55&ndash;57</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L62-L73'>62&ndash;73</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L75-L79'>75&ndash;79</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L87-L89'>87&ndash;89</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L91-L94'>91&ndash;94</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/async_io/src/main.rs#L96-L99'>96&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d623ea49abb221becc3eda8b8087868928192679/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-16T00:03:28Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>82.77%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L100'>100</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L104-L105'>104&ndash;105</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L107-L121'>107&ndash;121</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L125-L128'>125&ndash;128</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L130-L131'>130&ndash;131</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L133-L148'>133&ndash;148</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L152-L169'>152&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L190'>190</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L20-L25'>20&ndash;25</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L28-L32'>28&ndash;32</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L40-L42'>40&ndash;42</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L44-L46'>44&ndash;46</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L48-L50'>48&ndash;50</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L52-L54'>52&ndash;54</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L56-L58'>56&ndash;58</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L63-L74'>63&ndash;74</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L76-L80'>76&ndash;80</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L88-L90'>88&ndash;90</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L92-L95'>92&ndash;95</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/async_io/src/main.rs#L97-L99'>97&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/08a08b4a47b7514fc01833c8e949ba43844c0ecd/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-16T22:46:26Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>80.34%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L100'>100</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L104-L105'>104&ndash;105</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L107-L128'>107&ndash;128</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L130-L131'>130&ndash;131</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L133-L135'>133&ndash;135</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L137-L149'>137&ndash;149</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L153-L169'>153&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L190-L199'>190&ndash;199</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L20'>20</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L200-L204'>200&ndash;204</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L21-L25'>21&ndash;25</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L28-L32'>28&ndash;32</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L40-L42'>40&ndash;42</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L44-L46'>44&ndash;46</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L48-L50'>48&ndash;50</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L52-L54'>52&ndash;54</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L56-L58'>56&ndash;58</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L63-L74'>63&ndash;74</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L76-L80'>76&ndash;80</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L88-L90'>88&ndash;90</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L92-L95'>92&ndash;95</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/async_io/src/main.rs#L97-L99'>97&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/e699a87b640c360f71e3af4cd5df931c63d07382/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-17T22:52:44Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>80.72%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L100-L116'>100&ndash;116</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L118-L119'>118&ndash;119</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L121-L123'>121&ndash;123</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L125-L137'>125&ndash;137</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L141-L169'>141&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L190-L192'>190&ndash;192</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L20-L25'>20&ndash;25</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L28-L32'>28&ndash;32</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L40-L42'>40&ndash;42</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L44-L46'>44&ndash;46</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L48-L50'>48&ndash;50</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L52-L54'>52&ndash;54</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L56-L58'>56&ndash;58</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L63-L74'>63&ndash;74</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L76-L80'>76&ndash;80</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L83-L88'>83&ndash;88</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L92-L93'>92&ndash;93</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/async_io/src/main.rs#L95-L99'>95&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/93c3bc57669b82f9850595804d61e0e08fe10ed8/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-03-17T23:05:04Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>80.72%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs'>main.rs</a></td><td><b>0%</b></td><td>100%</td><td><b>0%</b></td><td><b>0%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L100-L116'>100&ndash;116</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L118-L119'>118&ndash;119</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L121-L123'>121&ndash;123</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L125-L137'>125&ndash;137</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L141-L169'>141&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L17'>17</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L170-L179'>170&ndash;179</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L18'>18</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L180-L189'>180&ndash;189</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L19'>19</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L190-L192'>190&ndash;192</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L20-L25'>20&ndash;25</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L28-L32'>28&ndash;32</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L40-L42'>40&ndash;42</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L44-L46'>44&ndash;46</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L48-L50'>48&ndash;50</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L52-L54'>52&ndash;54</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L56-L58'>56&ndash;58</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L63-L74'>63&ndash;74</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L76-L80'>76&ndash;80</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L83-L88'>83&ndash;88</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L92-L93'>92&ndash;93</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/async_io/src/main.rs#L95-L99'>95&ndash;99</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/4803eaeec811e4d2cc235fe504e311e2df292115/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T18:03:01Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>88.56%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs'>main.rs</a></td><td><b>51.28%</b></td><td>100%</td><td><b>62.50%</b></td><td><b>50.20%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L134-L146'>134&ndash;146</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L150-L201'>150&ndash;201</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L52-L54'>52&ndash;54</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L69'>69</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/async_io/src/main.rs#L92-L94'>92&ndash;94</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/94333074bb06c2df3f931082d742fdd5083ed490/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T18:16:28Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>89.51%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/async_io/src/main.rs'>main.rs</a></td><td><b>60.38%</b></td><td>100%</td><td><b>69.23%</b></td><td><b>59.59%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/async_io/src/main.rs#L134-L146'>134&ndash;146</a>, <a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/async_io/src/main.rs#L150-L201'>150&ndash;201</a>, <a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/async_io/src/main.rs#L35-L38'>35&ndash;38</a>, <a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/async_io/src/main.rs#L69'>69</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/1a9e5fcbfcd52fa41f4550766c6b0f3666cacdb9/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T18:23:27Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>89.87%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/async_io/src/main.rs'>main.rs</a></td><td><b>64.39%</b></td><td>100%</td><td><b>71.43%</b></td><td><b>63.78%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/async_io/src/main.rs#L134-L146'>134&ndash;146</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/async_io/src/main.rs#L150-L201'>150&ndash;201</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/async_io/src/main.rs#L35-L38'>35&ndash;38</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/d7cd678a8011903cd508e78e28d1f5c59d44a3f8/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T20:17:03Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>92.63%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs'>main.rs</a></td><td><b>73.99%</b></td><td>100%</td><td><b>80.65%</b></td><td><b>73.33%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs#L134-L146'>134&ndash;146</a>, <a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs#L158-L159'>158&ndash;159</a>, <a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs#L163-L169'>163&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs#L171-L173'>171&ndash;173</a>, <a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/async_io/src/main.rs#L180-L208'>180&ndash;208</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/acee04b67afb074c64aef26002d3a11f6ae2719c/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T20:25:56Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>92.76%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs'>main.rs</a></td><td><b>75.61%</b></td><td>100%</td><td><b>81.82%</b></td><td><b>75%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs#L134-L146'>134&ndash;146</a>, <a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs#L158-L159'>158&ndash;159</a>, <a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs#L163-L169'>163&ndash;169</a>, <a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs#L171-L173'>171&ndash;173</a>, <a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/async_io/src/main.rs#L180-L208'>180&ndash;208</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/b46874bd7a7edb06a9d2eed4debb70e33f75e124/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-05T20:55:25Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>93.99%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/async_io/src/main.rs'>main.rs</a></td><td><b>80.21%</b></td><td>100%</td><td><b>84.85%</b></td><td><b>79.77%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/async_io/src/main.rs#L135-L147'>135&ndash;147</a>, <a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/async_io/src/main.rs#L181-L209'>181&ndash;209</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/c17159cebc027b1db0b78f7a37ae2779bb73e9f2/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-06T18:14:58Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>98.68%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/async_io/src/main.rs'>main.rs</a></td><td><b>95.29%</b></td><td>100%</td><td><b>88.10%</b></td><td><b>96.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/async_io/src/main.rs#L192-L194'>192&ndash;194</a>, <a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/async_io/src/main.rs#L218-L219'>218&ndash;219</a>, <a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/async_io/src/main.rs#L230-L233'>230&ndash;233</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/f022d729244cc84d6922f9f68bdd1760d99583e4/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-06T18:18:34Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.58%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/async_io/src/main.rs'>main.rs</a></td><td><b>98.97%</b></td><td>100%</td><td><b>97.37%</b></td><td><b>99.14%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/async_io/src/main.rs#L221-L222'>221&ndash;222</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/63509edaf59a421edf0047808c8a048fa607370e/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-08T22:42:34Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.85%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/async_io/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0b956b9bd3b11d9acb6a7f587e81fe76956a881e/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-08T22:47:22Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.85%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/async_io/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/6a1a038f8034ee5405c576cbd7098fad3e6915ad/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-14T22:08:50Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.85%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/async_io/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/0f04aabf1bf234989539dac3cccf2423368680be/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-14T22:20:01Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.70%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/async_io/src/main.rs'>main.rs</a></td><td><b>99.61%</b></td><td>100%</td><td>100%</td><td><b>99.57%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/async_io/src/main.rs#L176-L177'>176&ndash;177</a></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/cbf9b45f38dd7b3b05016d055c1fb679d3043c08/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-26T11:30:15Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.86%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/async_io/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/85265ef83599ffe4572c863d7a2bce8417677e0e/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE
user: login: github-actions[bot]
created_at: 2025-04-26T15:42:58Z
body: Coverage after merging <b>async-io</b> into <b>master</b> will be<table><tbody><tr><th>99.86%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>adder/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/adder/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>assoc_types/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/assoc_types/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>async_io/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/async_io/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>cxx/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/cxx/src/main.rs'>main.rs</a></td><td><b>90.70%</b></td><td>100%</td><td><b>77.78%</b></td><td><b>94.12%</b></td><td><a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/cxx/src/main.rs#L15'>15</a>, <a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/cxx/src/main.rs#L5'>5</a></td></tr><tr><td colspan='6'><b>embed/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/embed/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>fourier_transform/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/fourier_transform/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>makros/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/makros/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>matrix/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/matrix/src/main.rs'>main.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>pin/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/pin/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>romans/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/romans/src/lib.rs'>lib.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>type_state/src</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/type_state/src/html.rs'>html.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/type_state/src/lock_order.rs'>lock_order.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/lurtz/rust-ubung/blob/2c560417a96c02eda9b2848be9bce29586c0b6bc/type_state/src/mutex_ordering.rs'>mutex_ordering.rs</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr></tbody></table></details>
author_association: NONE