Compare commits
No commits in common. "6d51a4d3a69918237d0def3addf9e5d11f5207cd" and "0b11b91fe45fd9851226a949285a65f30a556d56" have entirely different histories.
6d51a4d3a6
...
0b11b91fe4
@ -1,38 +0,0 @@
|
|||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
pub const SECONDS_IN_MINUTE: u32 = 60;
|
|
||||||
pub const SECONDS_IN_HOUR: u32 = SECONDS_IN_MINUTE * 60;
|
|
||||||
pub const SECONDS_IN_DAY: u32 = SECONDS_IN_HOUR * 24;
|
|
||||||
|
|
||||||
pub fn duration_to_string(to_convert: Duration, show_zeros: Option<bool>) -> String {
|
|
||||||
const SECONDS_IN_DAY: u32 = 86400;
|
|
||||||
const SECONDS_IN_HOUR: u32 = 3600;
|
|
||||||
const SECONDS_IN_MINUTE: u32 = 60;
|
|
||||||
|
|
||||||
let should_show_zero = show_zeros.unwrap_or(false);
|
|
||||||
let mut total_seconds = to_convert.as_secs() as u32;
|
|
||||||
let mut parts = Vec::new();
|
|
||||||
|
|
||||||
let units = [
|
|
||||||
(SECONDS_IN_DAY, "day"),
|
|
||||||
(SECONDS_IN_HOUR, "hour"),
|
|
||||||
(SECONDS_IN_MINUTE, "minute"),
|
|
||||||
(1, "second"),
|
|
||||||
];
|
|
||||||
|
|
||||||
for &(unit_seconds, unit_name) in &units {
|
|
||||||
let count = total_seconds / unit_seconds;
|
|
||||||
total_seconds %= unit_seconds;
|
|
||||||
|
|
||||||
if count > 0 || should_show_zero {
|
|
||||||
let label = if count == 1 {
|
|
||||||
unit_name.to_string()
|
|
||||||
} else {
|
|
||||||
format!("{}s", unit_name)
|
|
||||||
};
|
|
||||||
parts.push(format!("{} {}", count, label));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
parts.join(" ")
|
|
||||||
}
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
pub mod duration_to_string;
|
|
||||||
mod tests;
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
use std::time::Duration;
|
|
||||||
use crate::duration_to_string::duration_to_string::duration_to_string;
|
|
||||||
|
|
||||||
#[cfg(test)]
|
|
||||||
mod test {
|
|
||||||
use super::*;
|
|
||||||
use crate::duration_to_string::duration_to_string::*;
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn multi_duration_to_string() {
|
|
||||||
let params: Vec<(&str, Duration, Option<bool>)> = vec![
|
|
||||||
("1 second", Duration::from_secs(1), Some(false)),
|
|
||||||
("4 seconds", Duration::from_secs(4), Some(false)),
|
|
||||||
("1 minute", Duration::from_secs(SECONDS_IN_MINUTE as u64), Some(false)),
|
|
||||||
("4 minutes", Duration::from_secs((SECONDS_IN_MINUTE * 4) as u64), Some(false)),
|
|
||||||
("1 hour", Duration::from_secs(SECONDS_IN_HOUR as u64), Some(false)),
|
|
||||||
("4 hours", Duration::from_secs((SECONDS_IN_HOUR * 4) as u64), Some(false)),
|
|
||||||
("4 hours 5 minutes", Duration::from_secs((SECONDS_IN_HOUR * 4 + SECONDS_IN_MINUTE * 5) as u64), Some(false)),
|
|
||||||
("1 day", Duration::from_secs(SECONDS_IN_DAY as u64), Some(false)),
|
|
||||||
("0 days 0 hours 0 minutes 1 second", Duration::from_secs(1), Some(true)),
|
|
||||||
("0 days 0 hours 0 minutes 4 seconds", Duration::from_secs(4), Some(true)),
|
|
||||||
("0 days 0 hours 1 minute 0 seconds", Duration::from_secs(SECONDS_IN_MINUTE as u64), Some(true)),
|
|
||||||
("0 days 0 hours 4 minutes 0 seconds", Duration::from_secs((SECONDS_IN_MINUTE * 4) as u64), Some(true)),
|
|
||||||
("0 days 1 hour 0 minutes 0 seconds", Duration::from_secs(SECONDS_IN_HOUR as u64), Some(true)),
|
|
||||||
("0 days 4 hours 0 minutes 0 seconds", Duration::from_secs((SECONDS_IN_HOUR * 4) as u64), Some(true)),
|
|
||||||
("0 days 4 hours 5 minutes 0 seconds", Duration::from_secs((SECONDS_IN_HOUR * 4 + SECONDS_IN_MINUTE * 5) as u64), Some(true)),
|
|
||||||
("1 day 0 hours 0 minutes 0 seconds", Duration::from_secs(SECONDS_IN_DAY as u64), Some(true)),
|
|
||||||
("1 day 0 hours 0 minutes 1 second", Duration::from_secs((SECONDS_IN_DAY + 1) as u64), Some(true)),
|
|
||||||
("1 second", Duration::from_secs(1), None),
|
|
||||||
("4 seconds", Duration::from_secs(4), None),
|
|
||||||
("1 minute", Duration::from_secs(SECONDS_IN_MINUTE as u64), None),
|
|
||||||
("4 minutes", Duration::from_secs((SECONDS_IN_MINUTE * 4) as u64), None),
|
|
||||||
("1 hour", Duration::from_secs(SECONDS_IN_HOUR as u64), None),
|
|
||||||
("4 hours", Duration::from_secs((SECONDS_IN_HOUR * 4) as u64), None),
|
|
||||||
("4 hours 5 minutes", Duration::from_secs((SECONDS_IN_HOUR * 4 + SECONDS_IN_MINUTE * 5) as u64), None),
|
|
||||||
("1 day", Duration::from_secs(SECONDS_IN_DAY as u64), None),
|
|
||||||
];
|
|
||||||
|
|
||||||
for (expected, actual, show) in params {
|
|
||||||
assert_eq!(expected, duration_to_string(actual, show));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,4 +1,3 @@
|
|||||||
pub mod number_system_conversion;
|
pub mod number_system_conversion;
|
||||||
pub mod test_compression;
|
pub mod test_compression;
|
||||||
pub mod data_to_text;
|
pub mod data_to_text;
|
||||||
pub mod duration_to_string;
|
|
||||||
|
|||||||
@ -8,12 +8,12 @@ impl NumberSystemConversion {
|
|||||||
/// ex: 0xff -> true, true, true, true, true, true, true, true
|
/// ex: 0xff -> true, true, true, true, true, true, true, true
|
||||||
/// 0xa0 -> true, false, true, false, false, false, false, false
|
/// 0xa0 -> true, false, true, false, false, false, false, false
|
||||||
pub fn byte_to_bool(from: u8) -> [bool; 8] {
|
pub fn byte_to_bool(from: u8) -> [bool; 8] {
|
||||||
let mut result = [false; 8];
|
let mut return_values = [false; 8];
|
||||||
for i in 0..8 {
|
for i in 0..8 {
|
||||||
// Extract the i-th bit and convert it to a boolean
|
let new_value = from >> i & 0x1 == 1;
|
||||||
result[i] = ((from >> i) & 1) != 0;
|
return_values[i as usize] = new_value;
|
||||||
}
|
}
|
||||||
result
|
return_values
|
||||||
}
|
}
|
||||||
|
|
||||||
/// bool_to_byte
|
/// bool_to_byte
|
||||||
@ -114,19 +114,4 @@ impl NumberSystemConversion {
|
|||||||
pub fn clear_low_bits(to_clear: u16) -> u16 {
|
pub fn clear_low_bits(to_clear: u16) -> u16 {
|
||||||
to_clear & 0xff00
|
to_clear & 0xff00
|
||||||
}
|
}
|
||||||
|
|
||||||
/// is_bit_set
|
|
||||||
///
|
|
||||||
/// Checks if a specified bit is set
|
|
||||||
pub fn is_bit_set(to_check: u8, bit_to_check: u8) -> bool {
|
|
||||||
(to_check >> bit_to_check) & 0x01 == 1
|
|
||||||
}
|
|
||||||
|
|
||||||
/// is_bit_clear
|
|
||||||
///
|
|
||||||
/// Checks if a specified bit is clear
|
|
||||||
/// LSB = 0 MSB = 7
|
|
||||||
pub fn is_bit_clear(to_check: u8, bit_to_check: u8) -> bool {
|
|
||||||
(to_check >> bit_to_check) & 0x01 != 1
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ fn read_bin(source: &str) -> Vec<u8> {
|
|||||||
|
|
||||||
fn read_display(source: &str) -> String {
|
fn read_display(source: &str) -> String {
|
||||||
let full_path = format!("/home/tmerritt/Projects/trevors_utilities/resources/data_to_text/{}.display", source);
|
let full_path = format!("/home/tmerritt/Projects/trevors_utilities/resources/data_to_text/{}.display", source);
|
||||||
|
// println!("FULL PATH DIS: [{}]", full_path);
|
||||||
std::fs::read_to_string(full_path).unwrap()
|
std::fs::read_to_string(full_path).unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -147,34 +147,4 @@ fn clear_low_bits() {
|
|||||||
NumberSystemConversion::clear_low_bits(src),
|
NumberSystemConversion::clear_low_bits(src),
|
||||||
dst);
|
dst);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn is_bit_set_checks() {
|
|
||||||
let params = vec![
|
|
||||||
(0b0000_0001, vec![true, false, false, false, false, false, false, false]),
|
|
||||||
(0b1111_1111, vec![true, true, true, true, true, true, true, true]),
|
|
||||||
(0b1010_1010, vec![false, true, false, true, false, true, false, true])
|
|
||||||
];
|
|
||||||
|
|
||||||
for (base, options) in params {
|
|
||||||
for (index, expected) in options.iter().enumerate() {
|
|
||||||
assert_eq!(*expected, NumberSystemConversion::is_bit_set(base, index as u8));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn is_bit_clear_checks() {
|
|
||||||
let params = vec![
|
|
||||||
(0b0000_0001, vec![false, true, true, true, true, true, true, true]),
|
|
||||||
(0b1111_1111, vec![false, false, false, false, false, false, false, false]),
|
|
||||||
(0b1010_1010, vec![true, false, true, false, true, false, true, false])
|
|
||||||
];
|
|
||||||
|
|
||||||
for (base, options) in params {
|
|
||||||
for (index, expected) in options.iter().enumerate() {
|
|
||||||
assert_eq!(*expected, NumberSystemConversion::is_bit_clear(base, index as u8));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user