Public conformance corpus

JSON diff conformance cases you can inspect.

These versioned fixtures exercise the same comparison engine used in the workbench. Each case declares its inputs, rules, and expected observable result.

30versioned cases
12behavior categories
v1.0.0corpus version

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

001
Equal empty objectsJSON values
PP-001
Original
{}
Modified
{}
Expected observable result
{
  "exactEqual": true,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-001
002
Object member order is insignificantJSON values
PP-002
Original
{"a":1,"b":2}
Modified
{"b":2,"a":1}
Expected observable result
{
  "exactEqual": true,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-002
003
Added object memberObjects
PP-003
Original
{"a":1}
Modified
{"a":1,"b":2}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "added": 1
  },
  "patchVerified": true
}
Direct link to PP-003
004
Removed object memberObjects
PP-004
Original
{"a":1,"b":2}
Modified
{"a":1}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "removed": 1
  },
  "patchVerified": true
}
Direct link to PP-004
005
Missing differs from nullJSON values
PP-005
Original
{"value":null}
Modified
{}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "removed": 1
  },
  "patchVerified": true
}
Direct link to PP-005
006
Boolean differs from stringTypes
PP-006
Original
{"enabled":false}
Modified
{"enabled":"false"}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "type": 1
  },
  "patchVerified": true
}
Direct link to PP-006
007
Root scalar modificationRoot values
PP-007
Original
1
Modified
2
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "modified": 1
  },
  "patchVerified": true
}
Direct link to PP-007
008
Root value type changeRoot values
PP-008
Original
[]
Modified
{}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "type": 1
  },
  "patchVerified": true
}
Direct link to PP-008
009
Ordered arrays compare by positionOrdered arrays
PP-009
Original
[1,2]
Modified
[2,1]
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "modified": 2
  },
  "patchVerified": true
}
Direct link to PP-009
010
Array tail appendOrdered arrays
PP-010
Original
[1]
Modified
[1,2]
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "added": 1
  },
  "patchVerified": true
}
Direct link to PP-010
011
Array tail removalOrdered arrays
PP-011
Original
[1,2]
Modified
[1]
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "removed": 1
  },
  "patchVerified": true
}
Direct link to PP-011
012
Keyed array reorderKeyed arrays
PP-012
Original
{"items":[{"id":"a","v":1},{"id":"b","v":2}]}
Modified
{"items":[{"id":"b","v":2},{"id":"a","v":1}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-012
013
Keyed array value changeKeyed arrays
PP-013
Original
{"items":[{"id":"a","v":1}]}
Modified
{"items":[{"id":"a","v":2}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "modified": 1
  },
  "patchVerified": true
}
Direct link to PP-013
014
Keyed array additionKeyed arrays
PP-014
Original
{"items":[{"id":"a"}]}
Modified
{"items":[{"id":"a"},{"id":"b"}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "added": 1
  },
  "patchVerified": true
}
Direct link to PP-014
015
Keyed array removalKeyed arrays
PP-015
Original
{"items":[{"id":"a"},{"id":"b"}]}
Modified
{"items":[{"id":"a"}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "removed": 1
  },
  "patchVerified": true
}
Direct link to PP-015
016
Duplicate keyed identity is unresolvedAmbiguity
PP-016
Original
{"items":[{"id":"a"},{"id":"a"}]}
Modified
{"items":[{"id":"a"}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "unresolved": 1
  },
  "patchVerified": true
}
Direct link to PP-016
017
Missing keyed identity is unresolvedAmbiguity
PP-017
Original
{"items":[{"id":"a"},{}]}
Modified
{"items":[{"id":"a"}]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "unresolved": 1
  },
  "patchVerified": true
}
Direct link to PP-017
018
Non-object keyed item is unresolvedAmbiguity
PP-018
Original
{"items":[1]}
Modified
{"items":[2]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/items",
      "mode": "keyed",
      "key": "id"
    }
  ]
}
Expected observable result
{
  "counts": {
    "unresolved": 1
  },
  "patchVerified": true
}
Direct link to PP-018
019
Unordered array reorderUnordered arrays
PP-019
Original
{"tags":["a","b"]}
Modified
{"tags":["b","a"]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/tags",
      "mode": "unordered"
    }
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-019
020
Unordered arrays preserve duplicate countsUnordered arrays
PP-020
Original
{"tags":["a","a"]}
Modified
{"tags":["a"]}
Rules
{
  "arrayRules": [
    {
      "id": "r1",
      "pointer": "/tags",
      "mode": "unordered"
    }
  ]
}
Expected observable result
{
  "counts": {
    "removed": 1
  },
  "patchVerified": true
}
Direct link to PP-020
021
Ignore exact pointerIgnore rules
PP-021
Original
{"meta":{"requestId":"a"},"value":1}
Modified
{"meta":{"requestId":"b"},"value":1}
Rules
{
  "ignorePointers": [
    "/meta/requestId"
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "ignoredCount": 1,
  "patchVerified": true
}
Direct link to PP-021
022
JSON Pointer slash escapingJSON Pointer
PP-022
Original
{"a/b":1}
Modified
{"a/b":2}
Rules
{
  "ignorePointers": [
    "/a~1b"
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "ignoredCount": 1,
  "patchVerified": true
}
Direct link to PP-022
023
JSON Pointer tilde escapingJSON Pointer
PP-023
Original
{"a~b":1}
Modified
{"a~b":2}
Rules
{
  "ignorePointers": [
    "/a~0b"
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "ignoredCount": 1,
  "patchVerified": true
}
Direct link to PP-023
024
Ignore a key everywhereIgnore rules
PP-024
Original
{"id":1,"nested":{"id":2}}
Modified
{"id":3,"nested":{"id":4}}
Rules
{
  "ignoreKeys": [
    "id"
  ]
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "ignoredCount": 2,
  "patchVerified": true
}
Direct link to PP-024
025
Numeric change within toleranceNumbers
PP-025
Original
{"score":10}
Modified
{"score":10.04}
Rules
{
  "numericTolerance": 0.05
}
Expected observable result
{
  "exactEqual": false,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-025
026
Numeric change outside toleranceNumbers
PP-026
Original
{"score":10}
Modified
{"score":10.06}
Rules
{
  "numericTolerance": 0.05
}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "modified": 1
  },
  "patchVerified": true
}
Direct link to PP-026
027
Large integers remain distinctNumbers
PP-027
Original
{"id":9007199254740992}
Modified
{"id":9007199254740993}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "modified": 1
  },
  "patchVerified": true
}
Direct link to PP-027
028
Equivalent exponent notationNumbers
PP-028
Original
{"value":1e3}
Modified
{"value":1000}
Expected observable result
{
  "exactEqual": true,
  "filteredEqual": true,
  "patchVerified": true
}
Direct link to PP-028
029
Duplicate object names block patch exportAmbiguity
PP-029
Original
{"id":1,"id":2}
Modified
{"id":2}
Expected observable result
{
  "patchVerified": false,
  "duplicateWarning": true
}
Direct link to PP-029
030
Patch path escapes slash and tildeJSON Patch
PP-030
Original
{}
Modified
{"a/b~c":1}
Expected observable result
{
  "exactEqual": false,
  "counts": {
    "added": 1
  },
  "patchVerified": true,
  "patchContains": "/a~1b~0c"
}
Direct link to PP-030

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.

Ready to inspect two payloads?

Open the JSON comparison workbench