# Copyright (C) 2015-2021 Regents of the University of California
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from toil.lib.conversions import (convert_units,
hms_duration_to_seconds,
human2bytes)
from toil.test import ToilTest
logger = logging.getLogger(__name__)
logging.basicConfig(level=logging.DEBUG)
[docs]
class ConversionTest(ToilTest):
[docs]
def test_convert(self):
expected_conversions = {
"0 B": "0.0000 TB",
"0 KB": "0.0000 TB",
"0 MB": "0.0000 TB",
"0 GB": "0.0000 TB",
"0 TB": "0.0000 TB",
"0.1 B": "0.0000 TB",
"0.1 KB": "0.0000 TB",
"0.1 MB": "0.0000 TB",
"0.1 GB": "0.0001 TB",
"0.1 TB": "0.1000 TB",
"0.5 B": "0.0000 TB",
"0.5 KB": "0.0000 TB",
"0.5 MB": "0.0000 TB",
"0.5 GB": "0.0005 TB",
"0.5 TB": "0.5000 TB",
"0.9 B": "0.0000 TB",
"0.9 KB": "0.0000 TB",
"0.9 MB": "0.0000 TB",
"0.9 GB": "0.0009 TB",
"0.9 TB": "0.9000 TB",
"1 B": "0.0000 TB",
"1 KB": "0.0000 TB",
"1 MB": "0.0000 TB",
"1 GB": "0.0010 TB",
"1 TB": "1.0000 TB",
"7 B": "0.0000 TB",
"7 KB": "0.0000 TB",
"7 MB": "0.0000 TB",
"7 GB": "0.0070 TB",
"7 TB": "7.0000 TB",
"7.42423 B": "0.0000 TB",
"7.42423 KB": "0.0000 TB",
"7.42423 MB": "0.0000 TB",
"7.42423 GB": "0.0074 TB",
"7.42423 TB": "7.4242 TB",
"10 B": "0.0000 TB",
"10 KB": "0.0000 TB",
"10 MB": "0.0000 TB",
"10 GB": "0.0100 TB",
"10 TB": "10.0000 TB",
"100 B": "0.0000 TB",
"100 KB": "0.0000 TB",
"100 MB": "0.0001 TB",
"100 GB": "0.1000 TB",
"100 TB": "100.0000 TB",
"1000 B": "0.0000 TB",
"1000 KB": "0.0000 TB",
"1000 MB": "0.0010 TB",
"1000 GB": "1.0000 TB",
"1000 TB": "1000.0000 TB",
"11234234 B": "0.0000 TB",
"11234234 KB": "0.0112 TB",
"11234234 MB": "11.2342 TB",
"11234234 GB": "11234.2340 TB",
"11234234 TB": "11234234.0000 TB"
}
results = {}
for i in (0, 0.1, 0.5, 0.9, 1, 7, 7.42423, 10, 100, 1000, 11234234):
for src_unit in ['B', 'KB', 'MB', 'GB', 'TB']:
for dst_unit in ['B', 'KB', 'MB', 'GB', 'TB']:
converted = convert_units(i, src_unit, dst_unit)
results[f'{i} {src_unit}'] = f'{converted:.4f} {dst_unit}'
self.assertEqual(results, expected_conversions)
[docs]
def test_human2bytes(self):
expected_results = {
'0 b': 0,
'0 Ki': 0,
'0 Mi': 0,
'0 Gi': 0,
'0 Ti': 0,
'0 K': 0,
'0 M': 0,
'0 G': 0,
'0 T': 0,
'0.1 b': 0,
'0.1 Ki': 102,
'0.1 Mi': 104857,
'0.1 Gi': 107374182,
'0.1 Ti': 109951162777,
'0.1 K': 100,
'0.1 M': 100000,
'0.1 G': 100000000,
'0.1 T': 100000000000,
'0.5 b': 0,
'0.5 Ki': 512,
'0.5 Mi': 524288,
'0.5 Gi': 536870912,
'0.5 Ti': 549755813888,
'0.5 K': 500,
'0.5 M': 500000,
'0.5 G': 500000000,
'0.5 T': 500000000000,
'0.9 b': 0,
'0.9 Ki': 921,
'0.9 Mi': 943718,
'0.9 Gi': 966367641,
'0.9 Ti': 989560464998,
'0.9 K': 900,
'0.9 M': 900000,
'0.9 G': 900000000,
'0.9 T': 900000000000,
'1 b': 1,
'1 Ki': 1024,
'1 Mi': 1048576,
'1 Gi': 1073741824,
'1 Ti': 1099511627776,
'1 K': 1000,
'1 M': 1000000,
'1 G': 1000000000,
'1 T': 1000000000000,
'7 b': 7,
'7 Ki': 7168,
'7 Mi': 7340032,
'7 Gi': 7516192768,
'7 Ti': 7696581394432,
'7 K': 7000,
'7 M': 7000000,
'7 G': 7000000000,
'7 T': 7000000000000,
'7.42423 b': 7,
'7.42423 Ki': 7602,
'7.42423 Mi': 7784869,
'7.42423 Gi': 7971706261,
'7.42423 Ti': 8163027212283,
'7.42423 K': 7424,
'7.42423 M': 7424230,
'7.42423 G': 7424230000,
'7.42423 T': 7424230000000,
'10 b': 10,
'10 Ki': 10240,
'10 Mi': 10485760,
'10 Gi': 10737418240,
'10 Ti': 10995116277760,
'10 K': 10000,
'10 M': 10000000,
'10 G': 10000000000,
'10 T': 10000000000000,
'100 b': 100,
'100 Ki': 102400,
'100 Mi': 104857600,
'100 Gi': 107374182400,
'100 Ti': 109951162777600,
'100 K': 100000,
'100 M': 100000000,
'100 G': 100000000000,
'100 T': 100000000000000,
'1000 b': 1000,
'1000 Ki': 1024000,
'1000 Mi': 1048576000,
'1000 Gi': 1073741824000,
'1000 Ti': 1099511627776000,
'1000 K': 1000000,
'1000 M': 1000000000,
'1000 G': 1000000000000,
'1000 T': 1000000000000000,
'11234234 b': 11234234,
'11234234 Ki': 11503855616,
'11234234 Mi': 11779948150784,
'11234234 Gi': 12062666906402816,
'11234234 Ti': 12352170912156483584,
'11234234 K': 11234234000,
'11234234 M': 11234234000000,
'11234234 G': 11234234000000000,
'11234234 T': 11234234000000000000
}
results = {}
for i in (0, 0.1, 0.5, 0.9, 1, 7, 7.42423, 10, 100, 1000, 11234234):
for src_unit in ['b', 'Ki', 'Mi', 'Gi', 'Ti', 'K', 'M', 'G', 'T']:
results[f'{i} {src_unit}'] = human2bytes(f'{i} {src_unit}')
self.assertEqual(results, expected_results)
[docs]
def test_hms_duration_to_seconds(self):
expected_results = {
'0:0:0' : 0.0,
'00:00:00' : 0.0,
'1:1:1' : 3661.0,
'20:14:33' : 72873.0,
'72:80:112' : 264112.0,
}
results = {}
for key in expected_results.keys():
results[key] = hms_duration_to_seconds(f'{key}')
self.assertEqual(results, expected_results)