diff options
| -rw-r--r-- | json.c | 5 | ||||
| -rw-r--r-- | json.h | 1 | ||||
| -rw-r--r-- | test_json.c | 30 |
3 files changed, 27 insertions, 9 deletions
@@ -213,6 +213,11 @@ parse_any_result parse_any(Arena *a, byte *src, uptr start_pos) { result.value->boolean = new(a, i32, 1); *result.value->boolean = 0; result.pos = start_pos + 5; + } else if (memcmp(src + result.pos, "null", 4) == 0) { + result.value->null = new(a, i32, 1); + result.pos = start_pos + 4; + } else { + assert(false); } return result; @@ -15,6 +15,7 @@ typedef struct { f32 *floating; Vec *array; // Vec<JSON> Str *string; + void *null; JSONObject *object; } JSON; JSON *JSONObject_get(JSONObject *obj, Str key); diff --git a/test_json.c b/test_json.c index 91bae28..70b3965 100644 --- a/test_json.c +++ b/test_json.c @@ -7,7 +7,7 @@ i32 test_json_integer() { JSON json_int = JSON_parse(&perm, "123"); t_assert(*json_int.integer == 123); - t_assert_equal(Arena_get_used(perm), 52); + t_assert_equal(Arena_get_used(perm), 60); return 0; } @@ -29,7 +29,7 @@ i32 test_json_int_array() { t_assert(ints[1] == 2); t_assert(ints[2] == 3); t_assert(sum == 6); - t_assert_equal(Arena_get_used(perm), 544); + t_assert_equal(Arena_get_used(perm), 624); return 0; } @@ -40,7 +40,7 @@ i32 test_json_empty_array() { JSON json_empty_array = JSON_parse(&perm, "[]"); t_assert(json_empty_array.array->len == 0); - t_assert_equal(Arena_get_used(perm), 184); + t_assert_equal(Arena_get_used(perm), 208); return 0; } @@ -57,7 +57,7 @@ i32 test_json_nested_array() { Str str = *val_2.string; Str expected = S("abc"); t_assert(Str_equals(str, expected)); - t_assert_equal(Arena_get_used(perm), 491); + t_assert_equal(Arena_get_used(perm), 555); return 0; } @@ -68,7 +68,7 @@ i32 test_json_string() { JSON js = JSON_parse(&perm, "\"abc\""); t_assert(Str_equals(*js.string, S("abc"))); - t_assert_equal(Arena_get_used(perm), 67); + t_assert_equal(Arena_get_used(perm), 75); return 0; } @@ -79,7 +79,7 @@ i32 test_json_empty_object() { JSON doc = JSON_parse(&perm, "{}"); t_assert_equal(doc.object->len, 0); - t_assert_equal(Arena_get_used(perm), 344); + t_assert_equal(Arena_get_used(perm), 368); return 0; } @@ -93,7 +93,7 @@ i32 test_json_object() { t_assert(Str_equals(*Vec_get(&doc.object->keys, Str, 0), S("key"))); JSON value = *JSONObject_get(doc.object, S("key")); t_assert(Str_equals(*value.string, S("value"))); - t_assert_equal(Arena_get_used(perm), 437); + t_assert_equal(Arena_get_used(perm), 469); return 0; } @@ -107,7 +107,7 @@ i32 test_json_boolean() { t_assert(*a.boolean == 1); JSON b = *JSONObject_get(doc.object, S("b")); t_assert(*b.boolean == 0); - t_assert_equal(Arena_get_used(perm), 500); + t_assert_equal(Arena_get_used(perm), 540); return 0; } @@ -121,7 +121,19 @@ i32 test_json_float() { t_assert_fequal(*first.floating, 1.2); JSON second = *Vec_get(doc.array, JSON, 1); t_assert_fequal(*second.floating, 2.3); - t_assert_equal(Arena_get_used(perm), 292); + t_assert_equal(Arena_get_used(perm), 332); + + return 0; +} + +i32 test_json_null() { + Arena perm = Arena_new(128e3); + + JSON doc = JSON_parse(&perm, "[null]"); + t_assert_equal(doc.array->len, 1); + JSON first = *Vec_get(doc.array, JSON, 0); + t_assert(first.null != 0); + t_assert_equal(Arena_get_used(perm), 268); return 0; } |
