mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-03 04:21:13 +00:00
316 lines
8.2 KiB
Dart
316 lines
8.2 KiB
Dart
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]);
|
|
});
|
|
}
|
|
|