   getIn: _getIn
   setIn: (obj, path, val) -> timm.setIn obj, path, val
   merge: (obj1, obj2) -> timm.merge obj1, obj2
+  mergeDeep: (obj1, obj2) -> timm.mergeDeep obj1, obj2
   initArr: -> _.cloneDeep INITIAL_ARRAY
   getAt: (arr, idx) -> arr[idx]
   setAt: (arr, idx, val) -> timm.replaceAt arr, idx, val

  getIn: _getIn
  setIn: (obj, path, val) -> obj.setIn path, val
  merge: (obj1, obj2) -> obj1.merge obj2
  initArr: -> Seamless INITIAL_ARRAY
  getAt: (arr, idx) -> arr[idx]
  setAt: (arr, idx, val) -> arr.set idx, val

  obj2 = merge obj, {c: 5, f: null}
  _addResult results, (obj2 isnt obj)
  _addResult results, (get(obj2, 'd') is get(obj, 'd'))
  _addResult results, (get(obj2, 'c') is 5)
  _addResult results, (get(obj2, 'f') is null)
  results.push '-'

  # Deep merge
  obj2 = mergeDeep obj, {c: 5, f: null, d: {d9: {b: {a: 1}}}}
  changedPath = ['d', 'd9', 'b', 'a']
  unchangedPath = ['d', 'd9', 'b', 'b']
  _addResult results, (obj2 isnt obj)
  _addResult results, (getIn(obj2, changedPath) is 1)
  _addResult results, (getIn(obj2, unchangedPath) is getIn(obj, unchangedPath))
  _addResult results, (get(obj2, 'c') is 5)
  _addResult results, (get(obj2, 'f') is null)
  results.push '-'
