[
  {
    "comment": "4.1. add with missing object",
    "doc": { "q": { "bar": 2 } },
    "patch": [ {"op": "add", "path": "/a/b", "value": 1} ],
    "error":
       "path /a does not exist -- missing objects are not created recursively"
  },

  {
    "comment": "A.1.  Adding an Object Member",
    "doc": {
  "foo": "bar"
},
    "patch": [
  { "op": "add", "path": "/baz", "value": "qux" }
],
    "expected": {
  "baz": "qux",
  "foo": "bar"
}
  },

  {
    "comment": "A.2.  Adding an Array Element",
    "doc": {
  "foo": [ "bar", "baz" ]
},
    "patch": [
  { "op": "add", "path": "/foo/1", "value": "qux" }
],
    "expected": {
  "foo": [ "bar", "qux", "baz" ]
}
  },

  {
    "comment": "A.3.  Removing an Object Member",
    "doc": {
  "baz": "qux",
  "foo": "bar"
},
    "patch": [
  { "op": "remove", "path": "/baz" }
],
    "expected": {
  "foo": "bar"
}
  },

  {
    "comment": "A.4.  Removing an Array Element",
    "doc": {
  "foo": [ "bar", "qux", "baz" ]
},
    "patch": [
  { "op": "remove", "path": "/foo/1" }
],
    "expected": {
  "foo": [ "bar", "baz" ]
}
  },

  {
    "comment": "A.5.  Replacing a Value",
    "doc": {
  "baz": "qux",
  "foo": "bar"
},
    "patch": [
  { "op": "replace", "path": "/baz", "value": "boo" }
],
    "expected": {
  "baz": "boo",
  "foo": "bar"
}
  },

  {
    "comment": "A.6.  Moving a Value",
    "doc": {
  "foo": {
    "bar": "baz",
    "waldo": "fred"
  },
  "qux": {
    "corge": "grault"
  }
},
    "patch": [
  { "op": "move", "from": "/foo/waldo", "path": "/qux/thud" }
],
    "expected": {
  "foo": {
    "bar": "baz"
  },
  "qux": {
    "corge": "grault",
    "thud": "fred"
  }
}
  },

  {
    "comment": "A.7.  Moving an Array Element",
    "doc": {
  "foo": [ "all", "grass", "cows", "eat" ]
},
    "patch": [
  { "op": "move", "from": "/foo/1", "path": "/foo/3" }
],
    "expected": {
  "foo": [ "all", "cows", "eat", "grass" ]
}

  },

  {
    "comment": "A.8.  Testing a Value: Success",
    "doc": {
  "baz": "qux",
  "foo": [ "a", 2, "c" ]
},
    "patch": [
  { "op": "test", "path": "/baz", "value": "qux" },
  { "op": "test", "path": "/foo/1", "value": 2 }
],
    "expected": {
     "baz": "qux",
     "foo": [ "a", 2, "c" ]
    }
  },

  {
    "comment": "A.9.  Testing a Value: Error",
    "doc": {
  "baz": "qux"
},
    "patch": [
  { "op": "test", "path": "/baz", "value": "bar" }
],
    "error": "string not equivalent"
  },

  {
    "comment": "A.10.  Adding a nested Member Object",
    "doc": {
  "foo": "bar"
},
    "patch": [
  { "op": "add", "path": "/child", "value": { "grandchild": { } } }
],
    "expected": {
  "foo": "bar",
  "child": {
    "grandchild": {
    }
  }
}
  },

  {
    "comment": "A.11.  Ignoring Unrecognized Elements",
    "doc": {
  "foo":"bar"
},
    "patch": [
  { "op": "add", "path": "/baz", "value": "qux", "xyz": 123 }
],
    "expected": {
  "foo":"bar",
  "baz":"qux"
}
  },

 {
    "comment": "A.12.  Adding to a Non-existent Target",
    "doc": {
  "foo": "bar"
},
    "patch": [
  { "op": "add", "path": "/baz/bat", "value": "qux" }
],
    "error": "add to a non-existent target"
  },

 {
    "comment": "A.13 Invalid JSON Patch Document",
    "doc": {
     "foo": "bar"
    },
    "patch": [
  { "op": "add", "path": "/baz", "value": "qux", "op": "remove" }
],
    "error": "operation has two 'op' members",
    "disabled": true
  },

  {
    "comment": "A.14. ~ Escape Ordering",
    "doc": {
       "/": 9,
       "~1": 10
    },
    "patch": [{"op": "test", "path": "/~01", "value": 10}],
    "expected": {
       "/": 9,
       "~1": 10
    }
  },

  {
    "comment": "A.15. Comparing Strings and Numbers",
    "doc": {
       "/": 9,
       "~1": 10
    },
    "patch": [{"op": "test", "path": "/~01", "value": "10"}],
    "error": "number is not equal to string"
  },

  {
    "comment": "A.16. Adding an Array Value",
    "doc": {
       "foo": ["bar"]
    },
    "patch": [{ "op": "add", "path": "/foo/-", "value": ["abc", "def"] }],
    "expected": {
      "foo": ["bar", ["abc", "def"]]
    }
  }

]
