anchor.diff:       fun setup/0,
       [{"proplist",?_assertEqual(8000, proplists:get_value(<<"age">>,PropOut))},
        {"map",?_assertEqual(8000, maps:get(<<"age">>,MapOut))},
  -     {"json",?_assertEqual(8000,?MODULE:get(<<"age">>,JsonOut))}]}.
  +     {"json",?_assertEqual(8000,?MODULE:get(<<"age">>,JsonOut))},
  +     {"error_prop",?_assertError(badarg,update(<<"not_there">>,true,?TEST_PROP))},
  +     {"error_map",?_assertError(badarg,update(<<"not_there">>,true,?TEST_MAP))}
  +     ]}.
  +
   
   values_test_() ->
       Values = lists:sort([<<"Doe">>,<<"John">>,<<"bar">>,true,981,null]),
  
positive.code: 
  -spec json_binary_decode(Json) -> data_object() when Json :: binary().
  json_binary_decode(Json) ->
      %% Json Lib detection should probably be replaced by an environment variable
      Apps = [App || {App,_,_} <- application:loaded_applications()],
      case [_Fun || {_Lib,_Fun,_} <- ?JSON_LIBS, lists:member(_Lib,Apps)] of
          [Decode|_] -> Decode(Json);
          []     -> ?NO_JSON_LIB 
      end.
  
  -spec json_binary_encode(data_object()) -> Json when Json :: binary().
  json_binary_encode(Json) ->
      %% Json Lib detection should probably be replaced by an environment variable
      Apps = [App || {App,_,_} <- application:loaded_applications()],
      case [_Fun || {_Lib,_,_Fun} <- ?JSON_LIBS, lists:member(_Lib,Apps)] of
          [Encode|_] -> Encode(Json);
          []     -> ?NO_JSON_LIB 
      end.
  
negative.code:      {"json",?_assertEqual(false,?MODULE:get(<<"earthling">>,JsonOut))}]}.
  
  new_test_() -> 
      %% Depends on default type setting
      Test = [],
      {setup,
       fun setup/0,
      [{"proplist",?_assertEqual([],new(proplist))},
       {"map",?_assertEqual(#{},new(map))},
       {"json",?_assertEqual(<<"{}">>,new(json))},
       {"default",?_assertEqual(Test,new())}]}.
  
  put_test_() -> 
      {setup,
  