| import 'dart:typed_data'; |
| |
| import 'package:flat_buffers/flex_buffers.dart' show Builder; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('build with single value', () { |
| { |
| var flx = Builder(); |
| flx.addNull(); |
| expect(flx.finish(), [0, 0, 1]); |
| } |
| { |
| var flx = Builder(); |
| flx.addBool(true); |
| expect(flx.finish(), [1, 104, 1]); |
| } |
| { |
| var flx = Builder(); |
| flx.addBool(false); |
| expect(flx.finish(), [0, 104, 1]); |
| } |
| { |
| var flx = Builder(); |
| flx.addInt(1); |
| expect(flx.finish(), [1, 4, 1]); |
| } |
| { |
| var flx = Builder(); |
| flx.addInt(230); |
| expect(flx.finish(), [230, 0, 5, 2]); |
| } |
| { |
| var flx = Builder(); |
| flx.addInt(1025); |
| expect(flx.finish(), [1, 4, 5, 2]); |
| } |
| { |
| var flx = Builder(); |
| flx.addInt(-1025); |
| expect(flx.finish(), [255, 251, 5, 2]); |
| } |
| { |
| var flx = Builder(); |
| flx.addDouble(0.1); |
| expect(flx.finish(), [154, 153, 153, 153, 153, 153, 185, 63, 15, 8]); |
| } |
| { |
| var flx = Builder(); |
| flx.addDouble(0.5); |
| expect(flx.finish(), [0, 0, 0, 63, 14, 4]); |
| } |
| { |
| var flx = Builder(); |
| flx.addString('Maxim'); |
| expect(flx.finish(), [5, 77, 97, 120, 105, 109, 0, 6, 20, 1]); |
| } |
| { |
| var flx = Builder(); |
| flx.addString('hello 😱'); |
| expect(flx.finish(), |
| [10, 104, 101, 108, 108, 111, 32, 240, 159, 152, 177, 0, 11, 20, 1]); |
| } |
| }); |
| |
| test('build vector', () { |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addInt(1) |
| ..addInt(2) |
| ..end(); |
| expect(flx.finish(), [1, 2, 2, 64, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addInt(-1) |
| ..addInt(256) |
| ..end(); |
| expect(flx.finish(), [255, 255, 0, 1, 4, 65, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addInt(-45) |
| ..addInt(256000) |
| ..end(); |
| expect(flx.finish(), [211, 255, 255, 255, 0, 232, 3, 0, 8, 66, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addDouble(1.1) |
| ..addDouble(-256) |
| ..end(); |
| expect(flx.finish(), [ |
| 154, |
| 153, |
| 153, |
| 153, |
| 153, |
| 153, |
| 241, |
| 63, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 112, |
| 192, |
| 16, |
| 75, |
| 1 |
| ]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addInt(1) |
| ..addInt(2) |
| ..addInt(4) |
| ..end(); |
| expect(flx.finish(), [1, 2, 4, 3, 76, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addInt(-1) |
| ..addInt(256) |
| ..addInt(4) |
| ..end(); |
| expect(flx.finish(), [255, 255, 0, 1, 4, 0, 6, 77, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..startVector() |
| ..addInt(61) |
| ..end() |
| ..addInt(64) |
| ..end(); |
| expect(flx.finish(), [1, 61, 2, 2, 64, 44, 4, 4, 40, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addString('foo') |
| ..addString('bar') |
| ..addString('baz') |
| ..end(); |
| expect(flx.finish(), [ |
| 3, |
| 102, |
| 111, |
| 111, |
| 0, |
| 3, |
| 98, |
| 97, |
| 114, |
| 0, |
| 3, |
| 98, |
| 97, |
| 122, |
| 0, |
| 3, |
| 15, |
| 11, |
| 7, |
| 3, |
| 60, |
| 1 |
| ]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addString('foo') |
| ..addString('bar') |
| ..addString('baz') |
| ..addString('foo') |
| ..addString('bar') |
| ..addString('baz') |
| ..end(); |
| expect(flx.finish(), [ |
| 3, |
| 102, |
| 111, |
| 111, |
| 0, |
| 3, |
| 98, |
| 97, |
| 114, |
| 0, |
| 3, |
| 98, |
| 97, |
| 122, |
| 0, |
| 6, |
| 15, |
| 11, |
| 7, |
| 18, |
| 14, |
| 10, |
| 6, |
| 60, |
| 1 |
| ]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addBool(true) |
| ..addBool(false) |
| ..addBool(true) |
| ..end(); |
| expect(flx.finish(), [3, 1, 0, 1, 3, 144, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..addString('foo') |
| ..addInt(1) |
| ..addInt(-5) |
| ..addDouble(1.3) |
| ..addBool(true) |
| ..end(); |
| expect(flx.finish(), [ |
| 3, |
| 102, |
| 111, |
| 111, |
| 0, |
| 0, |
| 0, |
| 0, |
| 5, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 15, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 1, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 251, |
| 255, |
| 255, |
| 255, |
| 255, |
| 255, |
| 255, |
| 255, |
| 205, |
| 204, |
| 204, |
| 204, |
| 204, |
| 204, |
| 244, |
| 63, |
| 1, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 20, |
| 4, |
| 4, |
| 15, |
| 104, |
| 45, |
| 43, |
| 1 |
| ]); |
| } |
| }); |
| |
| test('build map', () { |
| { |
| var flx = Builder() |
| ..startMap() |
| ..addKey('a') |
| ..addInt(12) |
| ..end(); |
| expect(flx.finish(), [97, 0, 1, 3, 1, 1, 1, 12, 4, 2, 36, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startMap() |
| ..addKey('a') |
| ..addInt(12) |
| ..addKey('') |
| ..addInt(45) |
| ..end(); |
| expect( |
| flx.finish(), [97, 0, 0, 2, 2, 5, 2, 1, 2, 45, 12, 4, 4, 4, 36, 1]); |
| } |
| { |
| var flx = Builder() |
| ..startVector() |
| ..startMap() |
| ..addKey('something') |
| ..addInt(12) |
| ..end() |
| ..startMap() |
| ..addKey('something') |
| ..addInt(45) |
| ..end() |
| ..end(); |
| expect(flx.finish(), [ |
| 115, |
| 111, |
| 109, |
| 101, |
| 116, |
| 104, |
| 105, |
| 110, |
| 103, |
| 0, |
| 1, |
| 11, |
| 1, |
| 1, |
| 1, |
| 12, |
| 4, |
| 6, |
| 1, |
| 1, |
| 45, |
| 4, |
| 2, |
| 8, |
| 4, |
| 36, |
| 36, |
| 4, |
| 40, |
| 1 |
| ]); |
| } |
| }); |
| |
| test('build blob', () { |
| { |
| var flx = Builder()..addBlob(Uint8List.fromList([1, 2, 3]).buffer); |
| expect(flx.finish(), [3, 1, 2, 3, 3, 100, 1]); |
| } |
| }); |
| |
| test('build from object', () { |
| expect( |
| Builder.buildFromObject(Uint8List.fromList([1, 2, 3]).buffer) |
| .asUint8List(), |
| [3, 1, 2, 3, 3, 100, 1]); |
| expect(Builder.buildFromObject(null).asUint8List(), [0, 0, 1]); |
| expect(Builder.buildFromObject(true).asUint8List(), [1, 104, 1]); |
| expect(Builder.buildFromObject(false).asUint8List(), [0, 104, 1]); |
| expect(Builder.buildFromObject(25).asUint8List(), [25, 4, 1]); |
| expect(Builder.buildFromObject(-250).asUint8List(), [6, 255, 5, 2]); |
| expect( |
| Builder.buildFromObject(-2.50).asUint8List(), [0, 0, 32, 192, 14, 4]); |
| expect(Builder.buildFromObject('Maxim').asUint8List(), |
| [5, 77, 97, 120, 105, 109, 0, 6, 20, 1]); |
| expect( |
| Builder.buildFromObject([1, 3.3, 'max', true, null, false]) |
| .asUint8List(), |
| [ |
| 3, |
| 109, |
| 97, |
| 120, |
| 0, |
| 0, |
| 0, |
| 0, |
| 6, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 1, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 102, |
| 102, |
| 102, |
| 102, |
| 102, |
| 102, |
| 10, |
| 64, |
| 31, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 1, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 0, |
| 4, |
| 15, |
| 20, |
| 104, |
| 0, |
| 104, |
| 54, |
| 43, |
| 1 |
| ]); |
| expect( |
| Builder.buildFromObject([ |
| {'something': 12}, |
| {'something': 45} |
| ]).asUint8List(), |
| [ |
| 115, |
| 111, |
| 109, |
| 101, |
| 116, |
| 104, |
| 105, |
| 110, |
| 103, |
| 0, |
| 1, |
| 11, |
| 1, |
| 1, |
| 1, |
| 12, |
| 4, |
| 6, |
| 1, |
| 1, |
| 45, |
| 4, |
| 2, |
| 8, |
| 4, |
| 36, |
| 36, |
| 4, |
| 40, |
| 1 |
| ]); |
| }); |
| |
| test('add double indirectly', () { |
| var flx = Builder()..addDoubleIndirectly(0.1); |
| expect(flx.finish(), [154, 153, 153, 153, 153, 153, 185, 63, 8, 35, 1]); |
| }); |
| |
| test('add double indirectly to vector with cache', () { |
| var flx = Builder() |
| ..startVector() |
| ..addDoubleIndirectly(0.1, cache: true) |
| ..addDoubleIndirectly(0.1, cache: true) |
| ..addDoubleIndirectly(0.1, cache: true) |
| ..addDoubleIndirectly(0.1, cache: true) |
| ..end(); |
| expect(flx.finish(), [ |
| 154, |
| 153, |
| 153, |
| 153, |
| 153, |
| 153, |
| 185, |
| 63, |
| 4, |
| 9, |
| 10, |
| 11, |
| 12, |
| 35, |
| 35, |
| 35, |
| 35, |
| 8, |
| 40, |
| 1 |
| ]); |
| }); |
| |
| test('add int indirectly', () { |
| var flx = Builder()..addIntIndirectly(2345234523452345); |
| expect(flx.finish(), [185, 115, 175, 118, 250, 84, 8, 0, 8, 27, 1]); |
| }); |
| |
| test('add int indirectly to vector with cache', () { |
| var flx = Builder() |
| ..startVector() |
| ..addIntIndirectly(2345234523452345, cache: true) |
| ..addIntIndirectly(2345234523452345, cache: true) |
| ..addIntIndirectly(2345234523452345, cache: true) |
| ..addIntIndirectly(2345234523452345, cache: true) |
| ..end(); |
| expect(flx.finish(), [ |
| 185, |
| 115, |
| 175, |
| 118, |
| 250, |
| 84, |
| 8, |
| 0, |
| 4, |
| 9, |
| 10, |
| 11, |
| 12, |
| 27, |
| 27, |
| 27, |
| 27, |
| 8, |
| 40, |
| 1 |
| ]); |
| }); |
| |
| test('snapshot', () { |
| var flx = Builder(); |
| flx.startVector(); |
| flx.addInt(12); |
| expect(flx.snapshot().asUint8List(), [1, 12, 1, 44, 1]); |
| flx.addInt(24); |
| expect(flx.snapshot().asUint8List(), [12, 24, 2, 64, 1]); |
| flx.addInt(45); |
| expect(flx.snapshot().asUint8List(), [12, 24, 45, 3, 76, 1]); |
| }); |
| } |