TT#69200 Susbstantially simplify and generalize kbytes2gigs()

This makes it possible to easily extend the function to support new
units.

Change-Id: I9e0935fb20013e962e48ec6e27a04d01cd9730be
changes/69/34769/2
Guillem Jover 6 years ago
parent e6ebcc15c5
commit 7857a1c575

@ -483,56 +483,27 @@ sub getscriptpath {
}
sub kbytes2gigs {
my ($TotalkBytes,$kbytebase,$round) = @_;
if ($kbytebase <= 0) {
$kbytebase = 1024;
}
my @unit_suffix = qw(
kBytes
MBytes
GBytes
);
my $TotalkByteskBytes = $TotalkBytes;
my $TotalkBytesMBytes = $TotalkBytes;
my $TotalkBytesGBytes = $TotalkBytes;
sub kbytes2gigs {
my ($number, $base, $round_integer) = @_;
my $rounded = 0;
$TotalkByteskBytes = $TotalkBytes;
$TotalkBytesMBytes = 0;
$TotalkBytesGBytes = 0;
$base = 1024 if $base <= 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;
}
my $unit = 0;
while ($unit < @unit_suffix && $number >= $base) {
# We only want two decimals of precision.
$number = int(($number / $base) * 100) / 100;
$unit++;
}
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;
$number = int $number if $round_integer;
return "$number $unit_suffix[$unit]";
}
sub cleanupdir {

@ -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');

Loading…
Cancel
Save