84
104
test_util.SetAllPackedExtensions(all_set)
85
105
self.assertEquals(all_set, golden_message)
86
106
self.assertTrue(all_set.SerializeToString() == golden_data)
107
golden_copy = copy.deepcopy(golden_message)
108
self.assertTrue(golden_copy.SerializeToString() == golden_data)
110
def testPositiveInfinity(self):
111
golden_data = ('\x5D\x00\x00\x80\x7F'
112
'\x61\x00\x00\x00\x00\x00\x00\xF0\x7F'
113
'\xCD\x02\x00\x00\x80\x7F'
114
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\x7F')
115
golden_message = unittest_pb2.TestAllTypes()
116
golden_message.ParseFromString(golden_data)
117
self.assertTrue(IsPosInf(golden_message.optional_float))
118
self.assertTrue(IsPosInf(golden_message.optional_double))
119
self.assertTrue(IsPosInf(golden_message.repeated_float[0]))
120
self.assertTrue(IsPosInf(golden_message.repeated_double[0]))
121
self.assertTrue(golden_message.SerializeToString() == golden_data)
123
def testNegativeInfinity(self):
124
golden_data = ('\x5D\x00\x00\x80\xFF'
125
'\x61\x00\x00\x00\x00\x00\x00\xF0\xFF'
126
'\xCD\x02\x00\x00\x80\xFF'
127
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\xFF')
128
golden_message = unittest_pb2.TestAllTypes()
129
golden_message.ParseFromString(golden_data)
130
self.assertTrue(IsNegInf(golden_message.optional_float))
131
self.assertTrue(IsNegInf(golden_message.optional_double))
132
self.assertTrue(IsNegInf(golden_message.repeated_float[0]))
133
self.assertTrue(IsNegInf(golden_message.repeated_double[0]))
134
self.assertTrue(golden_message.SerializeToString() == golden_data)
136
def testNotANumber(self):
137
golden_data = ('\x5D\x00\x00\xC0\x7F'
138
'\x61\x00\x00\x00\x00\x00\x00\xF8\x7F'
139
'\xCD\x02\x00\x00\xC0\x7F'
140
'\xD1\x02\x00\x00\x00\x00\x00\x00\xF8\x7F')
141
golden_message = unittest_pb2.TestAllTypes()
142
golden_message.ParseFromString(golden_data)
143
self.assertTrue(isnan(golden_message.optional_float))
144
self.assertTrue(isnan(golden_message.optional_double))
145
self.assertTrue(isnan(golden_message.repeated_float[0]))
146
self.assertTrue(isnan(golden_message.repeated_double[0]))
147
self.assertTrue(golden_message.SerializeToString() == golden_data)
149
def testPositiveInfinityPacked(self):
150
golden_data = ('\xA2\x06\x04\x00\x00\x80\x7F'
151
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\x7F')
152
golden_message = unittest_pb2.TestPackedTypes()
153
golden_message.ParseFromString(golden_data)
154
self.assertTrue(IsPosInf(golden_message.packed_float[0]))
155
self.assertTrue(IsPosInf(golden_message.packed_double[0]))
156
self.assertTrue(golden_message.SerializeToString() == golden_data)
158
def testNegativeInfinityPacked(self):
159
golden_data = ('\xA2\x06\x04\x00\x00\x80\xFF'
160
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\xFF')
161
golden_message = unittest_pb2.TestPackedTypes()
162
golden_message.ParseFromString(golden_data)
163
self.assertTrue(IsNegInf(golden_message.packed_float[0]))
164
self.assertTrue(IsNegInf(golden_message.packed_double[0]))
165
self.assertTrue(golden_message.SerializeToString() == golden_data)
167
def testNotANumberPacked(self):
168
golden_data = ('\xA2\x06\x04\x00\x00\xC0\x7F'
169
'\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF8\x7F')
170
golden_message = unittest_pb2.TestPackedTypes()
171
golden_message.ParseFromString(golden_data)
172
self.assertTrue(isnan(golden_message.packed_float[0]))
173
self.assertTrue(isnan(golden_message.packed_double[0]))
174
self.assertTrue(golden_message.SerializeToString() == golden_data)
176
def testExtremeFloatValues(self):
177
message = unittest_pb2.TestAllTypes()
179
# Most positive exponent, no significand bits set.
180
kMostPosExponentNoSigBits = math.pow(2, 127)
181
message.optional_float = kMostPosExponentNoSigBits
182
message.ParseFromString(message.SerializeToString())
183
self.assertTrue(message.optional_float == kMostPosExponentNoSigBits)
185
# Most positive exponent, one significand bit set.
186
kMostPosExponentOneSigBit = 1.5 * math.pow(2, 127)
187
message.optional_float = kMostPosExponentOneSigBit
188
message.ParseFromString(message.SerializeToString())
189
self.assertTrue(message.optional_float == kMostPosExponentOneSigBit)
191
# Repeat last two cases with values of same magnitude, but negative.
192
message.optional_float = -kMostPosExponentNoSigBits
193
message.ParseFromString(message.SerializeToString())
194
self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits)
196
message.optional_float = -kMostPosExponentOneSigBit
197
message.ParseFromString(message.SerializeToString())
198
self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit)
200
# Most negative exponent, no significand bits set.
201
kMostNegExponentNoSigBits = math.pow(2, -127)
202
message.optional_float = kMostNegExponentNoSigBits
203
message.ParseFromString(message.SerializeToString())
204
self.assertTrue(message.optional_float == kMostNegExponentNoSigBits)
206
# Most negative exponent, one significand bit set.
207
kMostNegExponentOneSigBit = 1.5 * math.pow(2, -127)
208
message.optional_float = kMostNegExponentOneSigBit
209
message.ParseFromString(message.SerializeToString())
210
self.assertTrue(message.optional_float == kMostNegExponentOneSigBit)
212
# Repeat last two cases with values of the same magnitude, but negative.
213
message.optional_float = -kMostNegExponentNoSigBits
214
message.ParseFromString(message.SerializeToString())
215
self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits)
217
message.optional_float = -kMostNegExponentOneSigBit
218
message.ParseFromString(message.SerializeToString())
219
self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit)
221
def testExtremeFloatValues(self):
222
message = unittest_pb2.TestAllTypes()
224
# Most positive exponent, no significand bits set.
225
kMostPosExponentNoSigBits = math.pow(2, 1023)
226
message.optional_double = kMostPosExponentNoSigBits
227
message.ParseFromString(message.SerializeToString())
228
self.assertTrue(message.optional_double == kMostPosExponentNoSigBits)
230
# Most positive exponent, one significand bit set.
231
kMostPosExponentOneSigBit = 1.5 * math.pow(2, 1023)
232
message.optional_double = kMostPosExponentOneSigBit
233
message.ParseFromString(message.SerializeToString())
234
self.assertTrue(message.optional_double == kMostPosExponentOneSigBit)
236
# Repeat last two cases with values of same magnitude, but negative.
237
message.optional_double = -kMostPosExponentNoSigBits
238
message.ParseFromString(message.SerializeToString())
239
self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits)
241
message.optional_double = -kMostPosExponentOneSigBit
242
message.ParseFromString(message.SerializeToString())
243
self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit)
245
# Most negative exponent, no significand bits set.
246
kMostNegExponentNoSigBits = math.pow(2, -1023)
247
message.optional_double = kMostNegExponentNoSigBits
248
message.ParseFromString(message.SerializeToString())
249
self.assertTrue(message.optional_double == kMostNegExponentNoSigBits)
251
# Most negative exponent, one significand bit set.
252
kMostNegExponentOneSigBit = 1.5 * math.pow(2, -1023)
253
message.optional_double = kMostNegExponentOneSigBit
254
message.ParseFromString(message.SerializeToString())
255
self.assertTrue(message.optional_double == kMostNegExponentOneSigBit)
257
# Repeat last two cases with values of the same magnitude, but negative.
258
message.optional_double = -kMostNegExponentNoSigBits
259
message.ParseFromString(message.SerializeToString())
260
self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits)
262
message.optional_double = -kMostNegExponentOneSigBit
263
message.ParseFromString(message.SerializeToString())
264
self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit)
266
def testSortingRepeatedScalarFieldsDefaultComparator(self):
267
"""Check some different types with the default comparator."""
268
message = unittest_pb2.TestAllTypes()
270
# TODO(mattp): would testing more scalar types strengthen test?
271
message.repeated_int32.append(1)
272
message.repeated_int32.append(3)
273
message.repeated_int32.append(2)
274
message.repeated_int32.sort()
275
self.assertEqual(message.repeated_int32[0], 1)
276
self.assertEqual(message.repeated_int32[1], 2)
277
self.assertEqual(message.repeated_int32[2], 3)
279
message.repeated_float.append(1.1)
280
message.repeated_float.append(1.3)
281
message.repeated_float.append(1.2)
282
message.repeated_float.sort()
283
self.assertAlmostEqual(message.repeated_float[0], 1.1)
284
self.assertAlmostEqual(message.repeated_float[1], 1.2)
285
self.assertAlmostEqual(message.repeated_float[2], 1.3)
287
message.repeated_string.append('a')
288
message.repeated_string.append('c')
289
message.repeated_string.append('b')
290
message.repeated_string.sort()
291
self.assertEqual(message.repeated_string[0], 'a')
292
self.assertEqual(message.repeated_string[1], 'b')
293
self.assertEqual(message.repeated_string[2], 'c')
295
message.repeated_bytes.append('a')
296
message.repeated_bytes.append('c')
297
message.repeated_bytes.append('b')
298
message.repeated_bytes.sort()
299
self.assertEqual(message.repeated_bytes[0], 'a')
300
self.assertEqual(message.repeated_bytes[1], 'b')
301
self.assertEqual(message.repeated_bytes[2], 'c')
303
def testSortingRepeatedScalarFieldsCustomComparator(self):
304
"""Check some different types with custom comparator."""
305
message = unittest_pb2.TestAllTypes()
307
message.repeated_int32.append(-3)
308
message.repeated_int32.append(-2)
309
message.repeated_int32.append(-1)
310
message.repeated_int32.sort(lambda x,y: cmp(abs(x), abs(y)))
311
self.assertEqual(message.repeated_int32[0], -1)
312
self.assertEqual(message.repeated_int32[1], -2)
313
self.assertEqual(message.repeated_int32[2], -3)
315
message.repeated_string.append('aaa')
316
message.repeated_string.append('bb')
317
message.repeated_string.append('c')
318
message.repeated_string.sort(lambda x,y: cmp(len(x), len(y)))
319
self.assertEqual(message.repeated_string[0], 'c')
320
self.assertEqual(message.repeated_string[1], 'bb')
321
self.assertEqual(message.repeated_string[2], 'aaa')
323
def testSortingRepeatedCompositeFieldsCustomComparator(self):
324
"""Check passing a custom comparator to sort a repeated composite field."""
325
message = unittest_pb2.TestAllTypes()
327
message.repeated_nested_message.add().bb = 1
328
message.repeated_nested_message.add().bb = 3
329
message.repeated_nested_message.add().bb = 2
330
message.repeated_nested_message.add().bb = 6
331
message.repeated_nested_message.add().bb = 5
332
message.repeated_nested_message.add().bb = 4
333
message.repeated_nested_message.sort(lambda x,y: cmp(x.bb, y.bb))
334
self.assertEqual(message.repeated_nested_message[0].bb, 1)
335
self.assertEqual(message.repeated_nested_message[1].bb, 2)
336
self.assertEqual(message.repeated_nested_message[2].bb, 3)
337
self.assertEqual(message.repeated_nested_message[3].bb, 4)
338
self.assertEqual(message.repeated_nested_message[4].bb, 5)
339
self.assertEqual(message.repeated_nested_message[5].bb, 6)
88
342
if __name__ == '__main__':