assert.sameValue(JSON.parse('{"a":1,"b":2}', function (k, v) { return typeof v === "number" ? v * 10 : v; }).a, 10, "reviver transforms");
assert.sameValue(JSON.stringify(JSON.parse('{"x":1,"y":2}', function (k, v) { return k === "x" ? undefined : v; })), '{"y":2}', "reviver deletes");
assert.sameValue(JSON.parse('[1,2,3]', function (k, v) { return typeof v === "number" ? v + 100 : v; })[0], 101, "reviver on array");
assert.sameValue(JSON.stringify(JSON.parse('{"o":{"n":5}}', function (k, v) { return typeof v === "number" ? v + 1 : v; })), '{"o":{"n":6}}', "nested reviver");
var topKey;
JSON.parse('{"a":1}', function (k, v) { if (typeof v === "object") topKey = k; return v; });
assert.sameValue(topKey, "", "top-level key is empty string");
assert.throws(SyntaxError, function () { return JSON.parse("{bad}"); }, "object syntax error");
assert.throws(SyntaxError, function () { return JSON.parse("[1,2,"); }, "truncated array");
assert.sameValue(JSON.stringify(JSON.parse('{"a":[1,2],"b":"x"}')), '{"a":[1,2],"b":"x"}', "plain parse");
assert.sameValue(JSON.parse("42"), 42, "primitive parse");