import * as bjson from "../bjson.so"; function assert(b, str) { if (b) { return; } else { throw Error("assertion failed: " + str); } } function toHex(a) { var i, s = "", tab, v; tab = new Uint8Array(a); for(i = 0; i < tab.length; i++) { v = tab[i].toString(16); if (v.length < 2) v = "0" + v; if (i !== 0) s += " "; s += v; } return s; } function toStr(a) { var s, i, props, prop; switch(typeof(a)) { case "object": if (a === null) return "null"; if (Array.isArray(a)) { s = "["; for(i = 0; i < a.length; i++) { if (i != 0) s += ","; s += toStr(a[i]); } s += "]"; } else { props = Object.keys(a); s = "{"; for(i = 0; i < props.length; i++) { if (i != 0) s += ","; prop = props[i]; s += prop + ":" + toStr(a[prop]); } s += "}"; } return s; case "undefined": return "undefined"; case "string": return a.__quote(); case "number": case "bigfloat": if (a == 0 && 1 / a < 0) return "-0"; else return a.toString(); break; default: return a.toString(); } } function bjson_test(a) { var buf, r, a_str, r_str; a_str = toStr(a); buf = bjson.write(a); if (0) { print(a_str, "->", toHex(buf)); } r = bjson.read(buf, 0, buf.byteLength); r_str = toStr(r); if (a_str != r_str) { print(a_str); print(r_str); assert(false); } } function bjson_test_all() { var obj; bjson_test({x:1, y:2, if:3}); bjson_test([1, 2, 3]); bjson_test([1.0, "aa", true, false, undefined, null, NaN, -Infinity, -0.0]); if (typeof BigInt !== "undefined") { bjson_test([BigInt("1"), -BigInt("0x123456789"), BigInt("0x123456789abcdef123456789abcdef")]); } if (typeof BigFloat !== "undefined") { BigFloatEnv.setPrec(function () { bjson_test([BigFloat("0.1"), BigFloat("-1e30"), BigFloat("0"), BigFloat("-0"), BigFloat("Infinity"), BigFloat("-Infinity"), 0.0 / BigFloat("0"), BigFloat.MAX_VALUE, BigFloat.MIN_VALUE]); }, 113, 15); } /* tested with a circular reference */ obj = {}; obj.x = obj; try { bjson.write(obj); assert(false); } catch(e) { assert(e instanceof TypeError); } } bjson_test_all();