def testnotanumber(self): golden_data = ( "\x5d\x00\x00\xc0\x7f" "\x61\x00\x00\x00\x00\x00\x00\xf8\x7f" "\xcd\x02\x00\x00\xc0\x7f" "\xd1\x02\x00\x00\x00\x00\x00\x00\xf8\x7f" ) golden_message = unittest_pb2.testalltypes() golden_message.parsefromstring(golden_data) self.asserttrue(isnan(golden_message.optional_float)) self.asserttrue(isnan(golden_message.optional_double)) self.asserttrue(isnan(golden_message.repeated_float[0])) self.asserttrue(isnan(golden_message.repeated_double[0])) # the protocol buffer may serialize to any one of multiple different # representations of a nan. rather than verify a specific representation, # verify the serialized string can be converted into a correctly # behaving protocol buffer. serialized = golden_message.serializetostring() message = unittest_pb2.testalltypes() message.parsefromstring(serialized) self.asserttrue(isnan(message.optional_float)) self.asserttrue(isnan(message.optional_double)) self.asserttrue(isnan(message.repeated_float[0])) self.asserttrue(isnan(message.repeated_double[0]))
def testnotanumberpacked(self): golden_data = "\xa2\x06\x04\x00\x00\xc0\x7f" "\xaa\x06\x08\x00\x00\x00\x00\x00\x00\xf8\x7f" golden_message = unittest_pb2.testpackedtypes() golden_message.parsefromstring(golden_data) self.asserttrue(isnan(golden_message.packed_float[0])) self.asserttrue(isnan(golden_message.packed_double[0])) serialized = golden_message.serializetostring() message = unittest_pb2.testpackedtypes() message.parsefromstring(serialized) self.asserttrue(isnan(message.packed_float[0])) self.asserttrue(isnan(message.packed_double[0]))
def testextremedoublevalues(self): message = unittest_pb2.testalltypes() # most positive exponent, no significand bits set. kmostposexponentnosigbits = math.pow(2, 1023) message.optional_double = kmostposexponentnosigbits message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == kmostposexponentnosigbits) # most positive exponent, one significand bit set. kmostposexponentonesigbit = 1.5 * math.pow(2, 1023) message.optional_double = kmostposexponentonesigbit message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == kmostposexponentonesigbit) # repeat last two cases with values of same magnitude, but negative. message.optional_double = -kmostposexponentnosigbits message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == -kmostposexponentnosigbits) message.optional_double = -kmostposexponentonesigbit message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == -kmostposexponentonesigbit) # most negative exponent, no significand bits set. kmostnegexponentnosigbits = math.pow(2, -1023) message.optional_double = kmostnegexponentnosigbits message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == kmostnegexponentnosigbits) # most negative exponent, one significand bit set. kmostnegexponentonesigbit = 1.5 * math.pow(2, -1023) message.optional_double = kmostnegexponentonesigbit message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == kmostnegexponentonesigbit) # repeat last two cases with values of the same magnitude, but negative. message.optional_double = -kmostnegexponentnosigbits message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == -kmostnegexponentnosigbits) message.optional_double = -kmostnegexponentonesigbit message.parsefromstring(message.serializetostring()) self.asserttrue(message.optional_double == -kmostnegexponentonesigbit)