def test_log_distance(self): id0 = Id(BIN_ID0) id1 = Id(BIN_ID1) id2 = Id(BIN_ID2) eq_(id0.log_distance(id0), -1) eq_(id0.log_distance(id1), ID_SIZE_BITS - 8) eq_(id0.log_distance(id2), ID_SIZE_BITS - 7) id_log = ( (Id('\x00' + '\xff' * (ID_SIZE_BYTES - 1)), BITS_PER_BYTE * (ID_SIZE_BYTES - 1) - 1), (Id('\x53' * ID_SIZE_BYTES), BITS_PER_BYTE * ID_SIZE_BYTES - 2), (Id(BIN_ID0[:7] + '\xff' * (ID_SIZE_BYTES - 7)), (ID_SIZE_BYTES - 7) * BITS_PER_BYTE - 1), (Id(BIN_ID0[:9] + '\x01' * (ID_SIZE_BYTES - 9)), (ID_SIZE_BYTES - 10) * BITS_PER_BYTE), (Id(BIN_ID0[:-1] + '\x06'), 2), ) id2_log = ( (Id('\x41' * ID_SIZE_BYTES), Id('\x41' * ID_SIZE_BYTES), -1), (Id('\x41' * ID_SIZE_BYTES), Id('\x01' * ID_SIZE_BYTES), 158), (Id('\x41' * ID_SIZE_BYTES), Id('\x43' * ID_SIZE_BYTES), 153), ) for (id_, log_) in id_log: logger.debug('log_distance: %d' % id0.log_distance(id_)) logger.debug('expected: %d' % log_) eq_(id0.log_distance(id_), log_) for id1, id2, expected in id2_log: eq_(id1.log_distance(id2), expected) z = Id('\0'*20) eq_(z.log_distance(Id('\x00'*19+'\x00')), -1) eq_(z.log_distance(Id('\x00'*19+'\x00')), -1) eq_(z.log_distance(Id('\x00'*19+'\x00')), -1) eq_(z.log_distance(Id('\x00'*19+'\x00')), -1) eq_(z.log_distance(Id('\x00'*19+'\x00')), -1)