Example #1
0
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')
Example #2
0
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)))