102 lines
2.7 KiB
C
102 lines
2.7 KiB
C
|
/*
|
||
|
* Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
|
||
|
*
|
||
|
* Jansson is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the MIT license. See LICENSE for details.
|
||
|
*/
|
||
|
|
||
|
#include <jansson.h>
|
||
|
#include "util.h"
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
json_t *object, *string, *other_string, *value;
|
||
|
|
||
|
object = json_object();
|
||
|
string = json_string("test");
|
||
|
other_string = json_string("other");
|
||
|
|
||
|
if(!object)
|
||
|
fail("unable to create object");
|
||
|
if(!string)
|
||
|
fail("unable to create string");
|
||
|
if(!other_string)
|
||
|
fail("unable to create string");
|
||
|
|
||
|
if(json_object_get(object, "a"))
|
||
|
fail("value for nonexisting key");
|
||
|
|
||
|
if(json_object_set(object, "a", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
/* invalid UTF-8 in key */
|
||
|
if(!json_object_set(object, "a\xefz", string))
|
||
|
fail("able to set invalid unicode key");
|
||
|
|
||
|
value = json_object_get(object, "a");
|
||
|
if(!value)
|
||
|
fail("no value for existing key");
|
||
|
if(value != string)
|
||
|
fail("got different value than what was added");
|
||
|
|
||
|
/* "a", "lp" and "px" collide with a five-bucket hashtable */
|
||
|
if(json_object_set(object, "b", string) ||
|
||
|
json_object_set(object, "lp", string) ||
|
||
|
json_object_set(object, "px", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
value = json_object_get(object, "a");
|
||
|
if(!value)
|
||
|
fail("no value for existing key");
|
||
|
if(value != string)
|
||
|
fail("got different value than what was added");
|
||
|
|
||
|
if(json_object_set(object, "a", other_string))
|
||
|
fail("unable to replace an existing key");
|
||
|
|
||
|
value = json_object_get(object, "a");
|
||
|
if(!value)
|
||
|
fail("no value for existing key");
|
||
|
if(value != other_string)
|
||
|
fail("got different value than what was set");
|
||
|
|
||
|
if(!json_object_del(object, "nonexisting"))
|
||
|
fail("able to delete a nonexisting key");
|
||
|
|
||
|
if(json_object_del(object, "px"))
|
||
|
fail("unable to delete an existing key");
|
||
|
|
||
|
if(json_object_del(object, "a"))
|
||
|
fail("unable to delete an existing key");
|
||
|
|
||
|
if(json_object_del(object, "lp"))
|
||
|
fail("unable to delete an existing key");
|
||
|
|
||
|
|
||
|
/* add many keys to rehashing */
|
||
|
|
||
|
if(json_object_set(object, "a", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
if(json_object_set(object, "lp", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
if(json_object_set(object, "px", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
if(json_object_set(object, "c", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
if(json_object_set(object, "d", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
if(json_object_set(object, "e", string))
|
||
|
fail("unable to set value");
|
||
|
|
||
|
json_decref(string);
|
||
|
json_decref(other_string);
|
||
|
json_decref(object);
|
||
|
|
||
|
return 0;
|
||
|
}
|