diff --git a/lib/NGCP/BulkProcessor/Utils.pm b/lib/NGCP/BulkProcessor/Utils.pm index 32fa014..12d15dc 100644 --- a/lib/NGCP/BulkProcessor/Utils.pm +++ b/lib/NGCP/BulkProcessor/Utils.pm @@ -483,56 +483,27 @@ sub getscriptpath { } +my @unit_suffix = qw( + kBytes + MBytes + GBytes +); + sub kbytes2gigs { - my ($TotalkBytes,$kbytebase,$round) = @_; - - if ($kbytebase <= 0) { - $kbytebase = 1024; - } - - my $TotalkByteskBytes = $TotalkBytes; - my $TotalkBytesMBytes = $TotalkBytes; - my $TotalkBytesGBytes = $TotalkBytes; - - my $rounded = 0; - $TotalkByteskBytes = $TotalkBytes; - $TotalkBytesMBytes = 0; - $TotalkBytesGBytes = 0; - - if ($TotalkByteskBytes >= $kbytebase) { - $TotalkBytesMBytes = int($TotalkByteskBytes / $kbytebase); - $rounded = int(($TotalkByteskBytes * 100) / $kbytebase) / 100; - if ($round) { # == 1) { - $rounded = int($rounded); - } - $rounded .= " MBytes"; - $TotalkByteskBytes = $TotalkBytes - $TotalkBytesGBytes * $kbytebase * $kbytebase - $TotalkBytesMBytes * $kbytebase; - if ($TotalkBytesMBytes >= $kbytebase) { - $TotalkBytesGBytes = int($TotalkBytesMBytes / $kbytebase); - $rounded = int(($TotalkBytesMBytes * 100) / $kbytebase) / 100; - if ($round) { # == 1) { - $rounded = int($rounded); - } - $rounded .= " GBytes"; - $TotalkBytesMBytes = int(($TotalkBytes - $TotalkBytesGBytes * $kbytebase * $kbytebase) / $kbytebase); - $TotalkByteskBytes = $TotalkBytes - $TotalkBytesGBytes * $kbytebase * $kbytebase - $TotalkBytesMBytes * $kbytebase; - } - } - - if ($TotalkBytesGBytes == 0 && $TotalkBytesMBytes == 0) { - $TotalkBytes .= " kBytes"; - } elsif ($TotalkBytesGBytes == 0) { - $TotalkBytes = $rounded; # . " (" . $TotalkBytesMBytes . " MBytes " . $TotalkByteskBytes . " kBytes)"; - if ($round) { # == 1) { - $TotalkBytes = $rounded; - } - } else { - $TotalkBytes = $rounded; # . " (" . $TotalkBytesGBytes . " GBytes " . $TotalkBytesMBytes . " MBytes " . $TotalkByteskBytes . " kBytes)"; - if ($round) { # == 1) { - $TotalkBytes = $rounded; - } - } - return $TotalkBytes; + my ($number, $base, $round_integer) = @_; + + $base = 1024 if $base <= 0; + + my $unit = 0; + while ($unit < @unit_suffix && $number >= $base) { + # We only want two decimals of precision. + $number = int(($number / $base) * 100) / 100; + $unit++; + } + + $number = int $number if $round_integer; + + return "$number $unit_suffix[$unit]"; } sub cleanupdir { diff --git a/t/Utils.t b/t/Utils.t index 61f5773..2efc260 100644 --- a/t/Utils.t +++ b/t/Utils.t @@ -16,13 +16,14 @@ use strict; use warnings; -use Test::More tests => 25; +use Test::More tests => 45; use Time::Local; require_ok('NGCP::BulkProcessor::Utils'); NGCP::BulkProcessor::Utils->import(qw( zerofill + kbytes2gigs secs_to_years timestampdigits datestampdigits @@ -40,6 +41,35 @@ is(zerofill(0, 4), '0000'); is(zerofill(25, 4), '0025'); is(zerofill(1000, 4), '1000'); +# Unit conversion +is(kbytes2gigs(1), '1 kBytes'); +is(kbytes2gigs(1024), '1 MBytes'); +is(kbytes2gigs(1024 ** 2), '1 GBytes'); + +is(kbytes2gigs(2), '2 kBytes'); +is(kbytes2gigs(2 * 1024 + 1), '2 MBytes'); +is(kbytes2gigs(2 * 1024 ** 2 + 1024 + 1), '2 GBytes'); + +is(kbytes2gigs(920), '920 kBytes'); +is(kbytes2gigs(920 * 1024), '920 MBytes'); +is(kbytes2gigs(920 * 1024 ** 2), '920 GBytes'); + +is(kbytes2gigs(920, 1000), '920 kBytes'); +is(kbytes2gigs(920 * 1000, 1000), '920 MBytes'); +is(kbytes2gigs(920 * 1000 ** 2, 1000), '920 GBytes'); + +is(kbytes2gigs(92 + 920 * 1024), '920.08 MBytes'); +is(kbytes2gigs(92 + 920 * 1024 + 920 * 1024 ** 2), '920.89 GBytes'); + +is(kbytes2gigs(920920, 1000), '920.92 MBytes'); +is(kbytes2gigs(920920920, 1000), '920.92 GBytes'); + +is(kbytes2gigs(92 + 920 * 1024, 1024, 1), '920 MBytes'); +is(kbytes2gigs(92 + 920 * 1024 + 920 * 1024 ** 2, 1024, 1), '920 GBytes'); + +is(kbytes2gigs(920920, 1000, 1), '920 MBytes'); +is(kbytes2gigs(920920920, 1000,1 ), '920 GBytes'); + # secs_to_years() is(secs_to_years(1), '1 second'); is(secs_to_years(59), '59 seconds');