Blame tests/libbytesize_unittest.py

Packit Service 076464
#!/usr/bin/python3
Packit Service af52df
# -*- coding: utf-8 -*-
Packit Service af52df
Packit Service af52df
import locale
Packit Service af52df
import unittest
Packit Service af52df
import sys
Packit Service af52df
import ctypes
Packit Service af52df
Packit Service af52df
from locale_utils import get_avail_locales, requires_locales
Packit Service af52df
Packit Service 076464
from bytesize import KiB, GiB, ROUND_UP, ROUND_DOWN, ROUND_HALF_UP, OverflowError
Packit Service 076464
Packit Service 076464
# SizeStruct is part of the 'private' API and needs to be imported differently
Packit Service 076464
# when running from locally build tree and when using installed library
Packit Service 076464
try:
Packit Service 076464
    from bytesize import SizeStruct
Packit Service 076464
except ImportError:
Packit Service 076464
    from bytesize.bytesize import SizeStruct
Packit Service af52df
Packit Service af52df
DEFAULT_LOCALE = "en_US.utf8"
Packit Service af52df
Packit Service af52df
class SizeTestCase(unittest.TestCase):
Packit Service af52df
Packit Service af52df
    @classmethod
Packit Service af52df
    def setUpClass(cls):
Packit Service af52df
        unittest.TestCase.setUpClass()
Packit Service af52df
        cls.avail_locales = get_avail_locales()
Packit Service af52df
Packit Service af52df
    @requires_locales({DEFAULT_LOCALE})
Packit Service af52df
    def setUp(self):
Packit Service af52df
        locale.setlocale(locale.LC_ALL, DEFAULT_LOCALE)
Packit Service af52df
        self.addCleanup(self._clean_up)
Packit Service af52df
Packit Service af52df
    def _clean_up(self):
Packit Service af52df
        locale.setlocale(locale.LC_ALL, DEFAULT_LOCALE)
Packit Service af52df
Packit Service af52df
    def testNew(self):
Packit Service af52df
        actual = SizeStruct.new().get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
    @requires_locales({'cs_CZ.UTF-8', 'ps_AF.UTF-8', 'en_US.UTF-8'})
Packit Service af52df
    def testNewFromStr(self):
Packit Service af52df
        actual = SizeStruct.new_from_str('0 B').get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1 KiB').get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1KB').get_bytes()
