1 
   2 tst |empty array|
   3 in  |[]|
   4 sel |0|
   5 out |<NULL>|
   6 
   7 tst |one-element array: integer|
   8 in  |[1]|
   9 sel |0|
  10 out |1|
  11 sel |1|
  12 out |<NULL>|
  13 sel |100|
  14 out |<NULL>|
  15 sel |-1|
  16 out |<NULL>|
  17 
  18 tst |one-element array: hex integer (not in spec, not supported)|
  19 in  |[0x1000]|
  20 sel |0|
  21 out |<NULL>|
  22 
  23 tst |one-element array: float|
  24 in  |[1.5001]|
  25 sel |0|
  26 out |1.5001|
  27 
  28 tst |one-element array: float + exponent|
  29 in  |[16.3e10]|
  30 sel |0|
  31 out |16.3e10|
  32 
  33 tst |one-element array: integer + whitespace|
  34 in  |[     5    ]|
  35 sel |0|
  36 out |5|
  37 
  38 tst |one-element array: integer + exponent + whitespace|
  39 in  |[           16E10           ]|
  40 sel |0|
  41 out |16E10|
  42 
  43 tst |one-element array: string|
  44 in  |["alpha"]|
  45 sel |0|
  46 out |alpha|
  47 
  48 tst |alternative first-element indexing|
  49 in  |[1,5,10,15,20]|
  50 sel |[0]|
  51 out |1|
  52 sel |[3]|
  53 out |15|
  54 sel |[4]|
  55 out |20|
  56 sel |[5]|
  57 out |<NULL>|
  58 
  59 tst |one-element array: object|
  60 in  |[ { "first": true, "second": false }]|
  61 sel |0.first|
  62 out |true|
  63 sel |0.second|
  64 out |false|
  65 sel |0.third|
  66 out |<NULL>|
  67 
  68 tst |many-element array: integers|
  69 in  |[0,1,1,2,3,5,8,13,21,34,55,89,144,233,377]|
  70 sel |10|
  71 out |55|
  72 sel |14|
  73 out |377|
  74 sel |19|
  75 out |<NULL>|
  76 
  77 tst |many-element array: multiple types|
  78 in  |["string",32,true,{"a":9,"b":false},100.3e10,false,200.5,{"key":"val"},null]|
  79 sel |0|
  80 out |string|
  81 sel |0.notobject|
  82 out |<NULL>|
  83 sel |1|
  84 out |32|
  85 sel |2|
  86 out |true|
  87 sel |3|
  88 out |{"a":9,"b":false}|
  89 sel |3.a|
  90 out |9|
  91 sel |3.b|
  92 out |false|
  93 sel |3.c|
  94 out |<NULL>|
  95 sel |4|
  96 out |100.3e10|
  97 sel |5|
  98 out |false|
  99 sel |6|
 100 out |200.5|
 101 sel |7|
 102 out |{"key":"val"}|
 103 sel |7.key|
 104 out |val|
 105 sel |7.key.notobject|
 106 out |<NULL>|
 107 sel |7.nonexist|
 108 out |<NULL>|
 109 sel |8|
 110 out |null|
 111 sel |9|
 112 out |<NULL>|
 113 
 114 tst |many-element array: multiple types + whitespace|
 115 in  |
 116 [       "string" ,      32 , true       ,        {"a":  9,      "b": false},            100.3e10, false, 200.5,{"key"   :
 117  "val"},                 null ]         |
 118 sel |0|
 119 out |string|
 120 sel |0.notobject|
 121 out |<NULL>|
 122 sel |1|
 123 out |32|
 124 sel |2|
 125 out |true|
 126 sel |3|
 127 out |{"a":  9,  "b": false}|
 128 sel |3.a|
 129 out |9|
 130 sel |3.b|
 131 out |false|
 132 sel |3.c|
 133 out |<NULL>|
 134 sel |4|
 135 out |100.3e10|
 136 sel |5|
 137 out |false|
 138 sel |6|
 139 out |200.5|
 140 sel |7|
 141 out |{"key"     :
 142  "val"}|
 143 sel |7.key|
 144 out |val|
 145 sel |7.key.notobject|
 146 out |<NULL>|
 147 sel |7.nonexist|
 148 out |<NULL>|
 149 sel |8|
 150 out |null|
 151 sel |9|
 152 out |<NULL>|
 153 
 154 tst |two-element array: various string escape codes|
 155 in  |["abcd \" \\ \/ \b \f \n \r \t \u0000 \uf00F ", "final"]|
 156 sel |0|
 157 out |abcd \" \\ \/ \b \f \n \r \t \u0000 \uf00F |
 158 sel |1|
 159 out |final|
 160 
 161 tst |three-element array: broken escape code|
 162 in  |["fine here", "dodgey \u00AZ", "wont get here"]|
 163 sel |0|
 164 out |fine here|
 165 sel |1|
 166 out |<NULL>|
 167 sel |2|
 168 out |<NULL>|
 169 
 170 tst |nested objects|
 171 in  |{ "top": { "mid"  : { "legs": "feet" }, "number": 9, "array":[0,1,{"a":true,"bb":[1,2,false,{"x":"yz"}]}]}}|
 172 sel |top|
 173 out |{ "mid"  : { "legs": "feet" }, "number": 9, "array":[0,1,{"a":true,"bb":[1,2,false,{"x":"yz"}]}]}|
 174 sel |fargo|
 175 out |<NULL>|
 176 sel |top.mid|
 177 out |{ "legs": "feet" }|
 178 sel |top.centre|
 179 out |<NULL>|
 180 sel |top.mid.legs|
 181 out |feet|
 182 sel |top.mid.number|
 183 out |<NULL>|
 184 sel |top.mid.array|
 185 out |<NULL>|
 186 sel |top.number|
 187 out |9|
 188 sel |top.array|
 189 out |[0,1,{"a":true,"bb":[1,2,false,{"x":"yz"}]}]|
 190 sel |top.array[0]|
 191 out |0|
 192 sel |top.array[1]|
 193 out |1|
 194 sel |top.array[2]|
 195 out |{"a":true,"bb":[1,2,false,{"x":"yz"}]}|
 196 sel |top.array[2].a|
 197 out |true|
 198 sel |top.array[2].b|
 199 out |<NULL>|
 200 sel |top.array[2].bb|
 201 out |[1,2,false,{"x":"yz"}]|
 202 sel |top.array[2].bb[0]|
 203 out |1|
 204 sel |top.array[2].bb[1]|
 205 out |2|
 206 sel |top.array[2].bb[2]|
 207 out |false|
 208 sel |top.array[2].bb[3]|
 209 out |{"x":"yz"}|
 210 sel |top.array[2].bb[3].x|
 211 out |yz|
 212 sel |top.array[2].bb[3].x.nofurther|
 213 out |<NULL>|
 214 sel |top.array[2].bb[4]|
 215 out |<NULL>|
 216 sel |top.array[3]|
 217 out |<NULL>|
 218