OLD | NEW |
1 #!/usr/bin/env dart | 1 #!/usr/bin/env dart |
2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 @TestOn("dart-vm") | |
7 library pb_codec_tests; | 6 library pb_codec_tests; |
8 | 7 |
9 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
10 | 9 |
11 import 'package:protobuf/protobuf.dart'; | 10 import 'package:protobuf/protobuf.dart'; |
12 import 'package:test/test.dart'; | 11 import 'package:test/test.dart'; |
13 | 12 |
14 import 'test_util.dart'; | 13 import 'test_util.dart'; |
15 | 14 |
16 void main() { | 15 void main() { |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 readFloat(int bits) { | 178 readFloat(int bits) { |
180 var bytes = dataToBytes( | 179 var bytes = dataToBytes( |
181 new ByteData(4)..setUint32(0, bits, Endianness.LITTLE_ENDIAN)); | 180 new ByteData(4)..setUint32(0, bits, Endianness.LITTLE_ENDIAN)); |
182 return new CodedBufferReader(bytes).readFloat(); | 181 return new CodedBufferReader(bytes).readFloat(); |
183 } | 182 } |
184 | 183 |
185 expect(floatToBits(value), bits); | 184 expect(floatToBits(value), bits); |
186 expect(readFloat(bits), doubleEquals(value)); | 185 expect(readFloat(bits), doubleEquals(value)); |
187 } | 186 } |
188 | 187 |
| 188 final doubleToBytes = convertToBytes(PbFieldType.OD); |
| 189 |
189 void _test64(List<int> hilo, double value) { | 190 void _test64(List<int> hilo, double value) { |
190 readDouble(int bits) { | 191 // Encode a double to its wire format. |
191 var bytes = dataToBytes( | 192 ByteData data = makeData(doubleToBytes(value)); |
192 new ByteData(8)..setUint64(0, bits, Endianness.LITTLE_ENDIAN)); | 193 var actualHilo = [ |
193 return new CodedBufferReader(bytes).readDouble(); | 194 data.getUint32(4, Endianness.LITTLE_ENDIAN), |
194 } | 195 data.getUint32(0, Endianness.LITTLE_ENDIAN) |
| 196 ]; |
| 197 //int encoded = data.getUint64(0, Endianness.LITTLE_ENDIAN); |
| 198 expect(actualHilo, hilo); |
195 | 199 |
196 final doubleToBytes = convertToBytes(PbFieldType.OD); | 200 // Decode it again (round trip). |
197 doubleToBits(double value) => | 201 List<int> bytes = dataToBytes(data); |
198 makeData(doubleToBytes(value)).getUint64(0, Endianness.LITTLE_ENDIAN); | 202 double reencoded = new CodedBufferReader(bytes).readDouble(); |
199 | 203 expect(reencoded, doubleEquals(value)); |
200 int bits = (hilo[0] << 32) | hilo[1]; | |
201 expect(doubleToBits(value), bits); | |
202 expect(readDouble(bits), doubleEquals(value)); | |
203 } | 204 } |
204 | 205 |
205 test('testFloat', () { | 206 test('testFloat', () { |
206 // Denorms. | 207 // Denorms. |
207 _test32(0x1, 1.401298464324817E-45); | 208 _test32(0x1, 1.401298464324817E-45); |
208 _test32(0x2, 1.401298464324817E-45 * 2.0); | 209 _test32(0x2, 1.401298464324817E-45 * 2.0); |
209 _test32(0x3, 1.401298464324817E-45 * 3.0); | 210 _test32(0x3, 1.401298464324817E-45 * 3.0); |
210 _test32(0x00ba98, 1.401298464324817E-45 * 0x00ba98); | 211 _test32(0x00ba98, 1.401298464324817E-45 * 0x00ba98); |
211 _test32(8034422, 1.401298464324817E-45 * 8034422); | 212 _test32(8034422, 1.401298464324817E-45 * 8034422); |
212 _test32(0x7fffff, 1.401298464324817E-45 * 0x7fffff); | 213 _test32(0x7fffff, 1.401298464324817E-45 * 0x7fffff); |
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
744 expect(readUint64([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f]), | 745 expect(readUint64([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f]), |
745 expect64(0xffffffff, 0xffffff)); | 746 expect64(0xffffffff, 0xffffff)); |
746 expect( | 747 expect( |
747 readUint64( | 748 readUint64( |
748 [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01]), | 749 [0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01]), |
749 expect64(0xffffffff, 0xffffffff)); | 750 expect64(0xffffffff, 0xffffffff)); |
750 expect(readUint64([180, 222, 252, 255, 255, 255, 255, 255, 255, 1]), | 751 expect(readUint64([180, 222, 252, 255, 255, 255, 255, 255, 255, 1]), |
751 expect64(0xffff2f34, 0xffffffff)); | 752 expect64(0xffff2f34, 0xffffffff)); |
752 }); | 753 }); |
753 } | 754 } |
OLD | NEW |