blob: 5a1c1a8f1dad4e9ded506a832ea6ab99e52c96bb [file] [log] [blame]
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]);
});
}