Packit Service af52df
        expected = (1000, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1 MiB').get_bytes()
Packit Service af52df
        expected = (1048576, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('   1 MiB').get_bytes()
Packit Service af52df
        expected = (1048576, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1 MiB    ').get_bytes()
Packit Service af52df
        expected = (1048576, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('    1 MiB   ').get_bytes()
Packit Service af52df
        expected = (1048576, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1.5 GiB').get_bytes()
Packit Service af52df
        expected = (1610612736, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('+1.5 GiB').get_bytes()
Packit Service af52df
        expected = (1610612736, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        locale.setlocale(locale.LC_ALL,'cs_CZ.UTF-8')
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1,5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1,5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1.5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1.5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1e-1 KB').get_bytes()
Packit Service af52df
        expected = (100, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1e-1 KB').get_bytes()
Packit Service af52df
        expected = (100, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # this persian locale uses a two-byte unicode character for the radix
Packit Service af52df
        locale.setlocale(locale.LC_ALL, 'ps_AF.UTF-8')
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1٫5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1٫5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('1.5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_str('-1.5 KiB').get_bytes()
Packit Service af52df
        expected = (1536, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        locale.setlocale(locale.LC_ALL, DEFAULT_LOCALE)
Packit Service af52df
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testNewFromBytes(self):
Packit Service af52df
        actual = SizeStruct.new_from_bytes(0, 0).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_bytes(10, 1).get_bytes()
Packit Service af52df
        expected = (10, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        actual = SizeStruct.new_from_bytes(1024, -1).get_bytes()
Packit Service af52df
        expected = (1024, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # now let's try something bigger than MAXUINT32
Packit Service af52df
        actual = SizeStruct.new_from_bytes(5718360*1024, 1).get_bytes()
Packit Service af52df
        expected = (5718360*1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testNewFromSizeStruct(self):
Packit Service af52df
        tempSizeStruct = SizeStruct.new_from_bytes(17, 1)
Packit Service af52df
        actual = SizeStruct.new_from_size(tempSizeStruct).get_bytes()
Packit Service af52df
        expected = (17, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testAdd(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        actual = x.add(y).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        actual = x.add(y).get_bytes()
Packit Service af52df
        expected = (8, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, -1)
Packit Service af52df
        actual = x.add(y).get_bytes()
Packit Service af52df
        expected = (24, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, -1)
Packit Service af52df
        actual = x.add(y).get_bytes()
Packit Service af52df
        expected = (16, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        y = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        actual = x.add(y).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
Packit Service af52df
    def testAddBytes(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        actual = x.add_bytes(16).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        actual = x.add_bytes(8).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        actual = x.add_bytes(0).get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # try some big value (bigger than ULONG_MAX on 32bit arches)
Packit Service af52df
        x = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        actual = x.add_bytes(2**36).get_bytes()
Packit Service af52df
        expected = (2**36, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testSub(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        actual = x.sub(y).get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        actual = x.sub(y).get_bytes()
Packit Service af52df
        expected = (24, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, -1)
Packit Service af52df
        actual = x.sub(y).get_bytes()
Packit Service af52df
        expected = (8, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, -1)
Packit Service af52df
        actual = x.sub(y).get_bytes()
Packit Service af52df
        expected = (16, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        y = SizeStruct.new_from_bytes(0, 0)
Packit Service af52df
        actual = x.sub(y).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testSubBytes(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        actual = x.sub_bytes(16).get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        actual = x.sub_bytes(8).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, -1)
Packit Service af52df
        actual = x.sub_bytes(0).get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # try some big value (bigger than ULONG_MAX on 32bit arches)
Packit Service af52df
        x = SizeStruct.new_from_bytes(2**36 + 10, 1)
Packit Service af52df
        actual = x.sub_bytes(2**36).get_bytes()
Packit Service af52df
        expected = (10, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testCmp(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        y = SizeStruct.new_from_str("-1 KiB")
Packit Service af52df
Packit Service af52df
        # params: SizeStruct x, SizeStruct y, bool abs
Packit Service af52df
        # result > 0
Packit Service af52df
        cmpResult = SizeStruct.cmp(x, y, False)
Packit Service af52df
        self.assertGreater(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result < 0
Packit Service af52df
        cmpResult = SizeStruct.cmp(y, x, False)
Packit Service af52df
        self.assertLess(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result == 0
Packit Service af52df
        cmpResult = SizeStruct.cmp(y, x, True)
Packit Service af52df
        self.assertEqual(cmpResult, 0)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testCmpBytes(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
Packit Service af52df
        # result > 0
Packit Service af52df
        y = 1023
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, False)
Packit Service af52df
        self.assertGreater(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result < 0
Packit Service af52df
        y = 1025
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, False)
Packit Service af52df
        self.assertLess(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result == 0
Packit Service af52df
        y = 1024
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, False)
Packit Service af52df
        self.assertEqual(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # test with abs == True
Packit Service af52df
        x = SizeStruct.new_from_str("-1 KiB")
Packit Service af52df
Packit Service af52df
        # result > 0
Packit Service af52df
        y = 1023
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, True)
Packit Service af52df
        self.assertGreater(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result < 0
Packit Service af52df
        y = 1025
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, True)
Packit Service af52df
        self.assertLess(cmpResult, 0)
Packit Service af52df
Packit Service af52df
        # result == 0
Packit Service af52df
        y = 1024
Packit Service af52df
        cmpResult = SizeStruct.cmp_bytes(x, y, True)
Packit Service af52df
        self.assertEqual(cmpResult, 0)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testConvertTo(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        x.convert_to(KiB)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testDiv(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        y = SizeStruct.new_from_str("-0.1 KiB")
Packit Service af52df
        divResult = x.div(y)
Packit Service af52df
        self.assertEqual(divResult, (10, -1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1 MiB")
Packit Service af52df
        y = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        divResult = x.div(y)
Packit Service af52df
        self.assertEqual(divResult, (1024, 1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1 GB")
Packit Service af52df
        y = SizeStruct.new_from_str("0.7 GB")
Packit Service af52df
        divResult = x.div(y)
Packit Service af52df
        self.assertEqual(divResult, (1, 1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-1 KiB")
Packit Service af52df
        y = SizeStruct.new_from_str("0.1 KiB")
Packit Service af52df
        divResult = x.div(y)
Packit Service af52df
        self.assertEqual(divResult, (10, -1))
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testDivInt(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1 MiB")
Packit Service af52df
        y = 1024
Packit Service af52df
        divResult = x.div_int(y).get_bytes()
Packit Service af52df
        self.assertEqual(divResult, (1024, 1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-1 MiB")
Packit Service af52df
        y = 1077
Packit Service af52df
        divResult = x.div_int(y).get_bytes()
Packit Service af52df
        self.assertEqual(divResult, (973, -1))
Packit Service af52df
Packit Service af52df
        try:
Packit Service af52df
            x = SizeStruct.new_from_bytes(2 * 2**36, 1)
Packit Service af52df
            y = 2**36
Packit Service af52df
            res = x.div_int(y).get_bytes()
Packit Service af52df
            self.assertEqual(res, (2, 1))
Packit Service af52df
        except OverflowError:
Packit Service af52df
            # ULONG_MAX is the real limit for division, if it's smaller than
Packit Service af52df
            # UINT64_MAX, an error is expected, otherwise it is a bug
Packit Service af52df
            if ctypes.sizeof(ctypes.c_ulong) == 4:
Packit Service af52df
                pass
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testGetBytesStr(self):
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("-1 KiB").get_bytes_str()
Packit Service af52df
        self.assertEqual(strSizeStruct, "-1024")
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    @requires_locales({'cs_CZ.UTF-8'})
Packit Service af52df
    def testHumanReadable(self):
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("12 KiB").human_readable(KiB, 2, False)
Packit Service af52df
        self.assertEqual(strSizeStruct, "12 KiB")
Packit Service af52df
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("1 KB").human_readable(KiB, 2, False)
Packit Service af52df
        self.assertEqual(strSizeStruct, "0.98 KiB")
Packit Service af52df
Packit Service af52df
        locale.setlocale(locale.LC_ALL, 'cs_CZ.UTF-8')
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("1 KB").human_readable(KiB, 2, True)
Packit Service af52df
        self.assertEqual(strSizeStruct, "0,98 KiB")
Packit Service af52df
        locale.setlocale(locale.LC_ALL, DEFAULT_LOCALE);
Packit Service af52df
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("100 GiB").human_readable(KiB, 2, False)
Packit Service af52df
        self.assertEqual(strSizeStruct, "100 GiB")
Packit Service af52df
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("100.00 GiB").human_readable(KiB, 2, False)
Packit Service af52df
        self.assertEqual(strSizeStruct, "100 GiB")
Packit Service af52df
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("100 GiB").human_readable(KiB, 0, False)
Packit Service af52df
        self.assertEqual(strSizeStruct, "100 GiB")
Packit Service af52df
Packit Service af52df
        # test that the result of human_readable() can be parsed back
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("100 GiB").human_readable(GiB, 0, False)
Packit Service af52df
        self.assertEqual(SizeStruct.new_from_str(strSizeStruct).get_bytes(), (100 * 1024**3, 1))
Packit Service af52df
Packit Service af52df
        # even if translated
Packit Service af52df
        strSizeStruct = SizeStruct.new_from_str("100 GiB").human_readable(GiB, 0, True)
Packit Service af52df
        self.assertEqual(SizeStruct.new_from_str(strSizeStruct).get_bytes(), (100 * 1024**3, 1))
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testSgn(self):
Packit Service af52df
        sgn = SizeStruct.new_from_str("12 KiB").sgn()
Packit Service af52df
        self.assertEqual(sgn, 1)
Packit Service af52df
Packit Service af52df
        sgn = SizeStruct.new_from_str("0 MB").sgn()
Packit Service af52df
        self.assertEqual(sgn, 0)
Packit Service af52df
Packit Service af52df
        sgn = SizeStruct.new_from_str("-12 GiB").sgn()
Packit Service af52df
        self.assertEqual(sgn, -1)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testTrueDiv(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("-102.4 B") # rounds to whole bytes
Packit Service af52df
        divResult = float(x.true_div(y)[:15].replace(locale.nl_langinfo(locale.RADIXCHAR), ".")) # just some number to cover accurancy and not cross max float range
Packit Service af52df
        self.assertAlmostEqual(divResult, 1024.0/-102.0)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1 MiB")
Packit Service af52df
        y = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        divResult = float(x.true_div(y)[:15].replace(locale.nl_langinfo(locale.RADIXCHAR), ".")) # just some number to cover accurancy and not cross max float range
Packit Service af52df
        self.assertAlmostEqual(divResult, 1024.0)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testMod(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("1000 B")
Packit Service af52df
        actual = x.mod(y).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # when modding the signs are ignored
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("-1000 B")
Packit Service af52df
        actual = x.mod(y).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("1000 B")
Packit Service af52df
        actual = x.mod(y).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("-1000 B")
Packit Service af52df
        actual = x.mod(y).get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        y = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        actual = x.mod(y).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testMulFloatStr(self):
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        actual = x.mul_float_str("1.51").get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, 1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-8 B")
Packit Service af52df
        actual = x.mul_float_str("1.51").get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, -1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        actual = x.mul_float_str("-1.51").get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, -1))
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testMulInt(self):
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        y = 2
Packit Service af52df
        actual = x.mul_int(y).get_bytes()
Packit Service af52df
        expected = (16, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("0 B")
Packit Service af52df
        y = 1
Packit Service af52df
        actual = x.mul_int(y).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("10 B")
Packit Service af52df
        y = 0
Packit Service af52df
        actual = x.mul_int(y).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(4, 1)
Packit Service af52df
        y = 2**36
Packit Service af52df
        actual = x.mul_int(y).get_bytes()
Packit Service af52df
        expected = (4 * 2**36, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testRoundToNearest(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1500 B")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (2048, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1500 B")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1500 B")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("10 KiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1024 B")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("1 KiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1023 B")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1025 B")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (2048, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1535 B")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (2048, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("1536 B")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_DOWN).get_bytes()
Packit Service af52df
        expected = (1024, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_UP).get_bytes()
Packit Service af52df
        expected = (2048, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes()
Packit Service af52df
        expected = (2048, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        # now check something bigger
Packit Service af52df
        x = SizeStruct.new_from_str("575 GiB")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("128 GiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes_str()
Packit Service af52df
        expected = SizeStruct.new_from_str("512 GiB").get_bytes_str()
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("576 GiB")
Packit Service af52df
        roundTo = SizeStruct.new_from_str("128 GiB")
Packit Service af52df
        actual = x.round_to_nearest(roundTo, ROUND_HALF_UP).get_bytes_str()
Packit Service af52df
        expected = SizeStruct.new_from_str("640 GiB").get_bytes_str()
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testGrow(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        x.grow(y)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testGrowBytes(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        x.grow_bytes(8)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (24, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        x.grow_bytes(2**36)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (16 + 2**36, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testGrowMulFloatStr(self):
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        x.grow_mul_float_str("1.51")
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, 1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-8 B")
Packit Service af52df
        x.grow_mul_float_str("1.51")
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, -1))
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        x.grow_mul_float_str("-1.51")
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        self.assertEqual(actual, (12, -1))
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testGrowMulInt(self):
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        x.grow_mul_int(2)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (16, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("0 B")
Packit Service af52df
        x.grow_mul_int(1)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("10 B")
Packit Service af52df
        x.grow_mul_int(0)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (0, 0)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(4, 1)
Packit Service af52df
        x.grow_mul_int(2**36)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (4 * 2**36, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testShrink(self):
Packit Service af52df
        x = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        x.shrink(y)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (8, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(8, 1)
Packit Service af52df
        y = SizeStruct.new_from_bytes(16, 1)
Packit Service af52df
        x.shrink(y)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testShrinkBytes(self):
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        x.shrink_bytes(2)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (6, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("8 B")
Packit Service af52df
        x.shrink_bytes(16)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (8, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-8 B")
Packit Service af52df
        x.shrink_bytes(8)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (16, -1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(2 * 2**36, 1)
Packit Service af52df
        x.shrink_bytes(2**36)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (2**36, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testShrinkDivInt(self):
Packit Service af52df
        x = SizeStruct.new_from_str("100 B")
Packit Service af52df
        y = 11
Packit Service af52df
        x.shrink_div_int(y)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (9, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("98 B")
Packit Service af52df
        y = 11
Packit Service af52df
        x.shrink_div_int(y)
Packit Service af52df
        actual = x.get_bytes()
Packit Service af52df
        expected = (8, 1)
Packit Service af52df
        self.assertEqual(actual, expected)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(2 * 2**36, 1)
Packit Service af52df
        y = 2**36
Packit Service af52df
        try:
Packit Service af52df
            res = x.shrink_div_int(y).get_bytes()
Packit Service af52df
            self.assertEqual(res, (2, 1))
Packit Service af52df
        except OverflowError:
Packit Service af52df
            # ULONG_MAX is the real limit for division, if it's smaller than
Packit Service af52df
            # UINT64_MAX, an error is expected, otherwise it is a bug
Packit Service af52df
            if ctypes.sizeof(ctypes.c_ulong) == 4:
Packit Service af52df
                pass
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
    def testTrueDivInt(self):
Packit Service af52df
        x = SizeStruct.new_from_str("1000 B")
Packit Service af52df
        y = 100
Packit Service af52df
        divResult = float(x.true_div_int(y)[:15]) # just some number to cover accuracy and not cross max float range
Packit Service af52df
        self.assertAlmostEqual(divResult, 1000.0/100.0)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("-1 MiB")
Packit Service af52df
        y = 1024
Packit Service af52df
        divResult = float(x.true_div_int(y)[:15]) # just some number to cover accuracy and not cross max float range
Packit Service af52df
        self.assertAlmostEqual(divResult, -1024.0)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_str("0 MiB")
Packit Service af52df
        y = 1024
Packit Service af52df
        divResult = float(x.true_div_int(y)[:15]) # just some number to cover accuracy and not cross max float range
Packit Service af52df
        self.assertAlmostEqual(divResult, 0.0)
Packit Service af52df
Packit Service af52df
        x = SizeStruct.new_from_bytes(10 * 2**36, 1)
Packit Service af52df
        y = 2**36
Packit Service af52df
        try:
Packit Service af52df
            res = float(x.true_div_int(y)[:15])
Packit Service af52df
            self.assertAlmostEqual(res, 10.0)
Packit Service af52df
        except OverflowError:
Packit Service af52df
            # ULONG_MAX is the real limit for division, if it's smaller than
Packit Service af52df
            # UINT64_MAX, an error is expected, otherwise it is a bug
Packit Service af52df
            if ctypes.sizeof(ctypes.c_ulong) == 4:
Packit Service af52df
                pass
Packit Service af52df
    #enddef
Packit Service af52df
Packit Service af52df
#endclass
Packit Service af52df
Packit Service af52df
Packit Service af52df
# script entry point
Packit Service af52df
if __name__=='__main__':
Packit Service af52df
    if len(sys.argv) > 1:
Packit Service af52df
        DEFAULT_LOCALE = sys.argv[1]
Packit Service af52df
        # the unittest module would try to intepret the argument too, let's
Packit Service af52df
        # remove it
Packit Service af52df
        sys.argv = [sys.argv[0]]
Packit Service af52df
    unittest.main()
Packit Service af52df
#endif