LCOV - code coverage report
Current view: top level - spdk/test/unit/lib/json/json_parse.c - json_parse_ut.c (source / functions) Hit Total Coverage
Test: Combined Lines: 596 596 100.0 %
Date: 2024-11-19 18:25:22 Functions: 12 12 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 7871 15348 51.3 %

           Branch data     Line data    Source code
       1                 :            : /*   SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  *   Copyright (C) 2016 Intel Corporation.
       3                 :            :  *   All rights reserved.
       4                 :            :  */
       5                 :            : 
       6                 :            : #include "spdk/stdinc.h"
       7                 :            : 
       8                 :            : #include "spdk_internal/cunit.h"
       9                 :            : 
      10                 :            : #include "json/json_parse.c"
      11                 :            : 
      12                 :            : #define JSONVALUE_NUM 100
      13                 :            : 
      14                 :            : static uint8_t g_buf[1000];
      15                 :            : static void *g_end;
      16                 :            : static struct spdk_json_val g_vals[JSONVALUE_NUM];
      17                 :            : static int g_cur_val;
      18                 :            : 
      19                 :            : /* Fill buf with raw data */
      20                 :            : #define BUF_SETUP(in) \
      21                 :            :         memset(g_buf, 0, sizeof(g_buf)); \
      22                 :            :         if (sizeof(in) > 1) { \
      23                 :            :                 memcpy(g_buf, in, sizeof(in) - 1); \
      24                 :            :         } \
      25                 :            :         g_end = NULL
      26                 :            : 
      27                 :            : /*
      28                 :            :  * Do two checks - first pass NULL for values to ensure the count is correct,
      29                 :            :  *  then pass g_vals to get the actual values.
      30                 :            :  */
      31                 :            : #define PARSE_PASS_FLAGS(in, num_vals, trailing, flags) \
      32                 :            :         BUF_SETUP(in); \
      33                 :            :         CU_ASSERT(spdk_json_parse(g_buf, sizeof(in) - 1, NULL, 0, &g_end, flags) == num_vals); \
      34                 :            :         memset(g_vals, 0, sizeof(g_vals)); \
      35                 :            :         CU_ASSERT(spdk_json_parse(g_buf, sizeof(in) - 1, g_vals, JSONVALUE_NUM, &g_end, flags | SPDK_JSON_PARSE_FLAG_DECODE_IN_PLACE) == num_vals); \
      36                 :            :         CU_ASSERT(g_end == g_buf + sizeof(in) - sizeof(trailing)); \
      37                 :            :         CU_ASSERT(memcmp(g_end, trailing, sizeof(trailing) - 1) == 0); \
      38                 :            :         g_cur_val = 0
      39                 :            : 
      40                 :            : #define PARSE_PASS(in, num_vals, trailing) \
      41                 :            :         PARSE_PASS_FLAGS(in, num_vals, trailing, 0)
      42                 :            : 
      43                 :            : #define PARSE_FAIL_FLAGS(in, retval, flags) \
      44                 :            :         BUF_SETUP(in); \
      45                 :            :         CU_ASSERT(spdk_json_parse(g_buf, sizeof(in) - 1, NULL, 0, &g_end, flags) == retval)
      46                 :            : 
      47                 :            : #define PARSE_FAIL(in, retval) \
      48                 :            :         PARSE_FAIL_FLAGS(in, retval, 0)
      49                 :            : 
      50                 :            : #define VAL_STRING_MATCH(str, var_type) \
      51                 :            :         CU_ASSERT(g_vals[g_cur_val].type == var_type); \
      52                 :            :         CU_ASSERT(g_vals[g_cur_val].len == sizeof(str) - 1); \
      53                 :            :         if (g_vals[g_cur_val].len == sizeof(str) - 1 && sizeof(str) > 1) { \
      54                 :            :                 CU_ASSERT(memcmp(g_vals[g_cur_val].start, str, g_vals[g_cur_val].len) == 0); \
      55                 :            :         } \
      56                 :            :         g_cur_val++
      57                 :            : 
      58                 :            : #define VAL_STRING(str) VAL_STRING_MATCH(str, SPDK_JSON_VAL_STRING)
      59                 :            : #define VAL_NAME(str) VAL_STRING_MATCH(str, SPDK_JSON_VAL_NAME)
      60                 :            : #define VAL_NUMBER(num) VAL_STRING_MATCH(num, SPDK_JSON_VAL_NUMBER)
      61                 :            : 
      62                 :            : #define VAL_LITERAL(str, val_type) \
      63                 :            :         CU_ASSERT(g_vals[g_cur_val].type == val_type); \
      64                 :            :         CU_ASSERT(g_vals[g_cur_val].len == strlen(str)); \
      65                 :            :         if (g_vals[g_cur_val].len == strlen(str)) { \
      66                 :            :                 CU_ASSERT(memcmp(g_vals[g_cur_val].start, str, g_vals[g_cur_val].len) == 0); \
      67                 :            :         } \
      68                 :            :         g_cur_val++
      69                 :            : 
      70                 :            : #define VAL_TRUE() VAL_LITERAL("true", SPDK_JSON_VAL_TRUE)
      71                 :            : #define VAL_FALSE() VAL_LITERAL("false", SPDK_JSON_VAL_FALSE)
      72                 :            : #define VAL_NULL() VAL_LITERAL("null", SPDK_JSON_VAL_NULL)
      73                 :            : 
      74                 :            : #define VAL_ARRAY_BEGIN(count) \
      75                 :            :         CU_ASSERT(g_vals[g_cur_val].type == SPDK_JSON_VAL_ARRAY_BEGIN); \
      76                 :            :         CU_ASSERT(g_vals[g_cur_val].len == count); \
      77                 :            :         g_cur_val++
      78                 :            : 
      79                 :            : #define VAL_ARRAY_END() \
      80                 :            :         CU_ASSERT(g_vals[g_cur_val].type == SPDK_JSON_VAL_ARRAY_END); \
      81                 :            :         g_cur_val++
      82                 :            : 
      83                 :            : #define VAL_OBJECT_BEGIN(count) \
      84                 :            :         CU_ASSERT(g_vals[g_cur_val].type == SPDK_JSON_VAL_OBJECT_BEGIN); \
      85                 :            :         CU_ASSERT(g_vals[g_cur_val].len == count); \
      86                 :            :         g_cur_val++
      87                 :            : 
      88                 :            : #define VAL_OBJECT_END() \
      89                 :            :         CU_ASSERT(g_vals[g_cur_val].type == SPDK_JSON_VAL_OBJECT_END); \
      90                 :            :         g_cur_val++
      91                 :            : 
      92                 :            : /* Simplified macros for string-only testing */
      93                 :            : #define STR_PASS(in, out) \
      94                 :            :         PARSE_PASS("\"" in "\"", 1, ""); \
      95                 :            :         VAL_STRING(out)
      96                 :            : 
      97                 :            : #define STR_FAIL(in, retval) \
      98                 :            :         PARSE_FAIL("\"" in "\"", retval)
      99                 :            : 
     100                 :            : /* Simplified macros for number-only testing (no whitespace allowed) */
     101                 :            : #define NUM_PASS(in) \
     102                 :            :         PARSE_PASS(in, 1, ""); \
     103                 :            :         VAL_NUMBER(in)
     104                 :            : 
     105                 :            : #define NUM_FAIL(in, retval) \
     106                 :            :         PARSE_FAIL(in, retval)
     107                 :            : 
     108                 :            : static void
     109                 :          5 : test_parse_literal(void)
     110                 :            : {
     111   [ +  -  +  -  :          5 :         PARSE_PASS("true", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     112   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     113                 :            : 
     114   [ +  -  +  -  :          5 :         PARSE_PASS("  true  ", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     115   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     116                 :            : 
     117   [ +  -  +  -  :          5 :         PARSE_PASS("false", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     118   [ +  -  +  +  :          5 :         VAL_FALSE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     119                 :            : 
     120   [ +  -  +  -  :          5 :         PARSE_PASS("null", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     121   [ +  -  +  +  :          5 :         VAL_NULL();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     122                 :            : 
     123   [ +  +  +  -  :          5 :         PARSE_PASS("trueaaa", 1, "aaa");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     124   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     125                 :            : 
     126   [ +  +  +  -  :          5 :         PARSE_PASS("truefalse", 1, "false");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     127   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     128                 :            : 
     129   [ +  +  +  -  :          5 :         PARSE_PASS("true false", 1, "false");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     130   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     131                 :            : 
     132   [ +  +  +  -  :          5 :         PARSE_PASS("true,false", 1, ",false");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     133   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     134                 :            : 
     135   [ +  -  +  -  :          5 :         PARSE_PASS("true,", 1, ",");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     136   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     137                 :            : 
     138   [ +  -  +  -  :          5 :         PARSE_FAIL("True", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     139   [ +  -  +  -  :          5 :         PARSE_FAIL("abcdef", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     140                 :            : 
     141   [ +  -  +  -  :          5 :         PARSE_FAIL("t", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     142   [ +  -  +  -  :          5 :         PARSE_FAIL("tru", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     143   [ +  -  +  -  :          5 :         PARSE_FAIL("f", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     144   [ +  -  +  -  :          5 :         PARSE_FAIL("fals", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     145   [ +  -  +  -  :          5 :         PARSE_FAIL("n", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     146   [ +  -  +  -  :          5 :         PARSE_FAIL("nul", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     147                 :            : 
     148   [ +  -  +  -  :          5 :         PARSE_FAIL("taaaaa", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     149   [ +  -  +  -  :          5 :         PARSE_FAIL("faaaaa", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     150   [ +  -  +  -  :          5 :         PARSE_FAIL("naaaaa", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     151                 :          5 : }
     152                 :            : 
     153                 :            : static void
     154                 :          5 : test_parse_string_simple(void)
     155                 :            : {
     156   [ +  -  +  -  :          5 :         PARSE_PASS("\"\"", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     157   [ +  -  +  -  :          5 :         VAL_STRING("");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  +  
                      - ]
     158                 :            : 
     159   [ +  -  +  -  :          5 :         PARSE_PASS("\"hello world\"", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     160   [ +  -  +  +  :          5 :         VAL_STRING("hello world");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     161                 :            : 
     162   [ +  -  +  -  :          5 :         PARSE_PASS("     \"hello world\"     ", 1, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     163   [ +  -  +  +  :          5 :         VAL_STRING("hello world");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     164                 :            : 
     165                 :            :         /* Unterminated string */
     166   [ +  -  +  -  :          5 :         PARSE_FAIL("\"hello world", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     167                 :            : 
     168                 :            :         /* Trailing comma */
     169   [ +  -  +  -  :          5 :         PARSE_PASS("\"hello world\",", 1, ",");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     170   [ +  -  +  +  :          5 :         VAL_STRING("hello world");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     171                 :          5 : }
     172                 :            : 
     173                 :            : static void
     174                 :          5 : test_parse_string_control_chars(void)
     175                 :            : {
     176                 :            :         /* U+0000 through U+001F must be escaped */
     177   [ +  -  +  -  :          5 :         STR_FAIL("\x00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     178   [ +  -  +  -  :          5 :         STR_FAIL("\x01", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     179   [ +  -  +  -  :          5 :         STR_FAIL("\x02", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     180   [ +  -  +  -  :          5 :         STR_FAIL("\x03", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     181   [ +  -  +  -  :          5 :         STR_FAIL("\x04", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     182   [ +  -  +  -  :          5 :         STR_FAIL("\x05", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     183   [ +  -  +  -  :          5 :         STR_FAIL("\x06", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     184   [ +  -  +  -  :          5 :         STR_FAIL("\x07", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     185   [ +  -  +  -  :          5 :         STR_FAIL("\x08", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     186   [ +  -  +  -  :          5 :         STR_FAIL("\x09", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     187   [ +  -  +  -  :          5 :         STR_FAIL("\x0A", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     188   [ +  -  +  -  :          5 :         STR_FAIL("\x0B", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     189   [ +  -  +  -  :          5 :         STR_FAIL("\x0C", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     190   [ +  -  +  -  :          5 :         STR_FAIL("\x0D", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     191   [ +  -  +  -  :          5 :         STR_FAIL("\x0E", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     192   [ +  -  +  -  :          5 :         STR_FAIL("\x0F", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     193   [ +  -  +  -  :          5 :         STR_FAIL("\x10", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     194   [ +  -  +  -  :          5 :         STR_FAIL("\x11", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     195   [ +  -  +  -  :          5 :         STR_FAIL("\x12", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     196   [ +  -  +  -  :          5 :         STR_FAIL("\x13", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     197   [ +  -  +  -  :          5 :         STR_FAIL("\x14", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     198   [ +  -  +  -  :          5 :         STR_FAIL("\x15", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     199   [ +  -  +  -  :          5 :         STR_FAIL("\x16", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     200   [ +  -  +  -  :          5 :         STR_FAIL("\x17", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     201   [ +  -  +  -  :          5 :         STR_FAIL("\x18", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     202   [ +  -  +  -  :          5 :         STR_FAIL("\x19", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     203   [ +  -  +  -  :          5 :         STR_FAIL("\x1A", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     204   [ +  -  +  -  :          5 :         STR_FAIL("\x1B", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     205   [ +  -  +  -  :          5 :         STR_FAIL("\x1C", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     206   [ +  -  +  -  :          5 :         STR_FAIL("\x1D", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     207   [ +  -  +  -  :          5 :         STR_FAIL("\x1E", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     208   [ +  -  +  -  :          5 :         STR_FAIL("\x1F", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     209   [ +  -  +  +  :          5 :         STR_PASS(" ", " "); /* \x20 (first valid unescaped char) */
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     210                 :            : 
     211                 :            :         /* Test control chars in the middle of a string */
     212   [ +  -  +  -  :          5 :         STR_FAIL("abc\ndef", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     213   [ +  -  +  -  :          5 :         STR_FAIL("abc\tdef", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     214                 :          5 : }
     215                 :            : 
     216                 :            : static void
     217                 :          5 : test_parse_string_utf8(void)
     218                 :            : {
     219                 :            :         /* Valid one-, two-, three-, and four-byte sequences */
     220   [ +  -  +  +  :          5 :         STR_PASS("\x41", "A");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     221   [ +  -  +  +  :          5 :         STR_PASS("\xC3\xB6", "\xC3\xB6");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     222   [ +  -  +  +  :          5 :         STR_PASS("\xE2\x88\x9A", "\xE2\x88\x9A");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     223   [ +  -  +  +  :          5 :         STR_PASS("\xF0\xA0\x9C\x8E", "\xF0\xA0\x9C\x8E");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     224                 :            : 
     225                 :            :         /* Examples from RFC 3629 */
     226   [ +  -  +  +  :          5 :         STR_PASS("\x41\xE2\x89\xA2\xCE\x91\x2E", "\x41\xE2\x89\xA2\xCE\x91\x2E");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     227   [ +  -  +  +  :          5 :         STR_PASS("\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4", "\xED\x95\x9C\xEA\xB5\xAD\xEC\x96\xB4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     228   [ +  -  +  +  :          5 :         STR_PASS("\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E", "\xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     229   [ +  -  +  +  :          5 :         STR_PASS("\xEF\xBB\xBF\xF0\xA3\x8E\xB4", "\xEF\xBB\xBF\xF0\xA3\x8E\xB4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     230                 :            : 
     231                 :            :         /* Edge cases */
     232   [ +  -  +  +  :          5 :         STR_PASS("\x7F", "\x7F");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     233   [ +  -  +  -  :          5 :         STR_FAIL("\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     234   [ +  -  +  -  :          5 :         STR_FAIL("\xC1", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     235   [ +  -  +  -  :          5 :         STR_FAIL("\xC2", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     236   [ +  -  +  +  :          5 :         STR_PASS("\xC2\x80", "\xC2\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     237   [ +  -  +  +  :          5 :         STR_PASS("\xC2\xBF", "\xC2\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     238   [ +  -  +  +  :          5 :         STR_PASS("\xDF\x80", "\xDF\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     239   [ +  -  +  +  :          5 :         STR_PASS("\xDF\xBF", "\xDF\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     240   [ +  -  +  -  :          5 :         STR_FAIL("\xDF", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     241   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     242   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\x1F", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     243   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\x1F\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     244   [ +  -  +  -  :          5 :         STR_FAIL("\xE0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     245   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\xA0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     246   [ +  -  +  +  :          5 :         STR_PASS("\xE0\xA0\x80", "\xE0\xA0\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     247   [ +  -  +  +  :          5 :         STR_PASS("\xE0\xA0\xBF", "\xE0\xA0\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     248   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\xA0\xC0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     249   [ +  -  +  +  :          5 :         STR_PASS("\xE0\xBF\x80", "\xE0\xBF\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     250   [ +  -  +  +  :          5 :         STR_PASS("\xE0\xBF\xBF", "\xE0\xBF\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     251   [ +  -  +  -  :          5 :         STR_FAIL("\xE0\xC0\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     252   [ +  -  +  -  :          5 :         STR_FAIL("\xE1", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     253   [ +  -  +  -  :          5 :         STR_FAIL("\xE1\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     254   [ +  -  +  -  :          5 :         STR_FAIL("\xE1\x7F\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     255   [ +  -  +  -  :          5 :         STR_FAIL("\xE1\x80\x7F", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     256   [ +  -  +  +  :          5 :         STR_PASS("\xE1\x80\x80", "\xE1\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     257   [ +  -  +  +  :          5 :         STR_PASS("\xE1\x80\xBF", "\xE1\x80\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     258   [ +  -  +  +  :          5 :         STR_PASS("\xE1\xBF\x80", "\xE1\xBF\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     259   [ +  -  +  +  :          5 :         STR_PASS("\xE1\xBF\xBF", "\xE1\xBF\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     260   [ +  -  +  -  :          5 :         STR_FAIL("\xE1\xC0\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     261   [ +  -  +  -  :          5 :         STR_FAIL("\xE1\x80\xC0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     262   [ +  -  +  +  :          5 :         STR_PASS("\xEF\x80\x80", "\xEF\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     263   [ +  -  +  +  :          5 :         STR_PASS("\xEF\xBF\xBF", "\xEF\xBF\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     264   [ +  -  +  -  :          5 :         STR_FAIL("\xF0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     265   [ +  -  +  -  :          5 :         STR_FAIL("\xF0\x90", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     266   [ +  -  +  -  :          5 :         STR_FAIL("\xF0\x90\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     267   [ +  -  +  -  :          5 :         STR_FAIL("\xF0\x80\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     268   [ +  -  +  -  :          5 :         STR_FAIL("\xF0\x8F\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     269   [ +  -  +  +  :          5 :         STR_PASS("\xF0\x90\x80\x80", "\xF0\x90\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     270   [ +  -  +  +  :          5 :         STR_PASS("\xF0\x90\x80\xBF", "\xF0\x90\x80\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     271   [ +  -  +  +  :          5 :         STR_PASS("\xF0\x90\xBF\x80", "\xF0\x90\xBF\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     272   [ +  -  +  +  :          5 :         STR_PASS("\xF0\xBF\x80\x80", "\xF0\xBF\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     273   [ +  -  +  -  :          5 :         STR_FAIL("\xF0\xC0\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     274   [ +  -  +  -  :          5 :         STR_FAIL("\xF1", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     275   [ +  -  +  -  :          5 :         STR_FAIL("\xF1\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     276   [ +  -  +  -  :          5 :         STR_FAIL("\xF1\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     277   [ +  -  +  -  :          5 :         STR_FAIL("\xF1\x80\x80\x7F", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     278   [ +  -  +  +  :          5 :         STR_PASS("\xF1\x80\x80\x80", "\xF1\x80\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     279   [ +  -  +  +  :          5 :         STR_PASS("\xF1\x80\x80\xBF", "\xF1\x80\x80\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     280   [ +  -  +  +  :          5 :         STR_PASS("\xF1\x80\xBF\x80", "\xF1\x80\xBF\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     281   [ +  -  +  +  :          5 :         STR_PASS("\xF1\xBF\x80\x80", "\xF1\xBF\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     282   [ +  -  +  +  :          5 :         STR_PASS("\xF3\x80\x80\x80", "\xF3\x80\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     283   [ +  -  +  -  :          5 :         STR_FAIL("\xF3\xC0\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     284   [ +  -  +  -  :          5 :         STR_FAIL("\xF3\x80\xC0\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     285   [ +  -  +  -  :          5 :         STR_FAIL("\xF3\x80\x80\xC0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     286   [ +  -  +  -  :          5 :         STR_FAIL("\xF4", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     287   [ +  -  +  -  :          5 :         STR_FAIL("\xF4\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     288   [ +  -  +  -  :          5 :         STR_FAIL("\xF4\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     289   [ +  -  +  +  :          5 :         STR_PASS("\xF4\x80\x80\x80", "\xF4\x80\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     290   [ +  -  +  +  :          5 :         STR_PASS("\xF4\x8F\x80\x80", "\xF4\x8F\x80\x80");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     291   [ +  -  +  +  :          5 :         STR_PASS("\xF4\x8F\xBF\xBF", "\xF4\x8F\xBF\xBF");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     292   [ +  -  +  -  :          5 :         STR_FAIL("\xF4\x90\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     293   [ +  -  +  -  :          5 :         STR_FAIL("\xF5", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     294   [ +  -  +  -  :          5 :         STR_FAIL("\xF5\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     295   [ +  -  +  -  :          5 :         STR_FAIL("\xF5\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     296   [ +  -  +  -  :          5 :         STR_FAIL("\xF5\x80\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     297   [ +  -  +  -  :          5 :         STR_FAIL("\xF5\x80\x80\x80\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     298                 :            : 
     299                 :            :         /* Overlong encodings */
     300   [ +  -  +  -  :          5 :         STR_FAIL("\xC0\x80", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     301                 :            : 
     302                 :            :         /* Surrogate pairs */
     303   [ +  -  +  -  :          5 :         STR_FAIL("\xED\xA0\x80", SPDK_JSON_PARSE_INVALID); /* U+D800 First high surrogate */
                   +  - ]
     304   [ +  -  +  -  :          5 :         STR_FAIL("\xED\xAF\xBF", SPDK_JSON_PARSE_INVALID); /* U+DBFF Last high surrogate */
                   +  - ]
     305   [ +  -  +  -  :          5 :         STR_FAIL("\xED\xB0\x80", SPDK_JSON_PARSE_INVALID); /* U+DC00 First low surrogate */
                   +  - ]
     306   [ +  -  +  -  :          5 :         STR_FAIL("\xED\xBF\xBF", SPDK_JSON_PARSE_INVALID); /* U+DFFF Last low surrogate */
                   +  - ]
     307   [ +  -  +  -  :          5 :         STR_FAIL("\xED\xA1\x8C\xED\xBE\xB4",
                   +  - ]
     308                 :            :                  SPDK_JSON_PARSE_INVALID); /* U+233B4 (invalid surrogate pair encoding) */
     309                 :          5 : }
     310                 :            : 
     311                 :            : static void
     312                 :          5 : test_parse_string_escapes_twochar(void)
     313                 :            : {
     314   [ +  -  +  +  :          5 :         STR_PASS("\\\"", "\"");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     315   [ +  -  +  +  :          5 :         STR_PASS("\\\\", "\\");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     316   [ +  -  +  +  :          5 :         STR_PASS("\\/", "/");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     317   [ +  -  +  +  :          5 :         STR_PASS("\\b", "\b");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     318   [ +  -  +  +  :          5 :         STR_PASS("\\f", "\f");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     319   [ +  -  +  +  :          5 :         STR_PASS("\\n", "\n");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     320   [ +  -  +  +  :          5 :         STR_PASS("\\r", "\r");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     321   [ +  -  +  +  :          5 :         STR_PASS("\\t", "\t");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     322                 :            : 
     323   [ +  -  +  +  :          5 :         STR_PASS("abc\\tdef", "abc\tdef");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     324   [ +  -  +  +  :          5 :         STR_PASS("abc\\\"def", "abc\"def");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     325                 :            : 
     326                 :            :         /* Backslash at end of string (will be treated as escaped quote) */
     327   [ +  -  +  -  :          5 :         STR_FAIL("\\", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     328   [ +  -  +  -  :          5 :         STR_FAIL("abc\\", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     329                 :            : 
     330                 :            :         /* Invalid C-like escapes */
     331   [ +  -  +  -  :          5 :         STR_FAIL("\\a", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     332   [ +  -  +  -  :          5 :         STR_FAIL("\\v", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     333   [ +  -  +  -  :          5 :         STR_FAIL("\\'", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     334   [ +  -  +  -  :          5 :         STR_FAIL("\\?", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     335   [ +  -  +  -  :          5 :         STR_FAIL("\\0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     336   [ +  -  +  -  :          5 :         STR_FAIL("\\x00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     337                 :            : 
     338                 :            :         /* Other invalid escapes */
     339   [ +  -  +  -  :          5 :         STR_FAIL("\\B", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     340   [ +  -  +  -  :          5 :         STR_FAIL("\\z", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     341                 :          5 : }
     342                 :            : 
     343                 :            : static void
     344                 :          5 : test_parse_string_escapes_unicode(void)
     345                 :            : {
     346   [ +  -  +  +  :          5 :         STR_PASS("\\u0000", "\0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     347   [ +  -  +  +  :          5 :         STR_PASS("\\u0001", "\1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     348   [ +  -  +  +  :          5 :         STR_PASS("\\u0041", "A");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     349   [ +  -  +  +  :          5 :         STR_PASS("\\uAAAA", "\xEA\xAA\xAA");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     350   [ +  -  +  +  :          5 :         STR_PASS("\\uaaaa", "\xEA\xAA\xAA");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     351   [ +  -  +  +  :          5 :         STR_PASS("\\uAaAa", "\xEA\xAA\xAA");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     352                 :            : 
     353   [ +  -  +  -  :          5 :         STR_FAIL("\\u", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     354   [ +  -  +  -  :          5 :         STR_FAIL("\\u0", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     355   [ +  -  +  -  :          5 :         STR_FAIL("\\u00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     356   [ +  -  +  -  :          5 :         STR_FAIL("\\u000", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     357   [ +  -  +  -  :          5 :         STR_FAIL("\\u000g", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     358   [ +  -  +  -  :          5 :         STR_FAIL("\\U", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     359   [ +  -  +  -  :          5 :         STR_FAIL("\\U0000", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     360                 :            : 
     361   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\u", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     362   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\u0", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     363   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\u00", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     364   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\u000", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     365                 :            : 
     366                 :            :         /* Surrogate pair */
     367   [ +  -  +  +  :          5 :         STR_PASS("\\uD834\\uDD1E", "\xF0\x9D\x84\x9E");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     368                 :            : 
     369                 :            :         /* Low surrogate without high */
     370   [ +  -  +  -  :          5 :         STR_FAIL("\\uDC00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     371   [ +  -  +  -  :          5 :         STR_FAIL("\\uDC00\\uDC00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     372   [ +  -  +  -  :          5 :         STR_FAIL("\\uDC00abcdef", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     373   [ +  -  +  -  :          5 :         STR_FAIL("\\uDEAD", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     374   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\uD834", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     375   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\uD834\\", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     376   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\uD834\\u", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     377   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\uD834\\uD", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     378   [ +  -  +  -  :          5 :         PARSE_FAIL("\"\\uD834\\uDD1", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     379                 :            : 
     380                 :            :         /* High surrogate without low */
     381   [ +  -  +  -  :          5 :         STR_FAIL("\\uD800", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     382   [ +  -  +  -  :          5 :         STR_FAIL("\\uD800abcdef", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     383                 :            : 
     384                 :            :         /* High surrogate followed by high surrogate */
     385   [ +  -  +  -  :          5 :         STR_FAIL("\\uD800\\uD800", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     386                 :          5 : }
     387                 :            : 
     388                 :            : static void
     389                 :          5 : test_parse_number(void)
     390                 :            : {
     391   [ +  -  +  +  :          5 :         NUM_PASS("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     392   [ +  -  +  +  :          5 :         NUM_PASS("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     393   [ +  -  +  +  :          5 :         NUM_PASS("100");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     394   [ +  -  +  +  :          5 :         NUM_PASS("-1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     395   [ +  -  +  +  :          5 :         NUM_PASS("-0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     396   [ +  -  +  +  :          5 :         NUM_PASS("3.0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     397   [ +  -  +  +  :          5 :         NUM_PASS("3.00");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     398   [ +  -  +  +  :          5 :         NUM_PASS("3.001");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     399   [ +  -  +  +  :          5 :         NUM_PASS("3.14159");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     400   [ +  -  +  +  :          5 :         NUM_PASS("3.141592653589793238462643383279");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     401   [ +  -  +  +  :          5 :         NUM_PASS("1e400");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     402   [ +  -  +  +  :          5 :         NUM_PASS("1E400");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     403   [ +  -  +  +  :          5 :         NUM_PASS("0e10");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     404   [ +  -  +  +  :          5 :         NUM_PASS("0e0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     405   [ +  -  +  +  :          5 :         NUM_PASS("-0e0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     406   [ +  -  +  +  :          5 :         NUM_PASS("-0e+0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     407   [ +  -  +  +  :          5 :         NUM_PASS("-0e-0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     408   [ +  -  +  +  :          5 :         NUM_PASS("1e+400");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     409   [ +  -  +  +  :          5 :         NUM_PASS("1e-400");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     410   [ +  -  +  +  :          5 :         NUM_PASS("6.022e23");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     411   [ +  -  +  +  :          5 :         NUM_PASS("-1.234e+56");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     412   [ +  -  +  +  :          5 :         NUM_PASS("1.23e+56");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     413   [ +  -  +  +  :          5 :         NUM_PASS("-1.23e-56");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     414   [ +  -  +  +  :          5 :         NUM_PASS("1.23e-56");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     415   [ +  -  +  +  :          5 :         NUM_PASS("1e04");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  -  +  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
                   +  - ]
     416                 :            : 
     417                 :            :         /* Trailing garbage */
     418   [ +  -  +  -  :          5 :         PARSE_PASS("0A", 1, "A");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     419   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     420                 :            : 
     421   [ +  -  +  -  :          5 :         PARSE_PASS("0,", 1, ",");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     422   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     423                 :            : 
     424   [ +  +  +  -  :          5 :         PARSE_PASS("0true", 1, "true");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     425   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     426                 :            : 
     427   [ +  -  +  -  :          5 :         PARSE_PASS("00", 1, "0");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     428   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     429   [ +  -  +  -  :          5 :         PARSE_FAIL("[00", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     430                 :            : 
     431   [ +  +  +  -  :          5 :         PARSE_PASS("007", 1, "07");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     432   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     433   [ +  -  +  -  :          5 :         PARSE_FAIL("[007]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     434                 :            : 
     435   [ +  +  +  -  :          5 :         PARSE_PASS("345.678.1", 1, ".1");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     436   [ +  -  +  +  :          5 :         VAL_NUMBER("345.678");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     437   [ +  -  +  -  :          5 :         PARSE_FAIL("[345.678.1]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     438                 :            : 
     439   [ +  +  +  -  :          5 :         PARSE_PASS("3.2e-4+5", 1, "+5");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     440   [ +  -  +  +  :          5 :         VAL_NUMBER("3.2e-4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     441   [ +  -  +  -  :          5 :         PARSE_FAIL("[3.2e-4+5]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     442                 :            : 
     443   [ +  +  +  -  :          5 :         PARSE_PASS("3.4.5", 1, ".5");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     444   [ +  -  +  +  :          5 :         VAL_NUMBER("3.4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     445   [ +  -  +  -  :          5 :         PARSE_FAIL("[3.4.5]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     446                 :            : 
     447   [ +  -  +  -  :          5 :         NUM_FAIL("345.", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     448   [ +  -  +  -  :          5 :         NUM_FAIL("+1", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     449   [ +  -  +  -  :          5 :         NUM_FAIL("--1", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     450   [ +  -  +  -  :          5 :         NUM_FAIL("3.", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     451   [ +  -  +  -  :          5 :         NUM_FAIL("3.+4", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     452   [ +  -  +  -  :          5 :         NUM_FAIL("3.2e+-4", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     453   [ +  -  +  -  :          5 :         NUM_FAIL("3.2e-+4", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     454   [ +  -  +  -  :          5 :         NUM_FAIL("3e+", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     455   [ +  -  +  -  :          5 :         NUM_FAIL("3e-", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     456   [ +  -  +  -  :          5 :         NUM_FAIL("3.e4", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     457   [ +  -  +  -  :          5 :         NUM_FAIL("3.2eX", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     458   [ +  -  +  -  :          5 :         NUM_FAIL("-", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     459   [ +  -  +  -  :          5 :         NUM_FAIL("NaN", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     460   [ +  -  +  -  :          5 :         NUM_FAIL(".123", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     461                 :          5 : }
     462                 :            : 
     463                 :            : static void
     464                 :          5 : test_parse_array(void)
     465                 :            : {
     466                 :          5 :         char buffer[SPDK_JSON_MAX_NESTING_DEPTH + 2] = {0};
     467                 :            : 
     468   [ +  -  +  -  :          5 :         PARSE_PASS("[]", 2, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     469   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(0);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     470   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     471                 :            : 
     472   [ +  -  +  -  :          5 :         PARSE_PASS("[true]", 3, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     473   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     474   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     475   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     476                 :            : 
     477   [ +  -  +  -  :          5 :         PARSE_PASS("[true, false]", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     478   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     479   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     480   [ +  -  +  +  :          5 :         VAL_FALSE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     481   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     482                 :            : 
     483   [ +  -  +  -  :          5 :         PARSE_PASS("[\"hello\"]", 3, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     484   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     485   [ +  -  +  +  :          5 :         VAL_STRING("hello");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     486   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     487                 :            : 
     488   [ +  -  +  -  :          5 :         PARSE_PASS("[[]]", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     489   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     490   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(0);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     491   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     492   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     493                 :            : 
     494   [ +  -  +  -  :          5 :         PARSE_PASS("[\"hello\", \"world\"]", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     495   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     496   [ +  -  +  +  :          5 :         VAL_STRING("hello");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     497   [ +  -  +  +  :          5 :         VAL_STRING("world");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     498   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     499                 :            : 
     500   [ +  -  +  -  :          5 :         PARSE_PASS("[],", 2, ",");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     501   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(0);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     502   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     503                 :            : 
     504   [ +  -  +  -  :          5 :         PARSE_FAIL("]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     505   [ +  -  +  -  :          5 :         PARSE_FAIL("[", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     506   [ +  -  +  -  :          5 :         PARSE_FAIL("[true", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     507   [ +  -  +  -  :          5 :         PARSE_FAIL("[\"hello", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     508   [ +  -  +  -  :          5 :         PARSE_FAIL("[\"hello\"", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     509   [ +  -  +  -  :          5 :         PARSE_FAIL("[true,]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     510   [ +  -  +  -  :          5 :         PARSE_FAIL("[,]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     511   [ +  -  +  -  :          5 :         PARSE_FAIL("[,true]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     512   [ +  -  +  -  :          5 :         PARSE_FAIL("[true}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     513   [ +  -  +  -  :          5 :         PARSE_FAIL("[true,,true]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     514                 :            : 
     515                 :            :         /* Nested arrays exactly up to the allowed nesting depth */
     516         [ +  - ]:          5 :         memset(buffer, '[', SPDK_JSON_MAX_NESTING_DEPTH);
     517   [ +  -  +  -  :          5 :         buffer[SPDK_JSON_MAX_NESTING_DEPTH] = ' ';
                   +  - ]
     518   [ +  -  +  -  :          5 :         PARSE_FAIL(buffer, SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     519                 :            : 
     520                 :            :         /* Nested arrays exceeding the maximum allowed nesting depth for this implementation */
     521   [ +  -  +  -  :          5 :         buffer[SPDK_JSON_MAX_NESTING_DEPTH] = '[';
                   +  - ]
     522   [ +  -  +  -  :          5 :         PARSE_FAIL(buffer, SPDK_JSON_PARSE_MAX_DEPTH_EXCEEDED);
                   +  - ]
     523                 :          5 : }
     524                 :            : 
     525                 :            : static void
     526                 :          5 : test_parse_object(void)
     527                 :            : {
     528   [ +  -  +  -  :          5 :         PARSE_PASS("{}", 2, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     529   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(0);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     530   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     531                 :            : 
     532   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": true}", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     533   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     534   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     535   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     536   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     537                 :            : 
     538   [ +  -  +  -  :          5 :         PARSE_PASS("{\"abc\": \"def\"}", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     539   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     540   [ +  -  +  +  :          5 :         VAL_NAME("abc");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     541   [ +  -  +  +  :          5 :         VAL_STRING("def");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     542   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     543                 :            : 
     544   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": true, \"b\": false}", 6, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     545   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(4);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     546   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     547   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     548   [ +  -  +  +  :          5 :         VAL_NAME("b");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     549   [ +  -  +  +  :          5 :         VAL_FALSE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     550   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     551                 :            : 
     552   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": { \"b\": true } }", 7, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     553   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(5);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     554   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     555   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     556   [ +  -  +  +  :          5 :         VAL_NAME("b");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     557   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     558   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     559   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     560                 :            : 
     561   [ +  -  +  -  :          5 :         PARSE_PASS("{\"{test\": 0}", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     562   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     563   [ +  -  +  +  :          5 :         VAL_NAME("{test");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     564   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     565   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     566                 :            : 
     567   [ +  -  +  -  :          5 :         PARSE_PASS("{\"test}\": 1}", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     568   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     569   [ +  -  +  +  :          5 :         VAL_NAME("test}");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     570   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     571   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     572                 :            : 
     573   [ +  -  +  -  :          5 :         PARSE_PASS("{\"\\\"\": 2}", 4, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     574   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     575   [ +  -  +  +  :          5 :         VAL_NAME("\"");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     576   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     577   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     578                 :            : 
     579   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\":true},", 4, ",");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     580   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     581   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     582   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     583   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     584                 :            : 
     585                 :            :         /* Object end without object begin (trailing garbage) */
     586   [ +  -  +  -  :          5 :         PARSE_PASS("true}", 1, "}");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     587   [ +  -  +  +  :          5 :         VAL_TRUE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     588                 :            : 
     589   [ +  -  +  -  :          5 :         PARSE_PASS("0}", 1, "}");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     590   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     591                 :            : 
     592   [ +  -  +  -  :          5 :         PARSE_PASS("\"a\"}", 1, "}");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     593   [ +  -  +  +  :          5 :         VAL_STRING("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     594                 :            : 
     595   [ +  -  +  -  :          5 :         PARSE_FAIL("}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     596   [ +  -  +  -  :          5 :         PARSE_FAIL("{", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     597   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     598   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\"", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     599   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     600   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     601   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     602   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     603   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     604   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,\"}", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     605   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,\"b}", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     606   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,\"b\"}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     607   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,\"b\":}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     608   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\":true,\"b\",}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     609   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\",}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     610   [ +  -  +  -  :          5 :         PARSE_FAIL("{,\"a\": true}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     611   [ +  -  +  -  :          5 :         PARSE_FAIL("{a:true}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     612   [ +  -  +  -  :          5 :         PARSE_FAIL("{'a':true}", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     613                 :          5 : }
     614                 :            : 
     615                 :            : static void
     616                 :          5 : test_parse_nesting(void)
     617                 :            : {
     618   [ +  -  +  -  :          5 :         PARSE_PASS("[[[[[[[[]]]]]]]]", 16, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     619                 :            : 
     620   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": [0, 1, 2]}", 8, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     621   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(6);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     622   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     623   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     624   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     625   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     626   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     627   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     628   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     629                 :            : 
     630   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": [0, 1, 2], \"b\": 3 }", 10, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     631   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(8);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     632   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     633   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     634   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     635   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     636   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     637   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     638   [ +  -  +  +  :          5 :         VAL_NAME("b");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     639   [ +  -  +  +  :          5 :         VAL_NUMBER("3");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     640   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     641                 :            : 
     642   [ +  -  +  -  :          5 :         PARSE_PASS("[0, 1, {\"a\": 3}, 4, 5]", 10, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     643   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(8);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     644   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     645   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     646   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     647   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     648   [ +  -  +  +  :          5 :         VAL_NUMBER("3");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     649   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     650   [ +  -  +  +  :          5 :         VAL_NUMBER("4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     651   [ +  -  +  +  :          5 :         VAL_NUMBER("5");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     652   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     653                 :            : 
     654   [ +  -  +  -  :          5 :         PARSE_PASS("\t[  { \"a\": {\"b\": [ {\"c\": 1}, 2 ],\n\"d\": 3}, \"e\" : 4}, 5 ] ", 20, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     655   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(18);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     656   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(15);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     657   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     658   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(10);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     659   [ +  -  +  +  :          5 :         VAL_NAME("b");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     660   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(5);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     661   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(2);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     662   [ +  -  +  +  :          5 :         VAL_NAME("c");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     663   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     664   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     665   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     666   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     667   [ +  -  +  +  :          5 :         VAL_NAME("d");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     668   [ +  -  +  +  :          5 :         VAL_NUMBER("3");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     669   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     670   [ +  -  +  +  :          5 :         VAL_NAME("e");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     671   [ +  -  +  +  :          5 :         VAL_NUMBER("4");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     672   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     673   [ +  -  +  +  :          5 :         VAL_NUMBER("5");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     674   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     675                 :            : 
     676                 :            :         /* Examples from RFC 7159 */
     677   [ +  -  +  -  :          5 :         PARSE_PASS(
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     678                 :            :                 "{\n"
     679                 :            :                 "  \"Image\": {\n"
     680                 :            :                 "    \"Width\":  800,\n"
     681                 :            :                 "    \"Height\": 600,\n"
     682                 :            :                 "    \"Title\":  \"View from 15th Floor\",\n"
     683                 :            :                 "    \"Thumbnail\": {\n"
     684                 :            :                 "        \"Url\":    \"http://www.example.com/image/481989943\",\n"
     685                 :            :                 "        \"Height\": 125,\n"
     686                 :            :                 "        \"Width\":  100\n"
     687                 :            :                 "    },\n"
     688                 :            :                 "    \"Animated\" : false,\n"
     689                 :            :                 "    \"IDs\": [116, 943, 234, 38793]\n"
     690                 :            :                 "  }\n"
     691                 :            :                 "}\n",
     692                 :            :                 29, "");
     693                 :            : 
     694   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(27);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     695   [ +  -  +  +  :          5 :         VAL_NAME("Image");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     696   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(24);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     697   [ +  -  +  +  :          5 :         VAL_NAME("Width");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     698   [ +  -  +  +  :          5 :         VAL_NUMBER("800");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     699   [ +  -  +  +  :          5 :         VAL_NAME("Height");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     700   [ +  -  +  +  :          5 :         VAL_NUMBER("600");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     701   [ +  -  +  +  :          5 :         VAL_NAME("Title");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     702   [ +  -  +  +  :          5 :         VAL_STRING("View from 15th Floor");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     703   [ +  -  +  +  :          5 :         VAL_NAME("Thumbnail");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     704   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(6);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     705   [ +  -  +  +  :          5 :         VAL_NAME("Url");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     706   [ +  -  +  +  :          5 :         VAL_STRING("http://www.example.com/image/481989943");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     707   [ +  -  +  +  :          5 :         VAL_NAME("Height");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     708   [ +  -  +  +  :          5 :         VAL_NUMBER("125");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     709   [ +  -  +  +  :          5 :         VAL_NAME("Width");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     710   [ +  -  +  +  :          5 :         VAL_NUMBER("100");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     711   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     712   [ +  -  +  +  :          5 :         VAL_NAME("Animated");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     713   [ +  -  +  +  :          5 :         VAL_FALSE();
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     714   [ +  -  +  +  :          5 :         VAL_NAME("IDs");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     715   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(4);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     716   [ +  -  +  +  :          5 :         VAL_NUMBER("116");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     717   [ +  -  +  +  :          5 :         VAL_NUMBER("943");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     718   [ +  -  +  +  :          5 :         VAL_NUMBER("234");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     719   [ +  -  +  +  :          5 :         VAL_NUMBER("38793");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     720   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     721   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     722   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     723                 :            : 
     724   [ +  -  +  -  :          5 :         PARSE_PASS(
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     725                 :            :                 "[\n"
     726                 :            :                 "  {\n"
     727                 :            :                 "    \"precision\": \"zip\",\n"
     728                 :            :                 "    \"Latitude\":  37.7668,\n"
     729                 :            :                 "    \"Longitude\": -122.3959,\n"
     730                 :            :                 "    \"Address\":   \"\",\n"
     731                 :            :                 "    \"City\":      \"SAN FRANCISCO\",\n"
     732                 :            :                 "    \"State\":     \"CA\",\n"
     733                 :            :                 "    \"Zip\":       \"94107\",\n"
     734                 :            :                 "    \"Country\":   \"US\"\n"
     735                 :            :                 "  },\n"
     736                 :            :                 "  {\n"
     737                 :            :                 "    \"precision\": \"zip\",\n"
     738                 :            :                 "    \"Latitude\":  37.371991,\n"
     739                 :            :                 "    \"Longitude\": -122.026020,\n"
     740                 :            :                 "    \"Address\":   \"\",\n"
     741                 :            :                 "    \"City\":      \"SUNNYVALE\",\n"
     742                 :            :                 "    \"State\":     \"CA\",\n"
     743                 :            :                 "    \"Zip\":       \"94085\",\n"
     744                 :            :                 "    \"Country\":   \"US\"\n"
     745                 :            :                 "  }\n"
     746                 :            :                 "]",
     747                 :            :                 38, "");
     748                 :            : 
     749   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(36);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     750   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(16);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     751   [ +  -  +  +  :          5 :         VAL_NAME("precision");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     752   [ +  -  +  +  :          5 :         VAL_STRING("zip");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     753   [ +  -  +  +  :          5 :         VAL_NAME("Latitude");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     754   [ +  -  +  +  :          5 :         VAL_NUMBER("37.7668");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     755   [ +  -  +  +  :          5 :         VAL_NAME("Longitude");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     756   [ +  -  +  +  :          5 :         VAL_NUMBER("-122.3959");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     757   [ +  -  +  +  :          5 :         VAL_NAME("Address");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     758   [ +  -  +  -  :          5 :         VAL_STRING("");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  +  
                      - ]
     759   [ +  -  +  +  :          5 :         VAL_NAME("City");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     760   [ +  -  +  +  :          5 :         VAL_STRING("SAN FRANCISCO");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     761   [ +  -  +  +  :          5 :         VAL_NAME("State");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     762   [ +  -  +  +  :          5 :         VAL_STRING("CA");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     763   [ +  -  +  +  :          5 :         VAL_NAME("Zip");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     764   [ +  -  +  +  :          5 :         VAL_STRING("94107");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     765   [ +  -  +  +  :          5 :         VAL_NAME("Country");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     766   [ +  -  +  +  :          5 :         VAL_STRING("US");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     767   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     768   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(16);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     769   [ +  -  +  +  :          5 :         VAL_NAME("precision");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     770   [ +  -  +  +  :          5 :         VAL_STRING("zip");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     771   [ +  -  +  +  :          5 :         VAL_NAME("Latitude");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     772   [ +  -  +  +  :          5 :         VAL_NUMBER("37.371991");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     773   [ +  -  +  +  :          5 :         VAL_NAME("Longitude");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     774   [ +  -  +  +  :          5 :         VAL_NUMBER("-122.026020");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     775   [ +  -  +  +  :          5 :         VAL_NAME("Address");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     776   [ +  -  +  -  :          5 :         VAL_STRING("");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  +  
                      - ]
     777   [ +  -  +  +  :          5 :         VAL_NAME("City");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     778   [ +  -  +  +  :          5 :         VAL_STRING("SUNNYVALE");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     779   [ +  -  +  +  :          5 :         VAL_NAME("State");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     780   [ +  -  +  +  :          5 :         VAL_STRING("CA");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     781   [ +  -  +  +  :          5 :         VAL_NAME("Zip");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     782   [ +  -  +  +  :          5 :         VAL_STRING("94085");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     783   [ +  -  +  +  :          5 :         VAL_NAME("Country");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     784   [ +  -  +  +  :          5 :         VAL_STRING("US");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     785   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     786   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     787                 :            : 
     788                 :            :         /* Trailing garbage */
     789   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": [0, 1, 2]}]", 8, "]");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     790   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(6);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     791   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     792   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     793   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     794   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     795   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     796   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     797   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     798                 :            : 
     799   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": [0, 1, 2]}}", 8, "}");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     800   [ +  -  +  -  :          5 :         PARSE_PASS("{\"a\": [0, 1, 2]}]", 8, "]");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     801   [ +  -  +  -  :          5 :         VAL_OBJECT_BEGIN(6);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     802   [ +  -  +  +  :          5 :         VAL_NAME("a");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     803   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(3);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     804   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     805   [ +  -  +  +  :          5 :         VAL_NUMBER("1");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     806   [ +  -  +  +  :          5 :         VAL_NUMBER("2");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     807   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     808   [ +  -  +  -  :          5 :         VAL_OBJECT_END();
          +  -  +  -  +  
                      - ]
     809                 :            : 
     810   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\": [0, 1, 2}]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     811   [ +  -  +  -  :          5 :         PARSE_FAIL("{\"a\": [0, 1, 2]", SPDK_JSON_PARSE_INCOMPLETE);
                   +  - ]
     812                 :          5 : }
     813                 :            : 
     814                 :            : 
     815                 :            : static void
     816                 :          5 : test_parse_comment(void)
     817                 :            : {
     818                 :            :         /* Comments are not allowed by the JSON RFC */
     819   [ +  -  +  -  :          5 :         PARSE_PASS("[0]", 3, "");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     820   [ +  -  +  -  :          5 :         PARSE_FAIL("/* test */[0]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     821   [ +  -  +  -  :          5 :         PARSE_FAIL("[/* test */0]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     822   [ +  -  +  -  :          5 :         PARSE_FAIL("[0/* test */]", SPDK_JSON_PARSE_INVALID);
                   +  - ]
     823                 :            : 
     824                 :            :         /*
     825                 :            :          * This is allowed since the parser stops once it reads a complete JSON object.
     826                 :            :          * The next parse call would fail (see tests above) when parsing the comment.
     827                 :            :          */
     828   [ +  +  +  -  :          5 :         PARSE_PASS("[0]/* test */", 3, "/* test */");
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     829                 :            : 
     830                 :            :         /*
     831                 :            :          * Test with non-standard comments enabled.
     832                 :            :          */
     833   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("/* test */[0]", 3, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     834   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     835   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     836   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     837                 :            : 
     838   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("[/* test */0]", 3, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     839   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     840   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     841   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     842                 :            : 
     843   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("[0/* test */]", 3, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     844   [ +  -  +  -  :          5 :         VAL_ARRAY_BEGIN(1);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     845   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     846   [ +  -  +  -  :          5 :         VAL_ARRAY_END();
          +  -  +  -  +  
                      - ]
     847                 :            : 
     848   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("/* test */", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     849   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("[/* test */", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     850   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("[0/* test */", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     851                 :            : 
     852                 :            :         /*
     853                 :            :          * Single-line comments
     854                 :            :          */
     855   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("// test\n0", 1, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     856   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     857                 :            : 
     858   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("// test\r\n0", 1, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     859   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     860                 :            : 
     861   [ +  -  +  -  :          5 :         PARSE_PASS_FLAGS("// [0] test\n0", 1, "", SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     862   [ +  -  +  +  :          5 :         VAL_NUMBER("0");
          +  -  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
          -  +  +  -  +  
          -  +  -  +  -  
          +  -  +  -  +  
          -  +  -  +  -  
             +  -  +  - ]
     863                 :            : 
     864   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("//", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     865   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("// test", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     866   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("//\n", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     867                 :            : 
     868                 :            :         /* Invalid character following slash */
     869   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("[0/x", SPDK_JSON_PARSE_INVALID, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     870                 :            : 
     871                 :            :         /* Single slash at end of buffer */
     872   [ +  -  +  -  :          5 :         PARSE_FAIL_FLAGS("[0/", SPDK_JSON_PARSE_INCOMPLETE, SPDK_JSON_PARSE_FLAG_ALLOW_COMMENTS);
                   +  - ]
     873                 :          5 : }
     874                 :            : 
     875                 :            : int
     876                 :          5 : main(int argc, char **argv)
     877                 :            : {
     878                 :          5 :         CU_pSuite       suite = NULL;
     879                 :          1 :         unsigned int    num_failures;
     880                 :            : 
     881                 :          5 :         CU_initialize_registry();
     882                 :            : 
     883                 :          5 :         suite = CU_add_suite("json", NULL, NULL);
     884                 :            : 
     885                 :          5 :         CU_ADD_TEST(suite, test_parse_literal);
     886                 :          5 :         CU_ADD_TEST(suite, test_parse_string_simple);
     887                 :          5 :         CU_ADD_TEST(suite, test_parse_string_control_chars);
     888                 :          5 :         CU_ADD_TEST(suite, test_parse_string_utf8);
     889                 :          5 :         CU_ADD_TEST(suite, test_parse_string_escapes_twochar);
     890                 :          5 :         CU_ADD_TEST(suite, test_parse_string_escapes_unicode);
     891                 :          5 :         CU_ADD_TEST(suite, test_parse_number);
     892                 :          5 :         CU_ADD_TEST(suite, test_parse_array);
     893                 :          5 :         CU_ADD_TEST(suite, test_parse_object);
     894                 :          5 :         CU_ADD_TEST(suite, test_parse_nesting);
     895                 :          5 :         CU_ADD_TEST(suite, test_parse_comment);
     896                 :            : 
     897                 :            : 
     898                 :          5 :         num_failures = spdk_ut_run_tests(argc, argv, NULL);
     899                 :            : 
     900                 :          5 :         CU_cleanup_registry();
     901                 :            : 
     902                 :          6 :         return num_failures;
     903                 :          1 : }

Generated by: LCOV version 1.15