def round_trip(self, nnn): """ Test writing and reading a varint as the first and only field in a buffer. """ # -- write varint ------------------------------------------- field_nbr = 1 + self.rng.next_int16(1024) chan = Channel(LEN_BUFFER) write_varint_field(chan, nnn, field_nbr) chan.flip() # -- read varint -------------------------------------------- # first the header (which is a varint) ------------ (prim_type, field_nbr2) = read_field_hdr(chan) offset2 = chan.position self.assertEqual(PrimTypes.VARINT, prim_type) self.assertEqual(field_nbr, field_nbr2) self.assertEqual(length_as_varint(field_nbr << 3), offset2) # then the varint proper -------------------------- varint_ = read_raw_varint(chan) chan.flip() offset3 = chan.limit self.assertEqual(nnn, varint_) self.assertEqual(offset2 + length_as_varint(nnn), offset3)
def vbool_put(chan, val, nnn): if val is True: write_varint_field(chan, 1, nnn) else: write_varint_field(chan, 0, nnn)
def vsint64_put(chan, val, nnn): varint_ = encode_sint64(val) write_varint_field(chan, varint_, nnn)
def vuint64_put(chan, val, nnn): varint_ = 0xffffffffffffffff & val write_varint_field(chan, varint_, nnn)
def venum_put(chan, val, nnn): # just handle enums as simple ints for now, but constrain # to 16 bits; any sign is uhm mangled varint_ = 0xffff & val write_varint_field(chan, varint_, nnn)