Source code for toil.test.lib.test_conversions

# 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)