def test_crc32(): """ When called with a string, rzlib.crc32 should compute its CRC32 and return it as a unsigned 32 bit integer. """ assert rzlib.crc32('') == r_uint(0) assert rzlib.crc32('\0') == r_uint(3523407757) assert rzlib.crc32('hello, world.') == r_uint(3358036098)
def crc32(space, string, w_start = rzlib.CRC32_DEFAULT_START): """ crc32(string[, start]) -- Compute a CRC-32 checksum of string. An optional starting value can be specified. The returned checksum is an integer. """ if space.is_true(space.isinstance(w_start, space.w_long)): num = space.bigint_w(w_start) ustart = num.uintmask() elif space.is_true(space.isinstance(w_start, space.w_int)): start = space.int_w(w_start) ustart = r_uint(start) else: raise OperationError(space.w_TypeError, space.wrap("crc32() argument 2 must " "be integer<k>, not str")) checksum = rzlib.crc32(string, ustart) # This is, perhaps, a little stupid. zlib returns the checksum unsigned. # CPython exposes it as a signed value, though. -exarkun # Note that in CPython < 2.6 on 64-bit platforms the result is # actually unsigned, but it was considered to be a bug so we stick to # the 2.6 behavior and always return a number in range(-2**31, 2**31). checksum = unsigned_to_signed_32bit(checksum) return space.wrap(checksum)
def crc32(space, string, w_start=rzlib.CRC32_DEFAULT_START): """ crc32(string[, start]) -- Compute a CRC-32 checksum of string. An optional starting value can be specified. The returned checksum is an integer. """ if space.is_true(space.isinstance(w_start, space.w_long)): num = space.bigint_w(w_start) ustart = num.uintmask() elif space.is_true(space.isinstance(w_start, space.w_int)): start = space.int_w(w_start) ustart = r_uint(start) else: raise OperationError( space.w_TypeError, space.wrap("crc32() argument 2 must " "be integer<k>, not str")) checksum = rzlib.crc32(string, ustart) # This is, perhaps, a little stupid. zlib returns the checksum unsigned. # CPython exposes it as a signed value, though. -exarkun # Note that in CPython < 2.6 on 64-bit platforms the result is # actually unsigned, but it was considered to be a bug so we stick to # the 2.6 behavior and always return a number in range(-2**31, 2**31). checksum = unsigned_to_signed_32bit(checksum) return space.wrap(checksum)
def crc32(space, string, start = rzlib.CRC32_DEFAULT_START): """ crc32(string[, start]) -- Compute a CRC-32 checksum of string. An optional starting value can be specified. The returned checksum is an integer. """ checksum = rzlib.crc32(string, start) # This is, perhaps, a little stupid. zlib returns the checksum unsigned. # CPython exposes it as a signed value, though. -exarkun # The value *is* unsigned on 64-bit platforms in CPython... bah. # For now let's do the same as CPython and boldly cast to a C long. -arigo checksum = intmask(checksum) return space.wrap(checksum)
def crc32(space, string, start=rzlib.CRC32_DEFAULT_START): """ crc32(string[, start]) -- Compute a CRC-32 checksum of string. An optional starting value can be specified. The returned checksum is an integer. """ checksum = rzlib.crc32(string, start) # This is, perhaps, a little stupid. zlib returns the checksum unsigned. # CPython exposes it as a signed value, though. -exarkun # Note that in CPython < 2.6 on 64-bit platforms the result is # actually unsigned, but it was considered to be a bug so we stick to # the 2.6 behavior and always return a number in range(-2**31, 2**31). checksum = unsigned_to_signed_32bit(checksum) return space.wrap(checksum)
def crc32(space, string, start = rzlib.CRC32_DEFAULT_START): """ crc32(string[, start]) -- Compute a CRC-32 checksum of string. An optional starting value can be specified. The returned checksum is an integer. """ ustart = r_uint(start) checksum = rzlib.crc32(string, ustart) # This is, perhaps, a little stupid. zlib returns the checksum unsigned. # CPython exposes it as a signed value, though. -exarkun # Note that in CPython < 2.6 on 64-bit platforms the result is # actually unsigned, but it was considered to be a bug so we stick to # the 2.6 behavior and always return a number in range(-2**31, 2**31). checksum = unsigned_to_signed_32bit(checksum) return space.wrap(checksum)
def test_crc32_start_value(): """ When called with a string and an integer, zlib.crc32 should compute the CRC32 of the string using the integer as the starting value. """ assert rzlib.crc32('', 42) == r_uint(42) assert rzlib.crc32('\0', 42) == r_uint(163128923) assert rzlib.crc32('hello, world.', 42) == r_uint(1090960721) hello = 'hello, ' hellocrc = rzlib.crc32(hello) world = 'world.' helloworldcrc = rzlib.crc32(world, hellocrc) assert helloworldcrc == rzlib.crc32(hello + world)