@@ -57,7 +57,7 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> {
5757
5858 let limit = matches. get_one :: < usize > ( "lines" ) . copied ( ) ;
5959 let numa = matches. get_flag ( "numa" ) ;
60- let human = matches . get_flag ( "human" ) ;
60+ let human = true ;
6161 let once = matches. get_flag ( "once" ) ;
6262 let delay = * matches. get_one :: < u64 > ( "delay" ) . unwrap_or ( & 0 ) ;
6363
@@ -176,7 +176,7 @@ fn print_procs(human: bool, limit: Option<usize>) {
176176 }
177177}
178178
179- fn print_node ( node : & str , pools : & [ HugePagePool ] , human : bool ) {
179+ fn format_node_line ( node : & str , pools : & [ HugePagePool ] , human : bool ) -> String {
180180 let mut line = String :: new ( ) ;
181181 line. push_str ( node) ;
182182 line. push ( ':' ) ;
@@ -198,7 +198,11 @@ fn print_node(node: &str, pools: &[HugePagePool], human: bool) {
198198 ) ) ;
199199 }
200200
201- println ! ( "{}" , line) ;
201+ line
202+ }
203+
204+ fn print_node ( node : & str , pools : & [ HugePagePool ] , human : bool ) {
205+ println ! ( "{}" , format_node_line( node, pools, human) ) ;
202206}
203207
204208fn format_kb ( kb : u64 , human : bool ) -> String {
@@ -463,4 +467,109 @@ mod tests {
463467 assert_eq ! ( pools[ 0 ] . total_pages, 10 ) ;
464468 assert_eq ! ( pools[ 0 ] . free_pages, 3 ) ;
465469 }
470+
471+ #[ test]
472+ #[ cfg( target_os = "linux" ) ]
473+ fn format_kb_defaults_to_human_readable ( ) {
474+ assert_eq ! ( format_kb( 64 , true ) , "64Ki" ) ;
475+ assert_eq ! ( format_kb( 1536 , true ) , "1.5Mi" ) ;
476+ assert_eq ! ( format_kb( 1048576 , true ) , "1.0Gi" ) ;
477+ }
478+
479+ #[ test]
480+ #[ cfg( target_os = "linux" ) ]
481+ fn format_kb_non_human_readable ( ) {
482+ assert_eq ! ( format_kb( 64 , false ) , "64" ) ;
483+ assert_eq ! ( format_kb( 1536 , false ) , "1536" ) ;
484+ assert_eq ! ( format_kb( 1048576 , false ) , "1048576" ) ;
485+ }
486+
487+ #[ test]
488+ #[ cfg( target_os = "linux" ) ]
489+ fn format_node_line_in_human_readable_mode ( ) {
490+ let pools = vec ! [ HugePagePool {
491+ size_kb: 2048 ,
492+ total_pages: 10 ,
493+ free_pages: 3 ,
494+ reserved_pages: 2 ,
495+ surplus_pages: 1 ,
496+ } ] ;
497+
498+ assert_eq ! (
499+ format_node_line( "node(s)" , & pools, true ) ,
500+ "node(s): 2.0Mi - 3/10"
501+ ) ;
502+ }
503+
504+ #[ test]
505+ #[ cfg( target_os = "linux" ) ]
506+ fn format_node_line_non_human_mode ( ) {
507+ let pools = vec ! [ HugePagePool {
508+ size_kb: 2048 ,
509+ total_pages: 10 ,
510+ free_pages: 3 ,
511+ reserved_pages: 2 ,
512+ surplus_pages: 1 ,
513+ } ] ;
514+
515+ assert_eq ! (
516+ format_node_line( "node(s)" , & pools, false ) ,
517+ "node(s): 2048kB - 3/10"
518+ ) ;
519+ }
520+
521+ #[ test]
522+ #[ cfg( target_os = "linux" ) ]
523+ fn format_node_line_multiple_pools ( ) {
524+ let pools = vec ! [
525+ HugePagePool {
526+ size_kb: 2048 ,
527+ total_pages: 10 ,
528+ free_pages: 3 ,
529+ reserved_pages: 2 ,
530+ surplus_pages: 1 ,
531+ } ,
532+ HugePagePool {
533+ size_kb: 1048576 ,
534+ total_pages: 2 ,
535+ free_pages: 1 ,
536+ reserved_pages: 0 ,
537+ surplus_pages: 0 ,
538+ } ,
539+ ] ;
540+
541+ assert_eq ! (
542+ format_node_line( "node(s)" , & pools, true ) ,
543+ "node(s): 2.0Mi - 3/10, 1.0Gi - 1/2"
544+ ) ;
545+ }
546+
547+ #[ test]
548+ #[ cfg( target_os = "linux" ) ]
549+ fn humanized_si_units ( ) {
550+ // si=true uses powers of 1000, suffix without "i"
551+ assert_eq ! ( humanized( 0 , true ) , "0B" ) ;
552+ assert_eq ! ( humanized( 1 , true ) , "1.0K" ) ; // 1024 bytes → 1.0K
553+ assert_eq ! ( humanized( 10 , true ) , "10K" ) ; // integer when value >= 10
554+ assert_eq ! ( humanized( 1 , false ) , "1.0Ki" ) ; // binary: 1024 bytes → 1.0Ki
555+ assert_eq ! ( humanized( 1024 , true ) , "1.0M" ) ; // 1024*1024 bytes → 1.0M
556+ }
557+
558+ #[ test]
559+ #[ cfg( target_os = "linux" ) ]
560+ fn humanized_small_values ( ) {
561+ // level==0: bytes < 100, return raw bytes with "B" suffix
562+ assert_eq ! ( humanized( 0 , false ) , "0B" ) ;
563+ assert_eq ! ( humanized( 0 , true ) , "0B" ) ;
564+ }
565+
566+ #[ test]
567+ #[ cfg( target_os = "linux" ) ]
568+ fn humanized_integer_rounding ( ) {
569+ // When value >= 10.0, use integer format (no decimal)
570+ // 10240 kiB → 10 MiB (10.0 >= 10 → integer)
571+ assert_eq ! ( humanized( 10240 , false ) , "10Mi" ) ;
572+ // 10485760 kiB → 10 GiB
573+ assert_eq ! ( humanized( 10485760 , false ) , "10Gi" ) ;
574+ }
466575}
0 commit comments