예제 #1
0
    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]))
예제 #2
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]))
예제 #3
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)