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]); }); }