| // Copyright 2015 The Vanadium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| /** |
| * @fileoverview Tests recovering written vom data js to js. |
| */ |
| |
| var test = require('prova'); |
| |
| var BigInt = require('./../../src/vdl/big-int.js'); |
| var RawVomWriter = require('./../../src/vom/raw-vom-writer'); |
| var RawVomReader = require('./../../src/vom/raw-vom-reader'); |
| var Promise = require('../../src/lib/promise'); |
| |
| test('Reading and writing big uint', function(t) { |
| var testVals = [ |
| new BigInt(0, new Uint8Array([])), |
| new BigInt(0, new Uint8Array([0])), |
| new BigInt(1, new Uint8Array([1, 0])), |
| new BigInt(1, new Uint8Array([1, 0, 0])), |
| new BigInt(1, new Uint8Array([0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, |
| new Uint8Array([0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])) |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeUint(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readBigUint().then(function(result) { |
| t.ok(testVal.equals(result), 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing big int', function(t) { |
| var testVals = [ |
| new BigInt(0, new Uint8Array([])), |
| new BigInt(0, new Uint8Array([0])), |
| new BigInt(1, new Uint8Array([1])), |
| new BigInt(1, new Uint8Array([0, 0, 1])), |
| new BigInt(1, new Uint8Array([0x7f])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, new Uint8Array([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(1, |
| new Uint8Array([0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff])), |
| new BigInt(-1, new Uint8Array([0x01])), |
| new BigInt(-1, new Uint8Array([0x80])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00, 0x00])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00, 0x00, 0x00])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00, 0x00, 0x00, 0x00])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00, 0x00, 0x00, 0x00, 0x00])), |
| new BigInt(-1, new Uint8Array([0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])), |
| new BigInt(-1, |
| new Uint8Array([0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])) |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeInt(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readBigInt().then(function(result) { |
| t.ok(testVal.equals(result), 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing uint', function(t) { |
| var testVals = [ |
| 0, |
| 1, |
| 0x50, |
| 0xff, |
| 0xffff, |
| 0xffffff, |
| 0xffffffff |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeUint(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readUint().then(function(result) { |
| t.equals(result, testVal, 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing int', function(t) { |
| var testVals = [ |
| 0, |
| 1, |
| -1, |
| 0x50, |
| -0x50, |
| 0xff, |
| 0xffff, |
| 0xffffff, |
| 0x7fffffff, |
| -0xff, |
| -0xffff, |
| -0xffffff, |
| -0x80000000 |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeInt(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readInt().then(function(result) { |
| t.equals(result, testVal, 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing float', function(t) { |
| var testVals = [ |
| 0, |
| 1, |
| -1, |
| 1088.12, |
| -1088.12, |
| 0.000000004, |
| -0.000000004, |
| Number.MAX_VALUE, |
| Number.MIN_VALUE, |
| Number.NEGATIVE_INFINITY, |
| Number.POSITIVE_INFINITY |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeFloat(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readFloat().then(function(result) { |
| t.equals(result, testVal, 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing string', function(t) { |
| var testVals = [ |
| '', |
| 'abcd', |
| 'ଆ➓龥𐇐𒅑' |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeString(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readString().then(function(result) { |
| t.equals(result, testVal, 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing bool', function(t) { |
| var testVals = [ |
| true, |
| false |
| ]; |
| |
| var promises = []; |
| function runTest(testVal) { |
| var rw = new RawVomWriter(); |
| rw.writeBool(testVal); |
| var rr = new RawVomReader(rw.getBytes()); |
| promises.push(rr.readBool().then(function(result) { |
| t.equals(result, testVal, 'expected ' + testVal + ' got ' + result); |
| })); |
| } |
| for (var i = 0; i < testVals.length; i++) { |
| runTest(testVals[i]); |
| } |
| Promise.all(promises).then(function() { |
| t.end(); |
| }, t.end); |
| }); |
| |
| test('Reading and writing multiple values', function(t) { |
| var rw = new RawVomWriter(); |
| rw.writeString('test'); |
| rw.writeFloat(9.4); |
| rw.writeInt(-4); |
| rw.writeUint(8); |
| |
| var rr = new RawVomReader(rw.getBytes()); |
| rr.readString().then(function(val) { |
| t.equals(val, 'test'); |
| return rr.readFloat(); |
| }).then(function(val) { |
| t.equals(val, 9.4); |
| return rr.readInt(); |
| }).then(function(val) { |
| t.equals(val, -4); |
| return rr.readUint(); |
| }).then(function(val) { |
| t.equals(val, 8); |
| t.end(); |
| }).catch(t.end); |
| }); |