def test_rivine_types(): e = RivineBinaryEncoder() # in the rivine_basic test we saw we can # serialise anything using the add method. # One can however also directly encode the specific type as desired, # which allows for example the encoding of an integer as a specific byte size. e.add_int8(1) e.add_int16(2) e.add_int24(3) e.add_int32(4) e.add_int64(5) # a single byte can be added as well e.add_byte(6) e.add_byte('4') e.add_byte(b'2') # array are like slices, but have no length prefix, # therefore this is only useful if there is a fixed amount of elements, # known by all parties e.add_array([False, True, True]) # the result is a single bytearray jsass.equals(e.data, b'\x01\x02\x00\x03\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x0642\x00\x01\x01')
def test_rivine_limits(): e = RivineBinaryEncoder() # everything has limits, so do types, # that is what this test is about # no integer can be negative jsass.raises(IntegerOutOfRange, lambda _: e.add(-1)) jsass.raises(IntegerOutOfRange, lambda _: e.add_int64(-1)) jsass.raises(IntegerOutOfRange, lambda _: e.add_int32(-1)) jsass.raises(IntegerOutOfRange, lambda _: e.add_int24(-1)) jsass.raises(IntegerOutOfRange, lambda _: e.add_int16(-1)) jsass.raises(IntegerOutOfRange, lambda _: e.add_int8(-1)) # integers have upper limits as well # NOTE: javascript seems to automatically wrap around, turning `1 << 64` into `1` # jsass.raises(IntegerOutOfRange, lambda _: e.add(1 << 64)) # jsass.raises(IntegerOutOfRange, lambda _: e.add_int64(pow(2, 64))) jsass.raises(IntegerOutOfRange, lambda _: e.add_int32(pow(2, 32))) jsass.raises(IntegerOutOfRange, lambda _: e.add_int24(pow(2, 24))) jsass.raises(IntegerOutOfRange, lambda _: e.add_int16(pow(2, 16))) jsass.raises(IntegerOutOfRange, lambda _: e.add_int8(pow(2, 8)))