From 996a84cb6f298b9a35f5a5d0ec40f73a8789a205 Mon Sep 17 00:00:00 2001 From: Daniel Hofstetter Date: Thu, 12 May 2022 09:09:10 +0200 Subject: [PATCH] df: round up values if block size is specified Fixes #3479 --- src/uu/df/src/table.rs | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/uu/df/src/table.rs b/src/uu/df/src/table.rs index a9a37cfeb..fac2ca663 100644 --- a/src/uu/df/src/table.rs +++ b/src/uu/df/src/table.rs @@ -233,7 +233,7 @@ impl<'a> RowFormatter<'a> { SizeFormat::HumanReadable(h) => self.scaled_human_readable(size, h), SizeFormat::StaticBlockSize => { let BlockSize::Bytes(d) = self.options.block_size; - (size / d).to_string() + (size as f64 / d as f64).ceil().to_string() } } } @@ -793,4 +793,28 @@ mod tests { let fmt = RowFormatter::new(&row, &options); assert_eq!(fmt.get_values(), vec!("26%")); } + + #[test] + fn test_row_formatter_with_round_up_byte_values() { + fn get_formatted_values(bytes: u64, bytes_used: u64, bytes_avail: u64) -> Vec { + let options = Options { + block_size: BlockSize::Bytes(1000), + columns: vec![Column::Size, Column::Used, Column::Avail], + ..Default::default() + }; + + let row = Row { + bytes, + bytes_used, + bytes_avail, + ..Default::default() + }; + RowFormatter::new(&row, &options).get_values() + } + + assert_eq!(get_formatted_values(100, 100, 0), vec!("1", "1", "0")); + assert_eq!(get_formatted_values(100, 99, 1), vec!("1", "1", "1")); + assert_eq!(get_formatted_values(1000, 1000, 0), vec!("1", "1", "0")); + assert_eq!(get_formatted_values(1001, 1000, 1), vec!("2", "1", "1")); + } }