{
	"$comment": "Shared test vectors for ODS canonical JSON (RFC 8785, JSON Canonicalization Scheme). Every implementation of ODS canonical JSON must turn each input into exactly `canonical`, whose UTF-8 bytes hash to `sha256`. Expected strings are worked out by hand from the RFC's rules; see spec/package.md section 2.",
	"version": "1",
	"vectors": [
		{
			"name": "rfc8785-3.2.3-key-order",
			"note": "The RFC 8785 section 3.2.3 example: keys sort by UTF-16 code units.",
			"input": {
				"\u20ac": "Euro Sign",
				"\r": "Carriage Return",
				"\ufb33": "Hebrew Letter Dalet With Dagesh",
				"1": "One",
				"\ud83d\ude00": "Emoji: Grinning Face",
				"\u0080": "Control",
				"\u00f6": "Latin Small Letter O With Diaeresis"
			},
			"canonical": "{\"\\r\":\"Carriage Return\",\"1\":\"One\",\"\u0080\":\"Control\",\"\u00f6\":\"Latin Small Letter O With Diaeresis\",\"\u20ac\":\"Euro Sign\",\"\ud83d\ude00\":\"Emoji: Grinning Face\",\"\ufb33\":\"Hebrew Letter Dalet With Dagesh\"}",
			"sha256": "5e321556d22018a9656991a9e94f77ec175fa193e52a2429d312f8419ec8b08c"
		},
		{
			"name": "band-keyed-object",
			"note": "Integer-like keys sort as text, not as numbers. JavaScript objects list integer-like keys first in numeric order, so an implementation that rebuilds an object gets this wrong.",
			"input": {
				"63": 1,
				"125": 2,
				"1000": 3,
				"a": 4
			},
			"canonical": "{\"1000\":3,\"125\":2,\"63\":1,\"a\":4}",
			"sha256": "e1194a978fa8817e6191269b0d504384615b58b89d21aec3bcc5a25567004ad5"
		},
		{
			"name": "band-keyed-nested",
			"note": "Octave-band sound power levels inside an array, as a PropagationRun's inputs hold them.",
			"input": {
				"pwl": [
					{
						"63": 80.1,
						"125": 78,
						"250": 75.5
					}
				],
				"absorptionAlpha": {
					"500": 0.2,
					"4000": 0.6
				}
			},
			"canonical": "{\"absorptionAlpha\":{\"4000\":0.6,\"500\":0.2},\"pwl\":[{\"125\":78,\"250\":75.5,\"63\":80.1}]}",
			"sha256": "d0ce1d75aa80904181dc759aee170cb119f37b85c687a0e9afbb4764e62d1557"
		},
		{
			"name": "key-outside-bmp",
			"note": "U+1F600 is the UTF-16 pair D83D DE00, so it sorts before U+FB33. Sorting by code point (Python's sorted()) gives the opposite order.",
			"input": {
				"\ufb33": 1,
				"\ud83d\ude00": 2
			},
			"canonical": "{\"\ud83d\ude00\":2,\"\ufb33\":1}",
			"sha256": "ec4e7d8c2963caa38dccc3d42693719ac9c6ecd783891b583d333565620ac2be"
		},
		{
			"name": "numbers",
			"note": "ECMAScript Number::toString (RFC 8785 section 3.2.2.3): -0 prints 0; exponent form from 1e21 up and below 1e-6.",
			"input": [
				0,
				-0.0,
				1,
				-1,
				1.5,
				100,
				1e+21,
				1e-07,
				1e-06,
				1.2345678901234568e+20,
				0.30000000000000004,
				5e-324,
				1.7976931348623157e+308
			],
			"canonical": "[0,0,1,-1,1.5,100,1e+21,1e-7,0.000001,123456789012345680000,0.30000000000000004,5e-324,1.7976931348623157e+308]",
			"sha256": "1e44df68175c28de76e213e0cf2cb906b7960682407d5ce2d9ebd5bfa36abf91"
		},
		{
			"name": "strings",
			"note": "JSON.stringify escapes (RFC 8785 section 3.2.2.2): \\b \\t \\n \\f \\r as short escapes, other control characters as lowercase \\u00xx, quote and backslash escaped; solidus, DEL, non-ASCII and U+2028 written as they are.",
			"input": {
				"s": "\u0000\b\t\n\u000b\f\r\u001f\"\\/\u007f\u00e9\u2028\ud83d\ude00"
			},
			"canonical": "{\"s\":\"\\u0000\\b\\t\\n\\u000b\\f\\r\\u001f\\\"\\\\/\u007f\u00e9\u2028\ud83d\ude00\"}",
			"sha256": "d0049f6b3fb500377475a8701ead56a2907a2f95c3703ab4400f75b56559a3b6"
		},
		{
			"name": "literals-and-empty",
			"note": "true, false, null, an empty object and an empty array.",
			"input": {
				"t": true,
				"f": false,
				"n": null,
				"e": {},
				"a": []
			},
			"canonical": "{\"a\":[],\"e\":{},\"f\":false,\"n\":null,\"t\":true}",
			"sha256": "662637dc36893be2d6cf9a19094ffdb6ff407bfa66ef8f53d872017725010d69"
		},
		{
			"name": "nested-order",
			"note": "Keys sort at every level; array order is kept.",
			"input": {
				"b": {
					"z": 1,
					"a": [
						{
							"y": 2,
							"x": 1
						},
						3
					]
				},
				"a": 0
			},
			"canonical": "{\"a\":0,\"b\":{\"a\":[{\"x\":1,\"y\":2},3],\"z\":1}}",
			"sha256": "60063233a4232cd0a62c2e269f901c755e275659c0470e3b4be60d760c1c4363"
		}
	]
}
