JS: Encode numbers as strings

This commit is contained in:
Erik Arvidsson
2015-12-12 17:06:37 -05:00
parent 796c11b0f7
commit 5a94b87cbb
4 changed files with 126 additions and 88 deletions

View File

@@ -50,14 +50,26 @@ class JsonArrayReader {
return next;
}
readNumber(): number {
readInt(): number {
let next = this.read();
invariant(typeof next === 'number');
return next;
invariant(typeof next === 'string');
return parseInt(next, 10);
}
readUint(): number {
let v = this.readInt();
invariant(v >= 0);
return v;
}
readFloat(): number {
let next = this.read();
invariant(typeof next === 'string');
return parseFloat(next);
}
readOrdinal(): number {
return this.readNumber();
return this.readInt();
}
readArray(): Array<any> {
@@ -67,7 +79,9 @@ class JsonArrayReader {
}
readKind(): NomsKind {
return this.readNumber();
let next = this.read();
invariant(typeof next === 'number');
return next;
}
readRef(): Ref {
@@ -145,7 +159,7 @@ class JsonArrayReader {
}
readEnum(): number {
return this.readNumber();
return this.readUint();
}
async maybeReadMetaSequence(t: Type, pkg: ?Package): Promise<any> {
@@ -199,17 +213,19 @@ class JsonArrayReader {
case Kind.Bool:
return Promise.resolve(this.readBool());
case Kind.Uint8:
case Kind.Uint16:
case Kind.Uint32:
case Kind.Uint64:
case Kind.Float32:
case Kind.Float64:
return Promise.resolve(this.readFloat());
case Kind.Int8:
case Kind.Int16:
case Kind.Int32:
case Kind.Int64:
case Kind.Float32:
case Kind.Float64:
return Promise.resolve(this.read());
return Promise.resolve(this.readInt());
case Kind.Uint8:
case Kind.Uint16:
case Kind.Uint32:
case Kind.Uint64:
return Promise.resolve(this.readUint());
case Kind.String:
return Promise.resolve(this.readString());
case Kind.Value: {
@@ -366,7 +382,7 @@ class JsonArrayReader {
let unionIndex = -1;
if (desc.union.length > 0) {
unionIndex = this.readNumber();
unionIndex = this.readUint();
let unionField = desc.union[unionIndex];
let v = await this.readValueWithoutTag(unionField.t, pkg);
s[unionField.name] = v;

View File

@@ -50,7 +50,7 @@ suite('Decode', () => {
doTest(makeCompoundType(Kind.List, makePrimitiveType(Kind.Bool)), [Kind.List, Kind.Bool, true, false]);
let pkgRef = Ref.parse('sha1-a9993e364706816aba3e25717850c26c9cd0d89d');
doTest(makeType(pkgRef, 42), [Kind.Unresolved, pkgRef.toString(), 42]);
doTest(makeType(pkgRef, 42), [Kind.Unresolved, pkgRef.toString(), '42']);
doTest(makePrimitiveType(Kind.Type), [Kind.Type, Kind.Type, pkgRef.toString()]);
});
@@ -66,16 +66,21 @@ suite('Decode', () => {
await doTest(true, [Kind.Bool, true]);
await doTest(false, [Kind.Bool, false]);
await doTest(0, [Kind.Uint8, 0]);
await doTest(0, [Kind.Uint16, 0]);
await doTest(0, [Kind.Uint32, 0]);
await doTest(0, [Kind.Uint64, 0]);
await doTest(0, [Kind.Int8, 0]);
await doTest(0, [Kind.Int16, 0]);
await doTest(0, [Kind.Int32, 0]);
await doTest(0, [Kind.Int64, 0]);
await doTest(0, [Kind.Float32, 0]);
await doTest(0, [Kind.Float64, 0]);
await doTest(0, [Kind.Uint8, '0']);
await doTest(0, [Kind.Uint16, '0']);
await doTest(0, [Kind.Uint32, '0']);
await doTest(0, [Kind.Uint64, '0']);
await doTest(0, [Kind.Int8, '0']);
await doTest(0, [Kind.Int16, '0']);
await doTest(0, [Kind.Int32, '0']);
await doTest(0, [Kind.Int64, '0']);
await doTest(0, [Kind.Float32, '0']);
await doTest(0, [Kind.Float64, '0']);
await doTest(1e18, [Kind.Int64, '1000000000000000000']);
await doTest(1e19, [Kind.Uint64, '10000000000000000000']);
await doTest(1e19, [Kind.Float64, '10000000000000000000']);
await doTest(1e20, [Kind.Float64, '1e+20']);
await doTest('hi', [Kind.String, 'hi']);
@@ -85,7 +90,7 @@ suite('Decode', () => {
test('read list of int 32', async () => {
let ms = new MemoryStore();
let a = [Kind.List, Kind.Int32, false, [0, 1, 2, 3]];
let a = [Kind.List, Kind.Int32, false, ['0', '1', '2', '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof ListLeaf);
@@ -98,7 +103,7 @@ suite('Decode', () => {
// TODO: Can't round-trip collections of value types. =-(
test('read list of value', async () => {
let ms = new MemoryStore();
let a = [Kind.List, Kind.Value, false, [Kind.Int32, 1, Kind.String, 'hi', Kind.Bool, true]];
let a = [Kind.List, Kind.Value, false, [Kind.Int32, '1', Kind.String, 'hi', Kind.Bool, true]];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof ListLeaf);
@@ -111,7 +116,7 @@ suite('Decode', () => {
test('read value list of int8', async () => {
let ms = new MemoryStore();
let a = [Kind.Value, Kind.List, Kind.Int8, false, [0, 1, 2]];
let a = [Kind.Value, Kind.List, Kind.Int8, false, ['0', '1', '2']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof ListLeaf);
@@ -135,7 +140,7 @@ suite('Decode', () => {
];
let l = new CompoundList(ms, ltr, tuples);
let a = [Kind.List, Kind.Int32, true, [r1.toString(), 2, r2.toString(), 4, r3.toString(), 6]];
let a = [Kind.List, Kind.Int32, true, [r1.toString(), '2', r2.toString(), '4', r3.toString(), '6']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof CompoundList);
@@ -144,7 +149,7 @@ suite('Decode', () => {
test('read map of int64 to float64', async () => {
let ms = new MemoryStore();
let a = [Kind.Map, Kind.Int64, Kind.Float64, false, [0, 1, 2, 3]];
let a = [Kind.Map, Kind.Int64, Kind.Float64, false, ['0', '1', '2', '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof MapLeaf);
@@ -156,7 +161,7 @@ suite('Decode', () => {
test('read value map of uint64 to uint32', async () => {
let ms = new MemoryStore();
let a = [Kind.Value, Kind.Map, Kind.Uint64, Kind.Uint32, false, [0, 1, 2, 3]];
let a = [Kind.Value, Kind.Map, Kind.Uint64, Kind.Uint32, false, ['0', '1', '2', '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof MapLeaf);
@@ -168,7 +173,7 @@ suite('Decode', () => {
test('read set of uint8', async () => {
let ms = new MemoryStore();
let a = [Kind.Set, Kind.Uint8, false, [0, 1, 2, 3]];
let a = [Kind.Set, Kind.Uint8, false, ['0', '1', '2', '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
invariant(v instanceof SetLeaf);
@@ -180,7 +185,7 @@ suite('Decode', () => {
test('read value set of uint16', async () => {
let ms = new MemoryStore();
let a = [Kind.Value, Kind.Set, Kind.Uint16, false, [0, 1, 2, 3]];
let a = [Kind.Value, Kind.Set, Kind.Uint16, false, ['0', '1', '2', '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -209,7 +214,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, 42, 'hi', true];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', '42', 'hi', true];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -232,7 +237,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, 42, 1, 'hi'];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', '42', '1', 'hi'];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -253,7 +258,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, 42, false, true, false];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', '42', false, true, false];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -276,7 +281,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, true, false, [0, 1, 2], 'hi'];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', true, false, ['0', '1', '2'], 'hi'];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -298,7 +303,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, true, Kind.Uint8, 42, 'hi'];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', true, Kind.Uint8, '42', 'hi'];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -320,7 +325,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Value, Kind.Unresolved, pkg.ref.toString(), 0, 42, 'hi', true];
let a = [Kind.Value, Kind.Unresolved, pkg.ref.toString(), '0', '42', 'hi', true];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -338,7 +343,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, 1];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', '1'];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -352,7 +357,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Value, Kind.Unresolved, pkg.ref.toString(), 0, 1];
let a = [Kind.Value, Kind.Unresolved, pkg.ref.toString(), '0', '1'];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -370,7 +375,7 @@ suite('Decode', () => {
let pkg = new Package([tr, enumTref], []);
registerPackage(pkg);
let a = [Kind.Unresolved, pkg.ref.toString(), 0, 42, 1, true];
let a = [Kind.Unresolved, pkg.ref.toString(), '0', '42', '1', true];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -391,7 +396,7 @@ suite('Decode', () => {
let pkg = new Package([tr], []);
registerPackage(pkg);
let a = [Kind.Value, Kind.Map, Kind.String, Kind.Unresolved, pkg.ref.toString(), 0, false, ['bar', false, 2, 'baz', false, 1, 'foo', true, 3]];
let a = [Kind.Value, Kind.Map, Kind.String, Kind.Unresolved, pkg.ref.toString(), '0', false, ['bar', false, '2', 'baz', false, '1', 'foo', true, '3']];
let r = new JsonArrayReader(a, ms);
let v = await r.readTopLevelValue();
@@ -406,7 +411,7 @@ suite('Decode', () => {
test('decodeNomsValue', async () => {
let ms = new MemoryStore();
let chunk = Chunk.fromString(`t [${Kind.Value}, ${Kind.Set}, ${Kind.Uint16}, false, [0, 1, 2, 3]]`);
let chunk = Chunk.fromString(`t [${Kind.Value}, ${Kind.Set}, ${Kind.Uint16}, false, ["0", "1", "2", "3"]]`);
let v = await decodeNomsValue(chunk, new MemoryStore());
let t = makeCompoundType(Kind.Set, makePrimitiveType(Kind.Uint16));
@@ -416,10 +421,10 @@ suite('Decode', () => {
test('decodeNomsValue: counter with one commit', async () => {
let ms = new MemoryStore();
let root = Ref.parse('sha1-238be83f9eb4d346b06a82eb6bd0310b68189d24');
ms.put(Chunk.fromString('t [15,11,16,21,"sha1-7546d804d845125bc42669c7a4c3f3fb909eca29",0,false,["counter","sha1-3d5f81a6640300f377d5c0257c7bdee094ff90de"]]')); // root
ms.put(Chunk.fromString('t [22,[19,"Commit",["value",13,false,"parents",17,[16,[21,"sha1-0000000000000000000000000000000000000000",0]],false],[]],[]]')); // datas package
ms.put(Chunk.fromString('t [21,"sha1-7546d804d845125bc42669c7a4c3f3fb909eca29",0,4,1,false,[]]')); // commit
let root = Ref.parse('sha1-c3680a063b73ac42c3075110108a48a91007abf7');
ms.put(Chunk.fromString('t [15,11,16,21,"sha1-7546d804d845125bc42669c7a4c3f3fb909eca29","0",false,["counter","sha1-a6fffab4e12b49d57f194f0d3add9f6623a13e19"]]')); // root
ms.put(Chunk.fromString('t [22,[19,"Commit",["value",13,false,"parents",17,[16,[21,"sha1-0000000000000000000000000000000000000000","0"]],false],[]],[]]')); // datas package
ms.put(Chunk.fromString('t [21,"sha1-4da2f91cdbba5a7c91b383091da45e55e16d2152","0",4,"1",false,[]]')); // commit
let rootMap = await readValue(root, ms);
let counterRef = await rootMap.get('counter');

View File

@@ -36,12 +36,20 @@ class JsonArrayWriter {
this.write(b);
}
writeNumber(n: number) {
this.write(n);
writeFloat(n: number) {
if (n < 1e20) {
this.write(n.toString(10));
} else {
this.write(n.toExponential());
}
}
writeInt(n: number) {
this.write(n.toFixed(0));
}
writeKind(k: NomsKind) {
this.writeNumber(k);
this.write(k);
}
writeRef(r: Ref) {
@@ -66,7 +74,7 @@ class JsonArrayWriter {
let pkgRef = t.packageRef;
invariant(!pkgRef.isEmpty());
this.writeRef(pkgRef);
this.writeNumber(t.ordinal);
this.writeInt(t.ordinal);
let pkg = lookupPackage(pkgRef);
if (pkg && this._cs) {
@@ -113,6 +121,13 @@ class JsonArrayWriter {
this.writeBlob(v);
break;
case Kind.Bool:
case Kind.String:
this.write(v);
break;
case Kind.Float32:
case Kind.Float64:
this.writeFloat(v); // TODO: Verify value fits in type
break;
case Kind.Uint8:
case Kind.Uint16:
case Kind.Uint32:
@@ -121,10 +136,7 @@ class JsonArrayWriter {
case Kind.Int16:
case Kind.Int32:
case Kind.Int64:
case Kind.Float32:
case Kind.Float64:
case Kind.String:
this.write(v); // TODO: Verify value fits in type
this.writeInt(v); // TODO: Verify value fits in type
break;
case Kind.List: {
invariant(v instanceof Sequence);
@@ -256,7 +268,7 @@ class JsonArrayWriter {
let pkgRef = t.packageRef;
this.writeRef(pkgRef);
let ordinal = t.ordinal;
this.write(ordinal);
this.writeInt(ordinal);
if (ordinal === -1) {
this.write(t.namespace);
this.write(t.name);
@@ -318,13 +330,13 @@ class JsonArrayWriter {
if (s.hasUnion) {
let unionField = notNull(s.unionField);
this.writeNumber(s.unionIndex);
this.writeInt(s.unionIndex);
this.writeValue(s.get(unionField.name), unionField.t, pkg);
}
}
writeEnum(v: number) {
this.writeNumber(v);
this.writeInt(v);
}
}

View File

@@ -30,16 +30,21 @@ suite('Encode', () => {
f(Kind.Bool, true, true);
f(Kind.Bool, false, false);
f(Kind.Uint8, 0, 0);
f(Kind.Uint16, 0, 0);
f(Kind.Uint32, 0, 0);
f(Kind.Uint64, 0, 0);
f(Kind.Int8, 0, 0);
f(Kind.Int16, 0, 0);
f(Kind.Int32, 0, 0);
f(Kind.Int64, 0, 0);
f(Kind.Float32, 0, 0);
f(Kind.Float64, 0, 0);
f(Kind.Uint8, 0, '0');
f(Kind.Uint16, 0, '0');
f(Kind.Uint32, 0, '0');
f(Kind.Uint64, 0, '0');
f(Kind.Int8, 0, '0');
f(Kind.Int16, 0, '0');
f(Kind.Int32, 0, '0');
f(Kind.Int64, 0, '0');
f(Kind.Float32, 0, '0');
f(Kind.Float64, 0, '0');
f(Kind.Int64, 1e18, '1000000000000000000');
f(Kind.Uint64, 1e19, '10000000000000000000');
f(Kind.Float64, 1e19, '10000000000000000000');
f(Kind.Float64, 1e20, '1e+20');
f(Kind.String, 'hi', 'hi');
});
@@ -58,7 +63,7 @@ suite('Encode', () => {
let tr = makeCompoundType(Kind.List, makePrimitiveType(Kind.Int32));
let l = new ListLeaf(ms, tr, [0, 1, 2, 3]);
w.writeTopLevel(tr, l);
assert.deepEqual([Kind.List, Kind.Int32, false, [0, 1, 2, 3]], w.array);
assert.deepEqual([Kind.List, Kind.Int32, false, ['0', '1', '2', '3']], w.array);
});
test('write list of list', async () => {
@@ -69,7 +74,7 @@ suite('Encode', () => {
let tr = makeCompoundType(Kind.List, it);
let v = new ListLeaf(ms, tr, [new ListLeaf(ms, it, [0]), new ListLeaf(ms, it, [1, 2, 3])]);
w.writeTopLevel(tr, v);
assert.deepEqual([Kind.List, Kind.List, Kind.Int16, false, [false, [0], false, [1, 2, 3]]], w.array);
assert.deepEqual([Kind.List, Kind.List, Kind.Int16, false, [false, ['0'], false, ['1', '2', '3']]], w.array);
});
test('write set', async () => {
@@ -79,7 +84,7 @@ suite('Encode', () => {
let tr = makeCompoundType(Kind.Set, makePrimitiveType(Kind.Uint32));
let v = new SetLeaf(ms, tr, [0, 1, 2, 3]);
w.writeTopLevel(tr, v);
assert.deepEqual([Kind.Set, Kind.Uint32, false, [0, 1, 2, 3]], w.array);
assert.deepEqual([Kind.Set, Kind.Uint32, false, ['0', '1', '2', '3']], w.array);
});
test('write set of set', async () => {
@@ -91,7 +96,7 @@ suite('Encode', () => {
let v = new SetLeaf(ms, tr, [new SetLeaf(ms, st, [0]), new SetLeaf(ms, st, [1, 2, 3])]);
w.writeTopLevel(tr, v);
assert.deepEqual([Kind.Set, Kind.Set, Kind.Int32, false, [false, [0], false, [1, 2, 3]]], w.array);
assert.deepEqual([Kind.Set, Kind.Set, Kind.Int32, false, [false, ['0'], false, ['1', '2', '3']]], w.array);
});
test('write map', async() => {
@@ -117,7 +122,7 @@ suite('Encode', () => {
let m1 = new MapLeaf(ms, kt, [{key: 'a', value: 0}]);
let v = new MapLeaf(ms, tr, [{key: m1, value: s}]);
w.writeTopLevel(tr, v);
assert.deepEqual([Kind.Map, Kind.Map, Kind.String, Kind.Int64, Kind.Set, Kind.Bool, false, [false, ['a', 0], false, [true]]], w.array);
assert.deepEqual([Kind.Map, Kind.Map, Kind.String, Kind.Int64, Kind.Set, Kind.Bool, false, [false, ['a', '0'], false, [true]]], w.array);
});
test('write empty struct', async() => {
@@ -133,7 +138,7 @@ suite('Encode', () => {
let v = new Struct(type, typeDef, {});
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0'], w.array);
});
test('write struct', async() => {
@@ -152,7 +157,7 @@ suite('Encode', () => {
let v = new Struct(type, typeDef, {x: 42, b: true});
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, 42, true], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', '42', true], w.array);
});
test('write struct optional field', async() => {
@@ -170,12 +175,12 @@ suite('Encode', () => {
let v = new Struct(type, typeDef, {x: 42, b: true});
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, true, 42, true], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', true, '42', true], w.array);
v = new Struct(type, typeDef, {b: true});
w = new JsonArrayWriter(ms);
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, false, true], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', false, true], w.array);
});
test('write struct with union', async() => {
@@ -195,12 +200,12 @@ suite('Encode', () => {
let v = new Struct(type, typeDef, {x: 42, s: 'hi'});
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, 42, 1, 'hi'], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', '42', '1', 'hi'], w.array);
v = new Struct(type, typeDef, {x: 42, b: true});
w = new JsonArrayWriter(ms);
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, 42, 0, true], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', '42', '0', true], w.array);
});
test('write struct with list', async() => {
@@ -218,12 +223,12 @@ suite('Encode', () => {
let v = new Struct(type, typeDef, {l: new ListLeaf(ms, ltr, ['a', 'b'])});
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, false, ['a', 'b']], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', false, ['a', 'b']], w.array);
v = new Struct(type, typeDef, {l: new ListLeaf(ms, ltr, [])});
w = new JsonArrayWriter(ms);
w.writeTopLevel(type, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, false, []], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', false, []], w.array);
});
test('write struct with struct', async () => {
@@ -245,7 +250,7 @@ suite('Encode', () => {
let v = new Struct(sType, sTypeDef, {s: new Struct(s2Type, s2TypeDef, {x: 42})});
w.writeTopLevel(sType, v);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 1, 42], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '1', '42'], w.array);
});
test('write enum', async () => {
@@ -258,7 +263,7 @@ suite('Encode', () => {
let typ = makeType(pkgRef, 0);
w.writeTopLevel(typ, 1);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), 0, 1], w.array);
assert.deepEqual([Kind.Unresolved, pkgRef.toString(), '0', '1'], w.array);
});
test('write list of enum', async () => {
@@ -273,7 +278,7 @@ suite('Encode', () => {
let l = new ListLeaf(ms, listType, [0, 1, 2]);
w.writeTopLevel(listType, l);
assert.deepEqual([Kind.List, Kind.Unresolved, pkgRef.toString(), 0, false, [0, 1, 2]], w.array);
assert.deepEqual([Kind.List, Kind.Unresolved, pkgRef.toString(), '0', false, ['0', '1', '2']], w.array);
});
test('write compound list', async () => {
@@ -292,7 +297,7 @@ suite('Encode', () => {
let l = new CompoundList(ms, ltr, tuples);
w.writeTopLevel(ltr, l);
assert.deepEqual([Kind.List, Kind.Int32, true, [r1.toString(), 2, r2.toString(), 4, r3.toString(), 6]], w.array);
assert.deepEqual([Kind.List, Kind.Int32, true, [r1.toString(), '2', r2.toString(), '4', r3.toString(), '6']], w.array);
});
test('write type value', async () => {
@@ -318,9 +323,9 @@ suite('Encode', () => {
]));
let pkgRef = Ref.parse('sha1-0123456789abcdef0123456789abcdef01234567');
test([Kind.Type, Kind.Unresolved, pkgRef.toString(), 123], makeType(pkgRef, 123));
test([Kind.Type, Kind.Unresolved, pkgRef.toString(), '123'], makeType(pkgRef, 123));
test([Kind.Type, Kind.Struct, 'S', ['e', Kind.Unresolved, pkgRef.toString(), 123, false, 'x', Kind.Int64, false], []], makeStructType('S', [
test([Kind.Type, Kind.Struct, 'S', ['e', Kind.Unresolved, pkgRef.toString(), '123', false, 'x', Kind.Int64, false], []], makeStructType('S', [
new Field('e', makeType(pkgRef, 123), false),
new Field('x', makePrimitiveType(Kind.Int64), false)
], []));