1*890232f2SAndroid Build Coastguard Worker// Run this using JavaScriptTest.sh 2*890232f2SAndroid Build Coastguard Workerimport assert from 'assert' 3*890232f2SAndroid Build Coastguard Workerimport fs from 'fs' 4*890232f2SAndroid Build Coastguard Workerimport * as flexbuffers from 'flatbuffers/js/flexbuffers' 5*890232f2SAndroid Build Coastguard Worker 6*890232f2SAndroid Build Coastguard Workerfunction main() { 7*890232f2SAndroid Build Coastguard Worker testSingleValueBuffers(); 8*890232f2SAndroid Build Coastguard Worker testGoldBuffer(); 9*890232f2SAndroid Build Coastguard Worker testEncode(); 10*890232f2SAndroid Build Coastguard Worker testIndirectAdd(); 11*890232f2SAndroid Build Coastguard Worker testIndirectWithCache(); 12*890232f2SAndroid Build Coastguard Worker testMapBuilder(); 13*890232f2SAndroid Build Coastguard Worker testRoundTrip(); 14*890232f2SAndroid Build Coastguard Worker testRoundTripWithBuilder(); 15*890232f2SAndroid Build Coastguard Worker testDeduplicationOff(); 16*890232f2SAndroid Build Coastguard Worker testBugWhereOffestWereStoredAsIntInsteadOfUInt(); 17*890232f2SAndroid Build Coastguard Worker 18*890232f2SAndroid Build Coastguard Worker console.log('FlexBuffers test: completed successfully'); 19*890232f2SAndroid Build Coastguard Worker} 20*890232f2SAndroid Build Coastguard Worker 21*890232f2SAndroid Build Coastguard Workerfunction testSingleValueBuffers() { 22*890232f2SAndroid Build Coastguard Worker { 23*890232f2SAndroid Build Coastguard Worker const ref = flexbuffers.toReference(new Uint8Array([0, 0, 1]).buffer); 24*890232f2SAndroid Build Coastguard Worker assert.strictEqual(true, ref.isNull()); 25*890232f2SAndroid Build Coastguard Worker } 26*890232f2SAndroid Build Coastguard Worker 27*890232f2SAndroid Build Coastguard Worker function _assert(object, buffer) { 28*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(flexbuffers.toObject(new Uint8Array(buffer).buffer), object); 29*890232f2SAndroid Build Coastguard Worker } 30*890232f2SAndroid Build Coastguard Worker _assert(true, [1, 104, 1]); 31*890232f2SAndroid Build Coastguard Worker _assert(false, [0, 104, 1]); 32*890232f2SAndroid Build Coastguard Worker _assert(25, [25, 4, 1]); 33*890232f2SAndroid Build Coastguard Worker _assert(-25, [231, 4, 1]); 34*890232f2SAndroid Build Coastguard Worker _assert(230, [230, 8, 1]); 35*890232f2SAndroid Build Coastguard Worker _assert(230, [230, 0, 5, 2]); 36*890232f2SAndroid Build Coastguard Worker _assert(-1025, [255, 251, 5, 2]); 37*890232f2SAndroid Build Coastguard Worker _assert(1025, [1, 4, 9, 2]); 38*890232f2SAndroid Build Coastguard Worker _assert(2147483647, [255, 255, 255, 127, 6, 4]); 39*890232f2SAndroid Build Coastguard Worker _assert(-2147483648, [0, 0, 0, 128, 6, 4]); 40*890232f2SAndroid Build Coastguard Worker _assert(4294967295n, [255, 255, 255, 255, 0, 0, 0, 0, 7, 8]); 41*890232f2SAndroid Build Coastguard Worker _assert(9223372036854775807n, [255, 255, 255, 255, 255, 255, 255, 127, 7, 8]); 42*890232f2SAndroid Build Coastguard Worker _assert(-9223372036854775808n, [0, 0, 0, 0, 0, 0, 0, 128, 7, 8]); 43*890232f2SAndroid Build Coastguard Worker _assert(18446744073709551615n, [255, 255, 255, 255, 255, 255, 255, 255, 11, 8]); 44*890232f2SAndroid Build Coastguard Worker _assert(4.5, [0, 0, 144, 64, 14, 4]); 45*890232f2SAndroid Build Coastguard Worker _assert(0.10000000149011612, [205, 204, 204, 61, 14, 4]); 46*890232f2SAndroid Build Coastguard Worker _assert(0.1, [154, 153, 153, 153, 153, 153, 185, 63, 15, 8]); 47*890232f2SAndroid Build Coastguard Worker _assert(-1025, [255, 251, 5, 2]); 48*890232f2SAndroid Build Coastguard Worker _assert("Maxim", [5, 77, 97, 120, 105, 109, 0, 6, 20, 1]); 49*890232f2SAndroid Build Coastguard Worker _assert("hello ", [10, 104, 101, 108, 108, 111, 32, 240, 159, 152, 177, 0, 11, 20, 1]); 50*890232f2SAndroid Build Coastguard Worker _assert({a:12}, [97, 0, 1, 3, 1, 1, 1, 12, 4, 2, 36, 1]); 51*890232f2SAndroid Build Coastguard Worker _assert({"":45, "a": 12}, [0, 97, 0, 2, 4, 4, 2, 1, 2, 45, 12, 4, 4, 4, 36, 1]); 52*890232f2SAndroid Build Coastguard Worker} 53*890232f2SAndroid Build Coastguard Worker 54*890232f2SAndroid Build Coastguard Workerfunction testEncode() { 55*890232f2SAndroid Build Coastguard Worker function _assert(value, buffer) { 56*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(flexbuffers.encode(value), new Uint8Array(buffer)); 57*890232f2SAndroid Build Coastguard Worker } 58*890232f2SAndroid Build Coastguard Worker _assert(null, [0, 0, 1]); 59*890232f2SAndroid Build Coastguard Worker _assert(true, [1, 104, 1]); 60*890232f2SAndroid Build Coastguard Worker _assert(false, [0, 104, 1]); 61*890232f2SAndroid Build Coastguard Worker _assert(1, [1, 4, 1]); 62*890232f2SAndroid Build Coastguard Worker _assert(230, [230, 0, 5, 2]); 63*890232f2SAndroid Build Coastguard Worker _assert(1025, [1, 4, 5, 2]); 64*890232f2SAndroid Build Coastguard Worker _assert(-1025, [255, 251, 5, 2]); 65*890232f2SAndroid Build Coastguard Worker _assert(0x100000001, [1, 0, 0, 0, 1, 0, 0, 0, 7, 8]); 66*890232f2SAndroid Build Coastguard Worker _assert(0.1, [154, 153, 153, 153, 153, 153, 185, 63, 15, 8]); 67*890232f2SAndroid Build Coastguard Worker _assert(0.5, [0, 0, 0, 63, 14, 4]); 68*890232f2SAndroid Build Coastguard Worker _assert(new Uint8Array([1, 2, 3]), [3, 1, 2, 3, 3, 100, 1]); 69*890232f2SAndroid Build Coastguard Worker _assert("Maxim", [5, 77, 97, 120, 105, 109, 0, 6, 20, 1]); 70*890232f2SAndroid Build Coastguard Worker _assert("hello ", [10, 104, 101, 108, 108, 111, 32, 240, 159, 152, 177, 0, 11, 20, 1]); 71*890232f2SAndroid Build Coastguard Worker _assert([1, 2], [1, 2, 2, 64, 1]); 72*890232f2SAndroid Build Coastguard Worker _assert([-1, 256], [255, 255, 0, 1, 4, 65, 1]); 73*890232f2SAndroid Build Coastguard Worker _assert([-45, 256000], [211, 255, 255, 255, 0, 232, 3, 0, 8, 66, 1]); 74*890232f2SAndroid Build Coastguard Worker _assert([1.1, -256.0], [2, 0, 0, 0, 0, 0, 0, 0, 154, 153, 153, 153, 153, 153, 241, 63, 0, 255, 255, 255, 255, 255, 255, 255, 15, 5, 18, 43, 1]); 75*890232f2SAndroid Build Coastguard Worker _assert([1, 2, 4], [1, 2, 4, 3, 76, 1]); 76*890232f2SAndroid Build Coastguard Worker _assert([-1, 256, 4], [255, 255, 0, 1, 4, 0, 6, 77, 1]); 77*890232f2SAndroid Build Coastguard Worker _assert([[61], 64], [1, 61, 2, 2, 64, 44, 4, 4, 40, 1]); 78*890232f2SAndroid Build Coastguard Worker _assert(["foo", "bar", "baz"], [3, 102, 111, 111, 0, 3, 98, 97, 114, 0, 3, 98, 97, 122, 0, 3, 15, 11, 7, 3, 60, 1]); 79*890232f2SAndroid Build Coastguard Worker _assert(["foo", "bar", "baz", "foo", "bar", "baz"], [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]); 80*890232f2SAndroid Build Coastguard Worker _assert([true, false, true], [3, 1, 0, 1, 3, 144, 1]); 81*890232f2SAndroid Build Coastguard Worker _assert(['foo', 1, -5, 1.3, true], [ 82*890232f2SAndroid Build Coastguard Worker 3, 102, 111, 111, 0, 0, 0, 0, 83*890232f2SAndroid Build Coastguard Worker 5, 0, 0, 0, 0, 0, 0, 0, 84*890232f2SAndroid Build Coastguard Worker 15, 0, 0, 0, 0, 0, 0, 0, 85*890232f2SAndroid Build Coastguard Worker 1, 0, 0, 0, 0, 0, 0, 0, 86*890232f2SAndroid Build Coastguard Worker 251, 255, 255, 255, 255, 255, 255, 255, 87*890232f2SAndroid Build Coastguard Worker 205, 204, 204, 204, 204, 204, 244, 63, 88*890232f2SAndroid Build Coastguard Worker 1, 0, 0, 0, 0, 0, 0, 0, 89*890232f2SAndroid Build Coastguard Worker 20, 4, 4, 15, 104, 45, 43, 1 90*890232f2SAndroid Build Coastguard Worker ]); 91*890232f2SAndroid Build Coastguard Worker _assert([1, 3.3, 'max', true, null, false], [ 92*890232f2SAndroid Build Coastguard Worker 3, 109, 97, 120, 0, 0, 0, 0, 93*890232f2SAndroid Build Coastguard Worker 6, 0, 0, 0, 0, 0, 0, 0, 94*890232f2SAndroid Build Coastguard Worker 1, 0, 0, 0, 0, 0, 0, 0, 95*890232f2SAndroid Build Coastguard Worker 102, 102, 102, 102, 102, 102, 10, 64, 96*890232f2SAndroid Build Coastguard Worker 31, 0, 0, 0, 0, 0, 0, 0, 97*890232f2SAndroid Build Coastguard Worker 1, 0, 0, 0, 0, 0, 0, 0, 98*890232f2SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 99*890232f2SAndroid Build Coastguard Worker 0, 0, 0, 0, 0, 0, 0, 0, 100*890232f2SAndroid Build Coastguard Worker 4, 15, 20, 104, 0, 104, 54, 43, 1 101*890232f2SAndroid Build Coastguard Worker ]); 102*890232f2SAndroid Build Coastguard Worker _assert({"a": 12}, [97, 0, 1, 3, 1, 1, 1, 12, 4, 2, 36, 1]); 103*890232f2SAndroid Build Coastguard Worker _assert({"a": 12, "":45}, [0, 97, 0, 2, 4, 4, 2, 1, 2, 45, 12, 4, 4, 4, 36, 1]); 104*890232f2SAndroid Build Coastguard Worker // JS currently does not support key vector offset sharing 105*890232f2SAndroid Build Coastguard Worker _assert([{'something':12}, {'something': 45}], [ 106*890232f2SAndroid Build Coastguard Worker 115, 111, 109, 101, 116, 104, 105, 110, 103, 0, 107*890232f2SAndroid Build Coastguard Worker 1, 11, 1, 1, 1, 12, 4, 6, 1, 1, 45, 4, 2, 8, 4, 36, 36, 4, 40, 1 108*890232f2SAndroid Build Coastguard Worker ]); 109*890232f2SAndroid Build Coastguard Worker} 110*890232f2SAndroid Build Coastguard Worker 111*890232f2SAndroid Build Coastguard Workerfunction testDeduplicationOff() { 112*890232f2SAndroid Build Coastguard Worker let buffer = flexbuffers.encode([{'something':12}, {'something': 45}], 1, true, true, false); 113*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(buffer, new Uint8Array([ 114*890232f2SAndroid Build Coastguard Worker 115, 111, 109, 101, 116, 104, 105, 110, 103, 115*890232f2SAndroid Build Coastguard Worker 0, 1, 11, 1, 1, 1, 12, 4, 1, 116*890232f2SAndroid Build Coastguard Worker 18, 1, 1, 1, 45, 4, 2, 10, 4, 117*890232f2SAndroid Build Coastguard Worker 36, 36, 4, 40, 1 118*890232f2SAndroid Build Coastguard Worker ])); 119*890232f2SAndroid Build Coastguard Worker 120*890232f2SAndroid Build Coastguard Worker buffer = flexbuffers.encode([{'something':12}, {'something': 45}], 1, true, false, false); 121*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(buffer, new Uint8Array([ 122*890232f2SAndroid Build Coastguard Worker 115, 111, 109, 101, 116, 104, 105, 110, 103, 0, 123*890232f2SAndroid Build Coastguard Worker 1, 11, 1, 1, 1, 12, 4, 115, 111, 109, 124*890232f2SAndroid Build Coastguard Worker 101, 116, 104, 105, 110, 103, 0, 1, 11, 1, 125*890232f2SAndroid Build Coastguard Worker 1, 1, 45, 4, 2, 20, 4, 36, 36, 4, 126*890232f2SAndroid Build Coastguard Worker 40, 1 127*890232f2SAndroid Build Coastguard Worker ])); 128*890232f2SAndroid Build Coastguard Worker 129*890232f2SAndroid Build Coastguard Worker buffer = flexbuffers.encode(['something', 'something', 'dark'], 1, true, false, false); 130*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(buffer, new Uint8Array([ 131*890232f2SAndroid Build Coastguard Worker 9, 115, 111, 109, 101, 116, 104, 132*890232f2SAndroid Build Coastguard Worker 105, 110, 103, 0, 4, 100, 97, 133*890232f2SAndroid Build Coastguard Worker 114, 107, 0, 3, 17, 18, 8, 134*890232f2SAndroid Build Coastguard Worker 3, 60, 1 135*890232f2SAndroid Build Coastguard Worker ])); 136*890232f2SAndroid Build Coastguard Worker 137*890232f2SAndroid Build Coastguard Worker buffer = flexbuffers.encode(['something', 'something', 'dark'], 1, false, false, false); 138*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(buffer, new Uint8Array([ 139*890232f2SAndroid Build Coastguard Worker 9, 115, 111, 109, 101, 116, 104, 105, 110, 140*890232f2SAndroid Build Coastguard Worker 103, 0, 9, 115, 111, 109, 101, 116, 104, 141*890232f2SAndroid Build Coastguard Worker 105, 110, 103, 0, 4, 100, 97, 114, 107, 142*890232f2SAndroid Build Coastguard Worker 0, 3, 28, 18, 8, 3, 60, 1 143*890232f2SAndroid Build Coastguard Worker ])); 144*890232f2SAndroid Build Coastguard Worker} 145*890232f2SAndroid Build Coastguard Worker 146*890232f2SAndroid Build Coastguard Workerfunction testIndirectAdd() { 147*890232f2SAndroid Build Coastguard Worker function _assertInt(buffer, value, indirect = false, cache = false) { 148*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 149*890232f2SAndroid Build Coastguard Worker builder.addInt(value, indirect, cache); 150*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 151*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 152*890232f2SAndroid Build Coastguard Worker } 153*890232f2SAndroid Build Coastguard Worker function _assertUInt(buffer, value, indirect = false, cache = false) { 154*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 155*890232f2SAndroid Build Coastguard Worker builder.addUInt(value, indirect, cache); 156*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 157*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 158*890232f2SAndroid Build Coastguard Worker } 159*890232f2SAndroid Build Coastguard Worker function _assertFloat(buffer, value, indirect = false, cache = false) { 160*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 161*890232f2SAndroid Build Coastguard Worker builder.addFloat(value, indirect, cache); 162*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 163*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 164*890232f2SAndroid Build Coastguard Worker } 165*890232f2SAndroid Build Coastguard Worker _assertInt([0, 4, 1], 0); 166*890232f2SAndroid Build Coastguard Worker _assertInt([0, 1, 24, 1], 0, true); 167*890232f2SAndroid Build Coastguard Worker _assertInt([255, 0, 5, 2], 255); 168*890232f2SAndroid Build Coastguard Worker 169*890232f2SAndroid Build Coastguard Worker _assertUInt([0, 8, 1], 0); 170*890232f2SAndroid Build Coastguard Worker _assertUInt([0, 1, 28, 1], 0, true); 171*890232f2SAndroid Build Coastguard Worker _assertUInt([255, 8, 1], 255); 172*890232f2SAndroid Build Coastguard Worker 173*890232f2SAndroid Build Coastguard Worker _assertUInt([185, 115, 175, 118, 250, 84, 8, 0, 11, 8], 2345234523452345); 174*890232f2SAndroid Build Coastguard Worker _assertUInt([185, 115, 175, 118, 250, 84, 8, 0, 8, 31, 1], 2345234523452345, true); 175*890232f2SAndroid Build Coastguard Worker _assertInt([185, 115, 175, 118, 250, 84, 8, 0, 7, 8], 2345234523452345); 176*890232f2SAndroid Build Coastguard Worker _assertInt([185, 115, 175, 118, 250, 84, 8, 0, 8, 27, 1], 2345234523452345, true); 177*890232f2SAndroid Build Coastguard Worker 178*890232f2SAndroid Build Coastguard Worker _assertFloat([154, 153, 153, 153, 153, 153, 185, 63, 15, 8], 0.1); 179*890232f2SAndroid Build Coastguard Worker _assertFloat([154, 153, 153, 153, 153, 153, 185, 63, 8, 35, 1], 0.1, true); 180*890232f2SAndroid Build Coastguard Worker _assertFloat([0, 0, 0, 0, 14, 4], 0); 181*890232f2SAndroid Build Coastguard Worker _assertFloat([0, 0, 0, 0, 4, 34, 1], 0, true); 182*890232f2SAndroid Build Coastguard Worker} 183*890232f2SAndroid Build Coastguard Worker 184*890232f2SAndroid Build Coastguard Workerfunction testIndirectWithCache() { 185*890232f2SAndroid Build Coastguard Worker function _assertInt(buffer, values) { 186*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 187*890232f2SAndroid Build Coastguard Worker builder.startVector(); 188*890232f2SAndroid Build Coastguard Worker values.forEach(v => { 189*890232f2SAndroid Build Coastguard Worker builder.addInt(v, true, true) 190*890232f2SAndroid Build Coastguard Worker }); 191*890232f2SAndroid Build Coastguard Worker builder.end(); 192*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 193*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 194*890232f2SAndroid Build Coastguard Worker } 195*890232f2SAndroid Build Coastguard Worker 196*890232f2SAndroid Build Coastguard Worker function _assertUInt(buffer, values) { 197*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 198*890232f2SAndroid Build Coastguard Worker builder.startVector(); 199*890232f2SAndroid Build Coastguard Worker values.forEach(v => { 200*890232f2SAndroid Build Coastguard Worker builder.addUInt(v, true, true); 201*890232f2SAndroid Build Coastguard Worker }); 202*890232f2SAndroid Build Coastguard Worker builder.end(); 203*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 204*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 205*890232f2SAndroid Build Coastguard Worker } 206*890232f2SAndroid Build Coastguard Worker 207*890232f2SAndroid Build Coastguard Worker function _assertFloat(buffer, values) { 208*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 209*890232f2SAndroid Build Coastguard Worker builder.startVector(); 210*890232f2SAndroid Build Coastguard Worker values.forEach(v => { 211*890232f2SAndroid Build Coastguard Worker builder.addFloat(v, true, true); 212*890232f2SAndroid Build Coastguard Worker }); 213*890232f2SAndroid Build Coastguard Worker builder.end(); 214*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 215*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array(buffer)); 216*890232f2SAndroid Build Coastguard Worker } 217*890232f2SAndroid Build Coastguard Worker 218*890232f2SAndroid Build Coastguard Worker _assertInt( 219*890232f2SAndroid Build Coastguard Worker [185, 115, 175, 118, 250, 84, 8, 0, 4, 9, 10, 11, 12, 27, 27, 27, 27, 8, 40, 1], 220*890232f2SAndroid Build Coastguard Worker [2345234523452345, 2345234523452345, 2345234523452345, 2345234523452345] 221*890232f2SAndroid Build Coastguard Worker ); 222*890232f2SAndroid Build Coastguard Worker 223*890232f2SAndroid Build Coastguard Worker _assertUInt( 224*890232f2SAndroid Build Coastguard Worker [185, 115, 175, 118, 250, 84, 8, 0, 4, 9, 10, 11, 12, 31, 31, 31, 31, 8, 40, 1], 225*890232f2SAndroid Build Coastguard Worker [2345234523452345, 2345234523452345, 2345234523452345, 2345234523452345] 226*890232f2SAndroid Build Coastguard Worker ); 227*890232f2SAndroid Build Coastguard Worker 228*890232f2SAndroid Build Coastguard Worker _assertFloat( 229*890232f2SAndroid Build Coastguard Worker [154, 153, 153, 153, 153, 153, 185, 63, 4, 9, 10, 11, 12, 35, 35, 35, 35, 8, 40, 1], 230*890232f2SAndroid Build Coastguard Worker [0.1, 0.1, 0.1, 0.1] 231*890232f2SAndroid Build Coastguard Worker ); 232*890232f2SAndroid Build Coastguard Worker} 233*890232f2SAndroid Build Coastguard Worker 234*890232f2SAndroid Build Coastguard Workerfunction testMapBuilder() { 235*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 236*890232f2SAndroid Build Coastguard Worker builder.startMap(); 237*890232f2SAndroid Build Coastguard Worker builder.addKey('a'); 238*890232f2SAndroid Build Coastguard Worker builder.add(12); 239*890232f2SAndroid Build Coastguard Worker builder.addKey(''); 240*890232f2SAndroid Build Coastguard Worker builder.add(45); 241*890232f2SAndroid Build Coastguard Worker builder.end(); 242*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 243*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(data, new Uint8Array([97, 0, 0, 2, 2, 5, 2, 1, 2, 45, 12, 4, 4, 4, 36, 1])); 244*890232f2SAndroid Build Coastguard Worker} 245*890232f2SAndroid Build Coastguard Worker 246*890232f2SAndroid Build Coastguard Workerfunction testRoundTrip() { 247*890232f2SAndroid Build Coastguard Worker const example = { 248*890232f2SAndroid Build Coastguard Worker "age": 35, 249*890232f2SAndroid Build Coastguard Worker "flags": [true, false, true, true], 250*890232f2SAndroid Build Coastguard Worker "weight": 72.5, 251*890232f2SAndroid Build Coastguard Worker "name": "Maxim", 252*890232f2SAndroid Build Coastguard Worker "address": { 253*890232f2SAndroid Build Coastguard Worker "city": "Bla", 254*890232f2SAndroid Build Coastguard Worker "zip": "12345", 255*890232f2SAndroid Build Coastguard Worker "countryCode": "XX", 256*890232f2SAndroid Build Coastguard Worker } 257*890232f2SAndroid Build Coastguard Worker }; 258*890232f2SAndroid Build Coastguard Worker 259*890232f2SAndroid Build Coastguard Worker function _assert(value) { 260*890232f2SAndroid Build Coastguard Worker let buffer = flexbuffers.encode(value, 1); 261*890232f2SAndroid Build Coastguard Worker let o = flexbuffers.toObject(buffer.buffer); 262*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(o, value); 263*890232f2SAndroid Build Coastguard Worker } 264*890232f2SAndroid Build Coastguard Worker 265*890232f2SAndroid Build Coastguard Worker _assert(example); 266*890232f2SAndroid Build Coastguard Worker _assert(0x100000001n); 267*890232f2SAndroid Build Coastguard Worker _assert({ test_number: 72.6 }) 268*890232f2SAndroid Build Coastguard Worker} 269*890232f2SAndroid Build Coastguard Worker 270*890232f2SAndroid Build Coastguard Workerfunction testRoundTripWithBuilder() { 271*890232f2SAndroid Build Coastguard Worker const example = { 272*890232f2SAndroid Build Coastguard Worker "age": 35, 273*890232f2SAndroid Build Coastguard Worker "flags": [true, false, true, true], 274*890232f2SAndroid Build Coastguard Worker "weight": 72.5, 275*890232f2SAndroid Build Coastguard Worker "name": "Maxim", 276*890232f2SAndroid Build Coastguard Worker "address": { 277*890232f2SAndroid Build Coastguard Worker "city": "Bla", 278*890232f2SAndroid Build Coastguard Worker "zip": "12345", 279*890232f2SAndroid Build Coastguard Worker "countryCode": "XX", 280*890232f2SAndroid Build Coastguard Worker } 281*890232f2SAndroid Build Coastguard Worker }; 282*890232f2SAndroid Build Coastguard Worker 283*890232f2SAndroid Build Coastguard Worker const builder = flexbuffers.builder(); 284*890232f2SAndroid Build Coastguard Worker builder.startMap(); 285*890232f2SAndroid Build Coastguard Worker 286*890232f2SAndroid Build Coastguard Worker builder.addKey('age'); 287*890232f2SAndroid Build Coastguard Worker builder.add(35); 288*890232f2SAndroid Build Coastguard Worker 289*890232f2SAndroid Build Coastguard Worker builder.addKey('flags'); 290*890232f2SAndroid Build Coastguard Worker builder.startVector(); 291*890232f2SAndroid Build Coastguard Worker builder.add(true); 292*890232f2SAndroid Build Coastguard Worker builder.add(false); 293*890232f2SAndroid Build Coastguard Worker builder.add(true); 294*890232f2SAndroid Build Coastguard Worker builder.add(true); 295*890232f2SAndroid Build Coastguard Worker builder.end(); 296*890232f2SAndroid Build Coastguard Worker 297*890232f2SAndroid Build Coastguard Worker builder.addKey("weight"); 298*890232f2SAndroid Build Coastguard Worker builder.add(72.5); 299*890232f2SAndroid Build Coastguard Worker 300*890232f2SAndroid Build Coastguard Worker builder.addKey("name"); 301*890232f2SAndroid Build Coastguard Worker builder.add("Maxim"); 302*890232f2SAndroid Build Coastguard Worker 303*890232f2SAndroid Build Coastguard Worker builder.addKey("address"); 304*890232f2SAndroid Build Coastguard Worker 305*890232f2SAndroid Build Coastguard Worker builder.startMap(); 306*890232f2SAndroid Build Coastguard Worker builder.addKey("city"); 307*890232f2SAndroid Build Coastguard Worker builder.add("Bla"); 308*890232f2SAndroid Build Coastguard Worker builder.addKey("zip"); 309*890232f2SAndroid Build Coastguard Worker builder.add("12345"); 310*890232f2SAndroid Build Coastguard Worker builder.addKey("countryCode"); 311*890232f2SAndroid Build Coastguard Worker builder.add("XX"); 312*890232f2SAndroid Build Coastguard Worker builder.end(); 313*890232f2SAndroid Build Coastguard Worker 314*890232f2SAndroid Build Coastguard Worker builder.end(); 315*890232f2SAndroid Build Coastguard Worker 316*890232f2SAndroid Build Coastguard Worker const data = builder.finish(); 317*890232f2SAndroid Build Coastguard Worker let o = flexbuffers.toObject(data.buffer); 318*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(o, example); 319*890232f2SAndroid Build Coastguard Worker 320*890232f2SAndroid Build Coastguard Worker let root = flexbuffers.toReference(data.buffer); 321*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.isMap(), true); 322*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.get("age").numericValue(), 35); 323*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.get("age").intValue(), 35); 324*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.get("name").stringValue(), "Maxim"); 325*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.get("weight").floatValue(), 72.5); 326*890232f2SAndroid Build Coastguard Worker assert.strictEqual(root.get("weight").numericValue(), 72.5); 327*890232f2SAndroid Build Coastguard Worker let flags = root.get("flags"); 328*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.isVector(), true); 329*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.length(), 4); 330*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.get(0).boolValue(), true); 331*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.get(1).boolValue(), false); 332*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.get(2).boolValue(), true); 333*890232f2SAndroid Build Coastguard Worker assert.strictEqual(flags.get(3).boolValue(), true); 334*890232f2SAndroid Build Coastguard Worker 335*890232f2SAndroid Build Coastguard Worker let address = root.get("address"); 336*890232f2SAndroid Build Coastguard Worker assert.strictEqual(address.isMap(), true); 337*890232f2SAndroid Build Coastguard Worker assert.strictEqual(address.length(), 3); 338*890232f2SAndroid Build Coastguard Worker assert.strictEqual(address.get("city").stringValue(), "Bla"); 339*890232f2SAndroid Build Coastguard Worker assert.strictEqual(address.get("zip").stringValue(), "12345"); 340*890232f2SAndroid Build Coastguard Worker assert.strictEqual(address.get("countryCode").stringValue(), "XX"); 341*890232f2SAndroid Build Coastguard Worker} 342*890232f2SAndroid Build Coastguard Worker 343*890232f2SAndroid Build Coastguard Workerfunction testGoldBuffer() { 344*890232f2SAndroid Build Coastguard Worker const data = new Uint8Array(fs.readFileSync('gold_flexbuffer_example.bin')).buffer; 345*890232f2SAndroid Build Coastguard Worker const b1 = flexbuffers.toReference(data).get("bools").get(1); 346*890232f2SAndroid Build Coastguard Worker assert.strictEqual(b1.isBool(), true); 347*890232f2SAndroid Build Coastguard Worker assert.strictEqual(b1.boolValue(), false); 348*890232f2SAndroid Build Coastguard Worker 349*890232f2SAndroid Build Coastguard Worker const blob = flexbuffers.toReference(data).get("vec").get(3); 350*890232f2SAndroid Build Coastguard Worker assert.strictEqual(blob.isBlob(), true); 351*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(blob.blobValue(), new Uint8Array([77])); 352*890232f2SAndroid Build Coastguard Worker 353*890232f2SAndroid Build Coastguard Worker const o = flexbuffers.toObject(data); 354*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(o, { 355*890232f2SAndroid Build Coastguard Worker bool: true, 356*890232f2SAndroid Build Coastguard Worker bools: [true, false, true, false], 357*890232f2SAndroid Build Coastguard Worker bar: [1, 2, 3], 358*890232f2SAndroid Build Coastguard Worker bar3: [1, 2, 3], 359*890232f2SAndroid Build Coastguard Worker foo: 100, 360*890232f2SAndroid Build Coastguard Worker mymap: {foo:'Fred'}, 361*890232f2SAndroid Build Coastguard Worker vec: [-100, 'Fred', 4, new Uint8Array([77]), false, 4] 362*890232f2SAndroid Build Coastguard Worker }); 363*890232f2SAndroid Build Coastguard Worker} 364*890232f2SAndroid Build Coastguard Worker 365*890232f2SAndroid Build Coastguard Workerfunction testBugWhereOffestWereStoredAsIntInsteadOfUInt() { 366*890232f2SAndroid Build Coastguard Worker // Reported in https://github.com/google/flatbuffers/issues/5949#issuecomment-688421193 367*890232f2SAndroid Build Coastguard Worker const object = {'channels_in': 64, 'dilation_height_factor': 1, 'dilation_width_factor': 1, 'fused_activation_function': 1, 'pad_values': 1, 'padding': 0, 'stride_height': 1, 'stride_width': 1}; 368*890232f2SAndroid Build Coastguard Worker let data1 = flexbuffers.encode(object); 369*890232f2SAndroid Build Coastguard Worker const data = [99, 104, 97, 110, 110, 101, 108, 115, 95, 105, 110, 0, 370*890232f2SAndroid Build Coastguard Worker 100, 105, 108, 97, 116, 105, 111, 110, 95, 104, 101, 105, 103, 104, 116, 95, 102, 97, 99, 116, 111, 114, 0, 371*890232f2SAndroid Build Coastguard Worker 100, 105, 108, 97, 116, 105, 111, 110, 95, 119, 105, 100, 116, 104, 95, 102, 97, 99, 116, 111, 114, 0, 372*890232f2SAndroid Build Coastguard Worker 102, 117, 115, 101, 100, 95, 97, 99, 116, 105, 118, 97, 116, 105, 111, 110, 95, 102, 117, 110, 99, 116, 105, 111, 110, 0, 373*890232f2SAndroid Build Coastguard Worker 112, 97, 100, 95, 118, 97, 108, 117, 101, 115, 0, 112, 97, 100, 100, 105, 110, 103, 0, 374*890232f2SAndroid Build Coastguard Worker 115, 116, 114, 105, 100, 101, 95, 104, 101, 105, 103, 104, 116, 0, 375*890232f2SAndroid Build Coastguard Worker 115, 116, 114, 105, 100, 101, 95, 119, 105, 100, 116, 104, 0, 376*890232f2SAndroid Build Coastguard Worker 8, 130, 119, 97, 76, 51, 41, 34, 21, 8, 1, 8, 64, 1, 1, 1, 1, 0, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 16, 36, 1]; 377*890232f2SAndroid Build Coastguard Worker let object2 = flexbuffers.toObject(new Uint8Array(data).buffer); 378*890232f2SAndroid Build Coastguard Worker let object1 = flexbuffers.toObject(new Uint8Array(data1).buffer); 379*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(object, object2); 380*890232f2SAndroid Build Coastguard Worker assert.deepStrictEqual(object, object1); 381*890232f2SAndroid Build Coastguard Worker assert.strictEqual(data.length, data1.length); 382*890232f2SAndroid Build Coastguard Worker let ref = flexbuffers.toReference(new Uint8Array(data).buffer); 383*890232f2SAndroid Build Coastguard Worker assert.strictEqual(ref.isMap(), true); 384*890232f2SAndroid Build Coastguard Worker assert.strictEqual(ref.length(), 8); 385*890232f2SAndroid Build Coastguard Worker assert.strictEqual(ref.get("channels_in").numericValue(), 64); 386*890232f2SAndroid Build Coastguard Worker assert.strictEqual(ref.get("padding").isNumber(), true); 387*890232f2SAndroid Build Coastguard Worker} 388*890232f2SAndroid Build Coastguard Worker 389*890232f2SAndroid Build Coastguard Workermain(); 390*890232f2SAndroid Build Coastguard Worker 391