def testSub(self): x = SizeStruct.new_from_bytes(8, 1) y = SizeStruct.new_from_bytes(16, 1) actual = x.sub(y).get_bytes() expected = (8, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, -1) y = SizeStruct.new_from_bytes(16, 1) actual = x.sub(y).get_bytes() expected = (24, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, -1) y = SizeStruct.new_from_bytes(16, -1) actual = x.sub(y).get_bytes() expected = (8, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(0, 0) y = SizeStruct.new_from_bytes(16, -1) actual = x.sub(y).get_bytes() expected = (16, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(0, 0) y = SizeStruct.new_from_bytes(0, 0) actual = x.sub(y).get_bytes() expected = (0, 0) self.assertEqual(actual, expected)
def testGrow(self): x = SizeStruct.new_from_bytes(16, 1) y = SizeStruct.new_from_bytes(8, 1) x.grow(y) actual = x.get_bytes() expected = (24, 1) self.assertEqual(actual, expected)
def testGrowBytes(self): x = SizeStruct.new_from_bytes(16, 1) x.grow_bytes(8) actual = x.get_bytes() expected = (24, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(16, 1) x.grow_bytes(2**36) actual = x.get_bytes() expected = (16 + 2**36, 1) self.assertEqual(actual, expected)
def testNewFromBytes(self): actual = SizeStruct.new_from_bytes(0, 0).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(10, 1).get_bytes() expected = (10, 1) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(1024, -1).get_bytes() expected = (1024, -1) self.assertEqual(actual, expected)
def testShrink(self): x = SizeStruct.new_from_bytes(16, 1) y = SizeStruct.new_from_bytes(8, 1) x.shrink(y) actual = x.get_bytes() expected = (8, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, 1) y = SizeStruct.new_from_bytes(16, 1) x.shrink(y) actual = x.get_bytes() expected = (8, -1) self.assertEqual(actual, expected)
def testSubBytes(self): x = SizeStruct.new_from_bytes(8, 1) actual = x.sub_bytes(16).get_bytes() expected = (8, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, 1) actual = x.sub_bytes(8).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, -1) actual = x.sub_bytes(0).get_bytes() expected = (8, -1) self.assertEqual(actual, expected)
def testTrueDivInt(self): x = SizeStruct.new_from_str("1000 B") y = 100 divResult = float( x.true_div_int(y)[:15] ) # just some number to cover accuracy and not cross max float range self.assertAlmostEqual(divResult, 1000.0 / 100.0) x = SizeStruct.new_from_str("-1 MiB") y = 1024 divResult = float( x.true_div_int(y)[:15] ) # just some number to cover accuracy and not cross max float range self.assertAlmostEqual(divResult, -1024.0) x = SizeStruct.new_from_str("0 MiB") y = 1024 divResult = float( x.true_div_int(y)[:15] ) # just some number to cover accuracy and not cross max float range self.assertAlmostEqual(divResult, 0.0) x = SizeStruct.new_from_bytes(10 * 2**36, 1) y = 2**36 try: res = float(x.true_div_int(y)[:15]) self.assertAlmostEqual(res, 10.0) except OverflowError: # ULONG_MAX is the real limit for division, if it's smaller than # UINT64_MAX, an error is expected, otherwise it is a bug if ctypes.sizeof(ctypes.c_ulong) == 4: pass
def testShrinkDivInt(self): x = SizeStruct.new_from_str("100 B") y = 11 x.shrink_div_int(y) actual = x.get_bytes() expected = (9, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("98 B") y = 11 x.shrink_div_int(y) actual = x.get_bytes() expected = (8, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(2 * 2**36, 1) y = 2**36 try: res = x.shrink_div_int(y).get_bytes() self.assertEqual(res, (2, 1)) except OverflowError: # ULONG_MAX is the real limit for division, if it's smaller than # UINT64_MAX, an error is expected, otherwise it is a bug if ctypes.sizeof(ctypes.c_ulong) == 4: pass
def testNewFromBytes(self): actual = SizeStruct.new_from_bytes(0, 0).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(10, 1).get_bytes() expected = (10, 1) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(1024, -1).get_bytes() expected = (1024, -1) self.assertEqual(actual, expected) # now let's try something bigger than MAXUINT32 actual = SizeStruct.new_from_bytes(5718360 * 1024, 1).get_bytes() expected = (5718360 * 1024, 1) self.assertEqual(actual, expected)
def testNewFromBytes(self): actual = SizeStruct.new_from_bytes(0, 0).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(10, 1).get_bytes() expected = (10, 1) self.assertEqual(actual, expected) actual = SizeStruct.new_from_bytes(1024, -1).get_bytes() expected = (1024, -1) self.assertEqual(actual, expected) # now let's try something bigger than MAXUINT32 actual = SizeStruct.new_from_bytes(5718360*1024, 1).get_bytes() expected = (5718360*1024, 1) self.assertEqual(actual, expected)
def testSubBytes(self): x = SizeStruct.new_from_bytes(8, 1) actual = x.sub_bytes(16).get_bytes() expected = (8, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, 1) actual = x.sub_bytes(8).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(8, -1) actual = x.sub_bytes(0).get_bytes() expected = (8, -1) self.assertEqual(actual, expected) # try some big value (bigger than ULONG_MAX on 32bit arches) x = SizeStruct.new_from_bytes(2**36 + 10, 1) actual = x.sub_bytes(2**36).get_bytes() expected = (10, 1) self.assertEqual(actual, expected)
def testDivInt(self): x = SizeStruct.new_from_str("1 MiB") y = 1024 divResult = x.div_int(y).get_bytes() self.assertEqual(divResult, (1024, 1)) x = SizeStruct.new_from_str("-1 MiB") y = 1077 divResult = x.div_int(y).get_bytes() self.assertEqual(divResult, (973, -1)) try: x = SizeStruct.new_from_bytes(2 * 2**36, 1) y = 2**36 res = x.div_int(y).get_bytes() self.assertEqual(res, (2, 1)) except OverflowError: # ULONG_MAX is the real limit for division, if it's smaller than # UINT64_MAX, an error is expected, otherwise it is a bug if ctypes.sizeof(ctypes.c_ulong) == 4: pass
def testGrowMulInt(self): x = SizeStruct.new_from_str("8 B") x.grow_mul_int(2) actual = x.get_bytes() expected = (16, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("0 B") x.grow_mul_int(1) actual = x.get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("10 B") x.grow_mul_int(0) actual = x.get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(4, 1) x.grow_mul_int(2**36) actual = x.get_bytes() expected = (4 * 2**36, 1) self.assertEqual(actual, expected)
def testShrinkBytes(self): x = SizeStruct.new_from_str("8 B") x.shrink_bytes(2) actual = x.get_bytes() expected = (6, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("8 B") x.shrink_bytes(16) actual = x.get_bytes() expected = (8, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("-8 B") x.shrink_bytes(8) actual = x.get_bytes() expected = (16, -1) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(2 * 2**36, 1) x.shrink_bytes(2**36) actual = x.get_bytes() expected = (2**36, 1) self.assertEqual(actual, expected)
def testMulInt(self): x = SizeStruct.new_from_str("8 B") y = 2 actual = x.mul_int(y).get_bytes() expected = (16, 1) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("0 B") y = 1 actual = x.mul_int(y).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_str("10 B") y = 0 actual = x.mul_int(y).get_bytes() expected = (0, 0) self.assertEqual(actual, expected) x = SizeStruct.new_from_bytes(4, 1) y = 2**36 actual = x.mul_int(y).get_bytes() expected = (4 * 2**36, 1) self.assertEqual(actual, expected)
def testNewFromSizeStruct(self): tempSizeStruct = SizeStruct.new_from_bytes(17, 1) actual = SizeStruct.new_from_size(tempSizeStruct).get_bytes() expected = (17, 1) self.assertEqual(actual, expected)