homework done

This commit is contained in:
32 changed files with 187 additions and 1731 deletions

View File

@@ -0,0 +1,9 @@
[package]
name = "power_socket_lib"
version = "0.1.0"
edition = "2024"
[lib]
crate-type = ["rlib", "staticlib", "cdylib"]
[dependencies]

View File

@@ -0,0 +1,45 @@
#[repr(C)]
pub struct PowerSocket {
power_rate: f32,
on: bool,
}
#[unsafe(no_mangle)]
pub extern "C" fn power_socket_new(power_rate: f32, on: bool) -> PowerSocket {
PowerSocket { power_rate, on }
}
#[unsafe(no_mangle)]
pub extern "C" fn power_socket_is_on(power_socket: &PowerSocket) -> bool {
power_socket.on
}
#[unsafe(no_mangle)]
pub extern "C" fn power_socket_set_on(power_socket: &mut PowerSocket, on: bool) {
power_socket.on = on
}
#[unsafe(no_mangle)]
pub extern "C" fn power_socket_get_power(power_socket: &PowerSocket) -> f32 {
if power_socket.on { power_socket.power_rate } else { 0.0 }
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn it_works() {
let mut power_socket = power_socket_new(12.0, false);
assert_eq!(power_socket.power_rate, 12.0);
assert_eq!(power_socket.on, false);
assert_eq!(power_socket_is_on(&power_socket), false);
assert_eq!(power_socket_get_power(&power_socket), 0.0);
power_socket_set_on(&mut power_socket, true);
assert_eq!(power_socket_is_on(&power_socket), true);
assert_eq!(power_socket_get_power(&power_socket), 12.0);
}
}