/ Hex Artifact Content
Login

Artifact aff6b7a4c17d5a20b487a7bc1a274bfdc63b829413bdfb83bedac42ec7f67e3b:


0000: 23 20 32 30 31 35 2d 31 32 2d 33 30 0a 23 0a 23  # 2015-12-30.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
0180: 66 6f 72 20 4a 53 4f 4e 20 61 67 67 72 65 67 61  for JSON aggrega
0190: 74 65 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  te SQL functions
01a0: 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20  .#..set testdir 
01b0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
01c0: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
01d0: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
01e0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 6a 73 6f  ..ifcapable !jso
01f0: 6e 31 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65  n1 {.  finish_te
0200: 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 64  st.  return.}..d
0210: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a  o_execsql_test j
0220: 73 6f 6e 31 30 33 2d 31 30 30 20 7b 0a 20 20 43  son103-100 {.  C
0230: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0240: 2c 62 2c 63 29 3b 0a 20 20 57 49 54 48 20 52 45  ,b,c);.  WITH RE
0250: 43 55 52 53 49 56 45 20 63 28 78 29 20 41 53 20  CURSIVE c(x) AS 
0260: 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e  (VALUES(1) UNION
0270: 20 53 45 4c 45 43 54 20 78 2b 31 20 46 52 4f 4d   SELECT x+1 FROM
0280: 20 63 20 57 48 45 52 45 20 78 3c 31 30 30 29 0a   c WHERE x<100).
0290: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
02a0: 28 61 2c 62 2c 63 29 20 53 45 4c 45 43 54 20 78  (a,b,c) SELECT x
02b0: 2c 20 78 25 33 2c 20 70 72 69 6e 74 66 28 27 6e  , x%3, printf('n
02c0: 25 64 27 2c 78 29 20 20 46 52 4f 4d 20 63 3b 0a  %d',x)  FROM c;.
02d0: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
02e0: 61 3d 27 6f 72 61 6e 67 65 27 20 57 48 45 52 45  a='orange' WHERE
02f0: 20 72 6f 77 69 64 3d 33 39 3b 0a 20 20 55 50 44   rowid=39;.  UPD
0300: 41 54 45 20 74 31 20 53 45 54 20 61 3d 33 32 2e  ATE t1 SET a=32.
0310: 35 20 57 48 45 52 45 20 72 6f 77 69 64 3d 33 31  5 WHERE rowid=31
0320: 3b 0a 20 20 55 50 44 41 54 45 20 74 31 20 53 45  ;.  UPDATE t1 SE
0330: 54 20 61 3d 78 27 33 30 33 31 33 32 27 20 57 48  T a=x'303132' WH
0340: 45 52 45 20 72 6f 77 69 64 3d 32 39 3b 0a 20 20  ERE rowid=29;.  
0350: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d  UPDATE t1 SET a=
0360: 4e 55 4c 4c 20 57 48 45 52 45 20 72 6f 77 69 64  NULL WHERE rowid
0370: 3d 33 37 3b 0a 20 20 53 45 4c 45 43 54 20 6a 73  =37;.  SELECT js
0380: 6f 6e 5f 67 72 6f 75 70 5f 61 72 72 61 79 28 61  on_group_array(a
0390: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
03a0: 61 3c 30 20 41 4e 44 20 74 79 70 65 6f 66 28 61  a<0 AND typeof(a
03b0: 29 21 3d 27 62 6c 6f 62 27 3b 0a 7d 20 7b 7b 5b  )!='blob';.} {{[
03c0: 5d 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  ]}}.do_catchsql_
03d0: 74 65 73 74 20 6a 73 6f 6e 31 30 33 2d 31 30 31  test json103-101
03e0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e   {.  SELECT json
03f0: 5f 67 72 6f 75 70 5f 61 72 72 61 79 28 61 29 20  _group_array(a) 
0400: 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 31 20 7b 4a  FROM t1;.} {1 {J
0410: 53 4f 4e 20 63 61 6e 6e 6f 74 20 68 6f 6c 64 20  SON cannot hold 
0420: 42 4c 4f 42 20 76 61 6c 75 65 73 7d 7d 0a 64 6f  BLOB values}}.do
0430: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0440: 6f 6e 31 30 33 2d 31 31 30 20 7b 0a 20 20 53 45  on103-110 {.  SE
0450: 4c 45 43 54 20 6a 73 6f 6e 5f 67 72 6f 75 70 5f  LECT json_group_
0460: 61 72 72 61 79 28 61 29 20 46 52 4f 4d 20 74 31  array(a) FROM t1
0470: 0a 20 20 20 57 48 45 52 45 20 72 6f 77 69 64 20  .   WHERE rowid 
0480: 42 45 54 57 45 45 4e 20 33 31 20 41 4e 44 20 33  BETWEEN 31 AND 3
0490: 39 3b 0a 7d 20 7b 7b 5b 33 32 2e 35 2c 33 32 2c  9;.} {{[32.5,32,
04a0: 33 33 2c 33 34 2c 33 35 2c 33 36 2c 6e 75 6c 6c  33,34,35,36,null
04b0: 2c 33 38 2c 22 6f 72 61 6e 67 65 22 5d 7d 7d 0a  ,38,"orange"]}}.
04c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
04d0: 6a 73 6f 6e 31 30 33 2d 31 31 31 20 7b 0a 20 20  json103-111 {.  
04e0: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 61 72 72 61  SELECT json_arra
04f0: 79 5f 6c 65 6e 67 74 68 28 6a 73 6f 6e 5f 67 72  y_length(json_gr
0500: 6f 75 70 5f 61 72 72 61 79 28 61 29 29 20 46 52  oup_array(a)) FR
0510: 4f 4d 20 74 31 0a 20 20 20 57 48 45 52 45 20 72  OM t1.   WHERE r
0520: 6f 77 69 64 20 42 45 54 57 45 45 4e 20 33 31 20  owid BETWEEN 31 
0530: 41 4e 44 20 33 39 3b 0a 7d 20 7b 39 7d 0a 64 6f  AND 39;.} {9}.do
0540: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0550: 6f 6e 31 30 33 2d 31 32 30 20 7b 0a 20 20 53 45  on103-120 {.  SE
0560: 4c 45 43 54 20 62 2c 20 6a 73 6f 6e 5f 67 72 6f  LECT b, json_gro
0570: 75 70 5f 61 72 72 61 79 28 61 29 20 46 52 4f 4d  up_array(a) FROM
0580: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 3c   t1 WHERE rowid<
0590: 31 30 20 47 52 4f 55 50 20 42 59 20 62 20 4f 52  10 GROUP BY b OR
05a0: 44 45 52 20 42 59 20 62 3b 0a 7d 20 7b 30 20 7b  DER BY b;.} {0 {
05b0: 5b 33 2c 36 2c 39 5d 7d 20 31 20 7b 5b 31 2c 34  [3,6,9]} 1 {[1,4
05c0: 2c 37 5d 7d 20 32 20 7b 5b 32 2c 35 2c 38 5d 7d  ,7]} 2 {[2,5,8]}
05d0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
05e0: 73 74 20 6a 73 6f 6e 31 30 33 2d 32 30 30 20 7b  st json103-200 {
05f0: 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 67  .  SELECT json_g
0600: 72 6f 75 70 5f 6f 62 6a 65 63 74 28 63 2c 61 29  roup_object(c,a)
0610: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0620: 3c 30 20 41 4e 44 20 74 79 70 65 6f 66 28 61 29  <0 AND typeof(a)
0630: 21 3d 27 62 6c 6f 62 27 3b 0a 7d 20 7b 7b 7b 7d  !='blob';.} {{{}
0640: 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }}.do_catchsql_t
0650: 65 73 74 20 6a 73 6f 6e 31 30 33 2d 32 30 31 20  est json103-201 
0660: 7b 0a 20 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f  {.  SELECT json_
0670: 67 72 6f 75 70 5f 6f 62 6a 65 63 74 28 63 2c 61  group_object(c,a
0680: 29 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 31 20  ) FROM t1;.} {1 
0690: 7b 4a 53 4f 4e 20 63 61 6e 6e 6f 74 20 68 6f 6c  {JSON cannot hol
06a0: 64 20 42 4c 4f 42 20 76 61 6c 75 65 73 7d 7d 0a  d BLOB values}}.
06b0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
06c0: 20 6a 73 6f 6e 31 30 33 2d 32 31 30 20 7b 0a 20   json103-210 {. 
06d0: 20 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 67 72 6f   SELECT json_gro
06e0: 75 70 5f 6f 62 6a 65 63 74 28 63 2c 61 29 20 46  up_object(c,a) F
06f0: 52 4f 4d 20 74 31 0a 20 20 20 57 48 45 52 45 20  ROM t1.   WHERE 
0700: 72 6f 77 69 64 20 42 45 54 57 45 45 4e 20 33 31  rowid BETWEEN 31
0710: 20 41 4e 44 20 33 39 20 41 4e 44 20 72 6f 77 69   AND 39 AND rowi
0720: 64 25 32 3d 3d 31 3b 0a 7d 20 7b 7b 7b 22 6e 33  d%2==1;.} {{{"n3
0730: 31 22 3a 33 32 2e 35 2c 22 6e 33 33 22 3a 33 33  1":32.5,"n33":33
0740: 2c 22 6e 33 35 22 3a 33 35 2c 22 6e 33 37 22 3a  ,"n35":35,"n37":
0750: 6e 75 6c 6c 2c 22 6e 33 39 22 3a 22 6f 72 61 6e  null,"n39":"oran
0760: 67 65 22 7d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  ge"}}}.do_execsq
0770: 6c 5f 74 65 73 74 20 6a 73 6f 6e 31 30 33 2d 32  l_test json103-2
0780: 32 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 62 2c  20 {.  SELECT b,
0790: 20 6a 73 6f 6e 5f 67 72 6f 75 70 5f 6f 62 6a 65   json_group_obje
07a0: 63 74 28 63 2c 61 29 20 46 52 4f 4d 20 74 31 0a  ct(c,a) FROM t1.
07b0: 20 20 20 57 48 45 52 45 20 72 6f 77 69 64 3c 37     WHERE rowid<7
07c0: 20 47 52 4f 55 50 20 42 59 20 62 20 4f 52 44 45   GROUP BY b ORDE
07d0: 52 20 42 59 20 62 3b 0a 7d 20 7b 30 20 7b 7b 22  R BY b;.} {0 {{"
07e0: 6e 33 22 3a 33 2c 22 6e 36 22 3a 36 7d 7d 20 31  n3":3,"n6":6}} 1
07f0: 20 7b 7b 22 6e 31 22 3a 31 2c 22 6e 34 22 3a 34   {{"n1":1,"n4":4
0800: 7d 7d 20 32 20 7b 7b 22 6e 32 22 3a 32 2c 22 6e  }} 2 {{"n2":2,"n
0810: 35 22 3a 35 7d 7d 7d 0a 0a 23 20 74 69 63 6b 65  5":5}}}..# ticke
0820: 74 20 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73 71  t https://www.sq
0830: 6c 69 74 65 2e 6f 72 67 2f 73 72 63 2f 69 6e 66  lite.org/src/inf
0840: 6f 2f 66 34 35 61 63 35 36 37 65 61 61 39 66 39  o/f45ac567eaa9f9
0850: 33 63 20 32 30 31 36 2d 30 31 2d 33 30 0a 23 20  3c 2016-01-30.# 
0860: 49 6e 76 61 6c 69 64 20 4a 53 4f 4e 20 67 65 6e  Invalid JSON gen
0870: 65 72 61 74 65 64 20 62 79 20 6a 73 6f 6e 5f 67  erated by json_g
0880: 72 6f 75 70 5f 61 72 72 61 79 28 29 20 0a 23 0a  roup_array() .#.
0890: 23 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67  # The underlying
08a0: 20 70 72 6f 62 6c 65 6d 20 69 73 20 61 20 66 61   problem is a fa
08b0: 69 6c 75 72 65 20 74 6f 20 72 65 73 65 74 20 4d  ilure to reset M
08c0: 65 6d 2e 65 53 75 62 74 79 70 65 0a 23 0a 64 6f  em.eSubtype.#.do
08d0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
08e0: 6f 6e 31 30 33 2d 33 30 30 20 7b 0a 20 20 44 52  on103-300 {.  DR
08f0: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
0900: 54 53 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20  TS t1;.  CREATE 
0910: 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20 49  TABLE t1(x);.  I
0920: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0930: 4c 55 45 53 28 31 29 2c 28 27 61 62 63 27 29 3b  LUES(1),('abc');
0940: 0a 20 20 53 45 4c 45 43 54 0a 20 20 20 20 20 6a  .  SELECT.     j
0950: 73 6f 6e 5f 67 72 6f 75 70 5f 61 72 72 61 79 28  son_group_array(
0960: 78 29 2c 0a 20 20 20 20 20 6a 73 6f 6e 5f 67 72  x),.     json_gr
0970: 6f 75 70 5f 61 72 72 61 79 28 6a 73 6f 6e 5f 6f  oup_array(json_o
0980: 62 6a 65 63 74 28 27 78 27 2c 78 29 29 0a 20 20  bject('x',x)).  
0990: 20 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 7b 5b    FROM t1;.} {{[
09a0: 31 2c 22 61 62 63 22 5d 7d 20 7b 5b 7b 22 78 22  1,"abc"]} {[{"x"
09b0: 3a 31 7d 2c 7b 22 78 22 3a 22 61 62 63 22 7d 5d  :1},{"x":"abc"}]
09c0: 7d 7d 0a 0a 23 20 6a 73 6f 6e 5f 67 72 6f 75 70  }}..# json_group
09d0: 5f 61 72 72 61 79 28 29 20 61 6e 64 20 6a 73 6f  _array() and jso
09e0: 6e 5f 67 72 6f 75 70 5f 6f 62 6a 65 63 74 28 29  n_group_object()
09f0: 20 77 6f 72 6b 20 61 73 20 77 69 6e 64 6f 77 20   work as window 
0a00: 66 75 6e 63 74 69 6f 6e 73 2e 0a 23 0a 69 66 63  functions..#.ifc
0a10: 61 70 61 62 6c 65 20 77 69 6e 64 6f 77 66 75 6e  apable windowfun
0a20: 63 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  c {.  do_execsql
0a30: 5f 74 65 73 74 20 6a 73 6f 6e 31 30 33 2d 34 30  _test json103-40
0a40: 30 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  0 {.    CREATE T
0a50: 41 42 4c 45 20 74 34 28 78 29 3b 0a 20 20 20 20  ABLE t4(x);.    
0a60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
0a70: 41 4c 55 45 53 0a 20 20 20 20 20 20 28 31 29 2c  ALUES.      (1),
0a80: 0a 20 20 20 20 20 20 28 27 61 2c 62 27 29 2c 0a  .      ('a,b'),.
0a90: 20 20 20 20 20 20 28 33 29 2c 0a 20 20 20 20 20        (3),.     
0aa0: 20 28 27 78 22 79 27 29 2c 0a 20 20 20 20 20 20   ('x"y'),.      
0ab0: 28 35 29 2c 0a 20 20 20 20 20 20 28 36 29 2c 0a  (5),.      (6),.
0ac0: 20 20 20 20 20 20 28 37 29 3b 0a 20 20 20 20 53        (7);.    S
0ad0: 45 4c 45 43 54 20 6a 73 6f 6e 5f 67 72 6f 75 70  ELECT json_group
0ae0: 5f 61 72 72 61 79 28 78 29 20 4f 56 45 52 20 28  _array(x) OVER (
0af0: 52 4f 57 53 20 32 20 50 52 45 43 45 44 49 4e 47  ROWS 2 PRECEDING
0b00: 29 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 20 7b  ) FROM t4;.  } {
0b10: 7b 5b 31 5d 7d 20 7b 5b 31 2c 22 61 2c 62 22 5d  {[1]} {[1,"a,b"]
0b20: 7d 20 7b 5b 31 2c 22 61 2c 62 22 2c 33 5d 7d 20  } {[1,"a,b",3]} 
0b30: 7b 5b 22 61 2c 62 22 2c 33 2c 22 78 5c 22 79 22  {["a,b",3,"x\"y"
0b40: 5d 7d 20 7b 5b 33 2c 22 78 5c 22 79 22 2c 35 5d  ]} {[3,"x\"y",5]
0b50: 7d 20 7b 5b 22 78 5c 22 79 22 2c 35 2c 36 5d 7d  } {["x\"y",5,6]}
0b60: 20 7b 5b 35 2c 36 2c 37 5d 7d 7d 0a 20 20 64 6f   {[5,6,7]}}.  do
0b70: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6a 73  _execsql_test js
0b80: 6f 6e 31 30 33 2d 34 31 30 20 7b 0a 20 20 20 20  on103-410 {.    
0b90: 53 45 4c 45 43 54 20 6a 73 6f 6e 5f 67 72 6f 75  SELECT json_grou
0ba0: 70 5f 6f 62 6a 65 63 74 28 72 6f 77 69 64 2c 20  p_object(rowid, 
0bb0: 78 29 20 4f 56 45 52 20 28 52 4f 57 53 20 32 20  x) OVER (ROWS 2 
0bc0: 50 52 45 43 45 44 49 4e 47 29 20 46 52 4f 4d 20  PRECEDING) FROM 
0bd0: 74 34 3b 0a 20 20 7d 20 7b 7b 7b 22 31 22 3a 31  t4;.  } {{{"1":1
0be0: 7d 7d 20 7b 7b 22 31 22 3a 31 2c 22 32 22 3a 22  }} {{"1":1,"2":"
0bf0: 61 2c 62 22 7d 7d 20 7b 7b 22 31 22 3a 31 2c 22  a,b"}} {{"1":1,"
0c00: 32 22 3a 22 61 2c 62 22 2c 22 33 22 3a 33 7d 7d  2":"a,b","3":3}}
0c10: 20 7b 7b 22 32 22 3a 22 61 2c 62 22 2c 22 33 22   {{"2":"a,b","3"
0c20: 3a 33 2c 22 34 22 3a 22 78 5c 22 79 22 7d 7d 20  :3,"4":"x\"y"}} 
0c30: 7b 7b 22 33 22 3a 33 2c 22 34 22 3a 22 78 5c 22  {{"3":3,"4":"x\"
0c40: 79 22 2c 22 35 22 3a 35 7d 7d 20 7b 7b 22 34 22  y","5":5}} {{"4"
0c50: 3a 22 78 5c 22 79 22 2c 22 35 22 3a 35 2c 22 36  :"x\"y","5":5,"6
0c60: 22 3a 36 7d 7d 20 7b 7b 22 35 22 3a 35 2c 22 36  ":6}} {{"5":5,"6
0c70: 22 3a 36 2c 22 37 22 3a 37 7d 7d 7d 0a 7d 0a 0a  ":6,"7":7}}}.}..
0c80: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.