The corpus is part of the automated test suite and is also available as plain JSON for independent inspection. A passing case supports the declared behavior; it is not a certification or proof that every possible input is defect-free.
Download the complete JSON corpus
The corpus is released under CC0 1.0 so it can be copied into other test suites.
Included cases
001Equal empty objectsJSON valuesPP-001
{}{}{
"exactEqual": true,
"filteredEqual": true,
"patchVerified": true
}002Object member order is insignificantJSON valuesPP-002
{"a":1,"b":2}{"b":2,"a":1}{
"exactEqual": true,
"filteredEqual": true,
"patchVerified": true
}003Added object memberObjectsPP-003
{"a":1}{"a":1,"b":2}{
"exactEqual": false,
"counts": {
"added": 1
},
"patchVerified": true
}004Removed object memberObjectsPP-004
{"a":1,"b":2}{"a":1}{
"exactEqual": false,
"counts": {
"removed": 1
},
"patchVerified": true
}005Missing differs from nullJSON valuesPP-005
{"value":null}{}{
"exactEqual": false,
"counts": {
"removed": 1
},
"patchVerified": true
}006Boolean differs from stringTypesPP-006
{"enabled":false}{"enabled":"false"}{
"exactEqual": false,
"counts": {
"type": 1
},
"patchVerified": true
}007Root scalar modificationRoot valuesPP-007
12{
"exactEqual": false,
"counts": {
"modified": 1
},
"patchVerified": true
}008Root value type changeRoot valuesPP-008
[]{}{
"exactEqual": false,
"counts": {
"type": 1
},
"patchVerified": true
}009Ordered arrays compare by positionOrdered arraysPP-009
[1,2][2,1]{
"exactEqual": false,
"counts": {
"modified": 2
},
"patchVerified": true
}010Array tail appendOrdered arraysPP-010
[1][1,2]{
"exactEqual": false,
"counts": {
"added": 1
},
"patchVerified": true
}011Array tail removalOrdered arraysPP-011
[1,2][1]{
"exactEqual": false,
"counts": {
"removed": 1
},
"patchVerified": true
}012Keyed array reorderKeyed arraysPP-012
{"items":[{"id":"a","v":1},{"id":"b","v":2}]}{"items":[{"id":"b","v":2},{"id":"a","v":1}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"exactEqual": false,
"filteredEqual": true,
"patchVerified": true
}013Keyed array value changeKeyed arraysPP-013
{"items":[{"id":"a","v":1}]}{"items":[{"id":"a","v":2}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"modified": 1
},
"patchVerified": true
}014Keyed array additionKeyed arraysPP-014
{"items":[{"id":"a"}]}{"items":[{"id":"a"},{"id":"b"}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"added": 1
},
"patchVerified": true
}015Keyed array removalKeyed arraysPP-015
{"items":[{"id":"a"},{"id":"b"}]}{"items":[{"id":"a"}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"removed": 1
},
"patchVerified": true
}016Duplicate keyed identity is unresolvedAmbiguityPP-016
{"items":[{"id":"a"},{"id":"a"}]}{"items":[{"id":"a"}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"unresolved": 1
},
"patchVerified": true
}017Missing keyed identity is unresolvedAmbiguityPP-017
{"items":[{"id":"a"},{}]}{"items":[{"id":"a"}]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"unresolved": 1
},
"patchVerified": true
}018Non-object keyed item is unresolvedAmbiguityPP-018
{"items":[1]}{"items":[2]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/items",
"mode": "keyed",
"key": "id"
}
]
}{
"counts": {
"unresolved": 1
},
"patchVerified": true
}019Unordered array reorderUnordered arraysPP-019
{"tags":["a","b"]}{"tags":["b","a"]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/tags",
"mode": "unordered"
}
]
}{
"exactEqual": false,
"filteredEqual": true,
"patchVerified": true
}020Unordered arrays preserve duplicate countsUnordered arraysPP-020
{"tags":["a","a"]}{"tags":["a"]}{
"arrayRules": [
{
"id": "r1",
"pointer": "/tags",
"mode": "unordered"
}
]
}{
"counts": {
"removed": 1
},
"patchVerified": true
}021Ignore exact pointerIgnore rulesPP-021
{"meta":{"requestId":"a"},"value":1}{"meta":{"requestId":"b"},"value":1}{
"ignorePointers": [
"/meta/requestId"
]
}{
"exactEqual": false,
"filteredEqual": true,
"ignoredCount": 1,
"patchVerified": true
}022JSON Pointer slash escapingJSON PointerPP-022
{"a/b":1}{"a/b":2}{
"ignorePointers": [
"/a~1b"
]
}{
"exactEqual": false,
"filteredEqual": true,
"ignoredCount": 1,
"patchVerified": true
}023JSON Pointer tilde escapingJSON PointerPP-023
{"a~b":1}{"a~b":2}{
"ignorePointers": [
"/a~0b"
]
}{
"exactEqual": false,
"filteredEqual": true,
"ignoredCount": 1,
"patchVerified": true
}024Ignore a key everywhereIgnore rulesPP-024
{"id":1,"nested":{"id":2}}{"id":3,"nested":{"id":4}}{
"ignoreKeys": [
"id"
]
}{
"exactEqual": false,
"filteredEqual": true,
"ignoredCount": 2,
"patchVerified": true
}025Numeric change within toleranceNumbersPP-025
{"score":10}{"score":10.04}{
"numericTolerance": 0.05
}{
"exactEqual": false,
"filteredEqual": true,
"patchVerified": true
}026Numeric change outside toleranceNumbersPP-026
{"score":10}{"score":10.06}{
"numericTolerance": 0.05
}{
"exactEqual": false,
"counts": {
"modified": 1
},
"patchVerified": true
}027Large integers remain distinctNumbersPP-027
{"id":9007199254740992}{"id":9007199254740993}{
"exactEqual": false,
"counts": {
"modified": 1
},
"patchVerified": true
}028Equivalent exponent notationNumbersPP-028
{"value":1e3}{"value":1000}{
"exactEqual": true,
"filteredEqual": true,
"patchVerified": true
}029Duplicate object names block patch exportAmbiguityPP-029
{"id":1,"id":2}{"id":2}{
"patchVerified": false,
"duplicateWarning": true
}030Patch path escapes slash and tildeJSON PatchPP-030
{}{"a/b~c":1}{
"exactEqual": false,
"counts": {
"added": 1
},
"patchVerified": true,
"patchContains": "/a~1b~0c"
}What the suite verifies
Cases cover object order, missing versus null values, root scalars, ordered arrays, explicit match-by-key behavior, ambiguity stops, unordered duplicate counts, RFC 6901 escaping, ignore coverage, numeric tolerance, large integer distinction, duplicate names, and verified patch paths.
The suite asserts exact-patch signals separately from filtered review expectations. A representative exported patch is also applied with an independent RFC 6902 library. This guards the separation between semantic review rules and the original-to-modified patch contract without claiming a second, independent semantic-diff implementation.