Annotation inappropriate for ExpectedPlaceholderMapping

This commit is contained in:
Tony Garnock-Jones 2019-08-23 09:58:30 +01:00
parent a7147fa123
commit 6f4e06f6b9
2 changed files with 273 additions and 273 deletions

View File

@ -992,20 +992,18 @@
(define-runtime-path tests-path "../../../tests") (define-runtime-path tests-path "../../../tests")
(let* ((path (build-path tests-path "samples.txt")) (let* ((path (build-path tests-path "samples.txt"))
(tests (call-with-input-file path (testfile (call-with-input-file path
(lambda (p) (lambda (p)
(port-count-lines! p) (port-count-lines! p)
(read-preserve-syntax p #:source path))))) (read-preserve-syntax p #:source path)))))
(local-require racket/pretty) (match-define (peel-annotations
(define placeholder->value-map `#s(TestCases
(or (for/or [(a* (annotated-annotations tests))] ,(strip-annotations
(match (strip-annotations a*) `#s(ExpectedPlaceholderMapping ,placeholder->value-map))
[`#s(ExpectedPlaceholderMapping ,p->v) p->v] ,tests))
[_ #f])) testfile)
(hash))) (define value->placeholder-map (for/hash [((k v) (in-hash placeholder->value-map))]
(define value->placeholder-map (values v k)))
(for/hash [((k v) (in-hash placeholder->value-map))]
(values v k)))
(parameterize (parameterize
((current-value->placeholder (lambda (v) (hash-ref value->placeholder-map v #f))) ((current-value->placeholder (lambda (v) (hash-ref value->placeholder-map v #f)))
(current-placeholder->value (lambda (p) (hash-ref placeholder->value-map p void)))) (current-placeholder->value (lambda (p) (hash-ref placeholder->value-map p void))))

View File

@ -1,265 +1,267 @@
@<EmacsMode "-*- preserves -*-"> @<EmacsMode "-*- preserves -*-">
@<ExpectedPlaceholderMapping { <TestCases
0: discard <ExpectedPlaceholderMapping {
1: capture 0: discard
2: observe 1: capture
}> 2: observe
{ }>
annotation1: <Test #hex{055361626339} @"abc" 9> {
annotation2: <Test #hex{05536162630553646566929005517890} @"abc" @"def" [[] @"x" []]> annotation1: <Test #hex{055361626339} @"abc" 9>
annotation3: <Test #hex{050531320505333435} @@1 2 @@3 4 5> annotation2: <Test #hex{05536162630553646566929005517890} @"abc" @"def" [[] @"x" []]>
annotation4: <NondeterministicTest #hex{b4 05 72616b 7161 05 726176 31 05 72626b 7162 05 726276 32} annotation3: <Test #hex{050531320505333435} @@1 2 @@3 4 5>
{@ak a: @av 1 @bk b: @bv 2}> annotation4: <NondeterministicTest #hex{b4 05 72616b 7161 05 726176 31 05 72626b 7162 05 726276 32}
annotation5: <Test #hex{05726172827152057261667166} @ar <R @af f>> {@ak a: @av 1 @bk b: @bv 2}>
annotation6: <Test #hex{82057261727152057261667166} <@ar R @af f>> annotation5: <Test #hex{05726172827152057261667166} @ar <R @af f>>
bytes1: <StreamingTest #hex{26626865626c6c616f04} #"hello"> annotation6: <Test #hex{82057261727152057261667166} <@ar R @af f>>
bytes2: <Test #hex{6568656c6c6f} #"hello"> bytes1: <StreamingTest #hex{26626865626c6c616f04} #"hello">
bytes3: <Test #hex{63414243} #"ABC"> bytes2: <Test #hex{6568656c6c6f} #"hello">
bytes4: <Test #hex{63414243} #hex{414243}> bytes3: <Test #hex{63414243} #"ABC">
bytes5: <Test #hex{63414a4e} #hex{ 41 4A 4e }> bytes4: <Test #hex{63414243} #hex{414243}>
bytes6: @"Bytes must be 2-digits entire" <ParseError "#hex{414 243}"> bytes5: <Test #hex{63414a4e} #hex{ 41 4A 4e }>
bytes7: <Test #"\x66corymb" #base64{Y29yeW1i}> bytes6: @"Bytes must be 2-digits entire" <ParseError "#hex{414 243}">
bytes8: <Test #"\x66corymb" #base64{Y29 yeW 1i}> bytes7: <Test #"\x66corymb" #base64{Y29yeW1i}>
bytes9: <Test #"\x62Hi" #base64{SGk=}> bytes8: <Test #"\x66corymb" #base64{Y29 yeW 1i}>
bytes10: <Test #"\x62Hi" #base64{SGk}> bytes9: <Test #"\x62Hi" #base64{SGk=}>
bytes11: <Test #"\x62Hi" #base64{S G k}> bytes10: <Test #"\x62Hi" #base64{SGk}>
bytes12: @"Bytes syntax only supports \\x, not \\u" <ParseError "#\"\\u6c34\""> bytes11: <Test #"\x62Hi" #base64{S G k}>
bytes13: <Test #hex{6f 11 61 62 63 6c 34 f0 5c 2f 22 08 0c 0a 0d 09 78 79 7a} #"abc\x6c\x34\xf0\\/\"\b\f\n\r\txyz"> bytes12: @"Bytes syntax only supports \\x, not \\u" <ParseError "#\"\\u6c34\"">
bytes13: <Test #hex{6f 11 61 62 63 6c 34 f0 5c 2f 22 08 0c 0a 0d 09 78 79 7a} #"abc\x6c\x34\xf0\\/\"\b\f\n\r\txyz">
dict0: <Test #hex{b0} {}> dict0: <Test #hex{b0} {}>
dict1: <NondeterministicTest #hex{b8 7161 31 5162 01 93313233 6163 b2 7a66697273742d6e616d65 59456c697a6162657468 b2 777375726e616d65 59426c61636b77656c6c} { a: 1 "b": #true [1 2 3]: #"c" { first-name: "Elizabeth" }: { surname: "Blackwell" } }> dict1: <NondeterministicTest #hex{b8 7161 31 5162 01 93313233 6163 b2 7a66697273742d6e616d65 59456c697a6162657468 b2 777375726e616d65 59426c61636b77656c6c} { a: 1 "b": #true [1 2 3]: #"c" { first-name: "Elizabeth" }: { surname: "Blackwell" } }>
dict2: @"Missing close brace" <ParseShort "{ a: b, c: d "> dict2: @"Missing close brace" <ParseShort "{ a: b, c: d ">
dict2a: @"Missing close brace" <ParseShort "{"> dict2a: @"Missing close brace" <ParseShort "{">
dict3: @"Duplicate key" <ParseError "{ a: 1, a: 2 }"> dict3: @"Duplicate key" <ParseError "{ a: 1, a: 2 }">
double1: <Test #hex{033ff0000000000000} 1.0> double1: <Test #hex{033ff0000000000000} 1.0>
double2: <Test #hex{03fe3cb7b759bf0426} -1.202e300> double2: <Test #hex{03fe3cb7b759bf0426} -1.202e300>
float1: <Test #hex{023f800000} 1.0f> float1: <Test #hex{023f800000} 1.0f>
int-257: <Test #hex{42feff} -257> int-257: <Test #hex{42feff} -257>
int-256: <Test #hex{42ff00} -256> int-256: <Test #hex{42ff00} -256>
int-255: <Test #hex{42ff01} -255> int-255: <Test #hex{42ff01} -255>
int-254: <Test #hex{42ff02} -254> int-254: <Test #hex{42ff02} -254>
int-129: <Test #hex{42ff7f} -129> int-129: <Test #hex{42ff7f} -129>
int-128: <Test #hex{4180} -128> int-128: <Test #hex{4180} -128>
int-127: <Test #hex{4181} -127> int-127: <Test #hex{4181} -127>
int-4: <Test #hex{41fc} -4> int-4: <Test #hex{41fc} -4>
int-3: <Test #hex{3d} -3> int-3: <Test #hex{3d} -3>
int-2: <Test #hex{3e} -2> int-2: <Test #hex{3e} -2>
int-1: <Test #hex{3f} -1> int-1: <Test #hex{3f} -1>
int0: <Test #hex{30} 0> int0: <Test #hex{30} 0>
int1: <Test #hex{31} 1> int1: <Test #hex{31} 1>
int12: <Test #hex{3c} 12> int12: <Test #hex{3c} 12>
int13: <Test #hex{410d} 13> int13: <Test #hex{410d} 13>
int127: <Test #hex{417f} 127> int127: <Test #hex{417f} 127>
int128: <Test #hex{420080} 128> int128: <Test #hex{420080} 128>
int255: <Test #hex{4200ff} 255> int255: <Test #hex{4200ff} 255>
int256: <Test #hex{420100} 256> int256: <Test #hex{420100} 256>
int32767: <Test #hex{427fff} 32767> int32767: <Test #hex{427fff} 32767>
int32768: <Test #hex{43008000} 32768> int32768: <Test #hex{43008000} 32768>
int65535: <Test #hex{4300ffff} 65535> int65535: <Test #hex{4300ffff} 65535>
int65536: <Test #hex{43010000} 65536> int65536: <Test #hex{43010000} 65536>
int131072: <Test #hex{43020000} 131072> int131072: <Test #hex{43020000} 131072>
list0: <Test #hex{90} []> list0: <Test #hex{90} []>
list1: <StreamingTest #hex{293132333404} [1 2 3 4]> list1: <StreamingTest #hex{293132333404} [1 2 3 4]>
list2: <StreamingTest #hex{2925636162630425636465660404} ["abc" "def"]> list2: <StreamingTest #hex{2925636162630425636465660404} ["abc" "def"]>
list3: <StreamingTest #hex{2992516131925162329251633304} [["a" 1] ["b" 2] ["c" 3]]> list3: <StreamingTest #hex{2992516131925162329251633304} [["a" 1] ["b" 2] ["c" 3]]>
list4: <Test #hex{9431323334} [1 2 3 4]> list4: <Test #hex{9431323334} [1 2 3 4]>
list4a: <Test #hex{9431323334} [1, 2, 3, 4]> list4a: <Test #hex{9431323334} [1, 2, 3, 4]>
list5: <Test #hex{943e3f3031} [-2 -1 0 1]> list5: <Test #hex{943e3f3031} [-2 -1 0 1]>
list6: <Test #hex{97 5568656c6c6f 757468657265 65776f726c64 90 a0 01 00} ["hello" there #"world" [] #set{} #true #false]> list6: <Test #hex{97 5568656c6c6f 757468657265 65776f726c64 90 a0 01 00} ["hello" there #"world" [] #set{} #true #false]>
list7: <Test #hex{93 73616263 732e2e2e 73646566} [abc ... def]> list7: <Test #hex{93 73616263 732e2e2e 73646566} [abc ... def]>
list8: @"Missing close bracket" <ParseShort "["> list8: @"Missing close bracket" <ParseShort "[">
placeholder0: <Test #hex{10} discard> placeholder0: <Test #hex{10} discard>
placeholder1: <Test #hex{11} capture> placeholder1: <Test #hex{11} capture>
placeholder2: <Test #hex{12} observe> placeholder2: <Test #hex{12} observe>
record1: <Test #hex{82118110} <capture <discard>>> record1: <Test #hex{82118110} <capture <discard>>>
record2: <Test #hex{82 12 83 75737065616b 81 10 82 11 81 10} <observe <speak <discard>, <capture <discard>>>>> record2: <Test #hex{82 12 83 75737065616b 81 10 82 11 81 10} <observe <speak <discard>, <capture <discard>>>>>
record3: <Test #hex{85 95 767469746c6564 76706572736f6e 32 757468696e67 31 4165 59426c61636b77656c6c 84 7464617465 42071d 32 33 524472} <[titled person 2 thing 1] 101 "Blackwell" <date 1821 2 3> "Dr">> record3: <Test #hex{85 95 767469746c6564 76706572736f6e 32 757468696e67 31 4165 59426c61636b77656c6c 84 7464617465 42071d 32 33 524472} <[titled person 2 thing 1] 101 "Blackwell" <date 1821 2 3> "Dr">>
record4: <Test #hex{8110} <discard>> record4: <Test #hex{8110} <discard>>
record5: <Test #hex{823790} <7[]>> record5: <Test #hex{823790} <7[]>>
record6: <Test #hex{8210787375727072697365} <discard surprise>> record6: <Test #hex{8210787375727072697365} <discard surprise>>
record7: <Test #hex{835761537472696e673334} <"aString" 3 4>> record7: <Test #hex{835761537472696e673334} <"aString" 3 4>>
record8: <Test #hex{8381103334} <<discard> 3 4>> record8: <Test #hex{8381103334} <<discard> 3 4>>
record9: @"Missing record label" <ParseError "<>"> record9: @"Missing record label" <ParseError "<>">
record10: @"Missing close-angle-bracket" <ParseShort "<"> record10: @"Missing close-angle-bracket" <ParseShort "<">
set0: <Test #hex{a0} #set{}> set0: <Test #hex{a0} #set{}>
set1: <NondeterministicTest #hex{a3313233} {1 2 3}> set1: <NondeterministicTest #hex{a3313233} {1 2 3}>
set1a: <NondeterministicTest #hex{a3313233} #set{1 2 3}> set1a: <NondeterministicTest #hex{a3313233} #set{1 2 3}>
set2: @"Missing close brace" <ParseShort "#set{ 1 2 3 "> set2: @"Missing close brace" <ParseShort "#set{ 1 2 3 ">
set2a: @"Missing close brace" <ParseShort "#set{"> set2a: @"Missing close brace" <ParseShort "#set{">
set3: @"Duplicate value" <ParseError "#set{a a}"> set3: @"Duplicate value" <ParseError "#set{a a}">
stream1: @"Chunk must be bytes" <DecodeError #hex{25516104}> stream1: @"Chunk must be bytes" <DecodeError #hex{25516104}>
stream2: @"Chunk must be bytes" <DecodeError #hex{25716104}> stream2: @"Chunk must be bytes" <DecodeError #hex{25716104}>
stream3: @"Chunk must be bytes" <DecodeError #hex{26516104}> stream3: @"Chunk must be bytes" <DecodeError #hex{26516104}>
stream4: @"Chunk must be bytes" <DecodeError #hex{26716104}> stream4: @"Chunk must be bytes" <DecodeError #hex{26716104}>
stream5: @"Chunk must be bytes" <DecodeError #hex{27516104}> stream5: @"Chunk must be bytes" <DecodeError #hex{27516104}>
stream6: @"Chunk must be bytes" <DecodeError #hex{27716104}> stream6: @"Chunk must be bytes" <DecodeError #hex{27716104}>
stream7: @"Missing end byte" <DecodeShort #hex{290000}> stream7: @"Missing end byte" <DecodeShort #hex{290000}>
stream8: @"Missing element" <DecodeShort #hex{930000}> stream8: @"Missing element" <DecodeShort #hex{930000}>
string0: <Test #hex{50} ""> string0: <Test #hex{50} "">
string0a: <StreamingTest #hex{2504} ""> string0a: <StreamingTest #hex{2504} "">
string1: <StreamingTest #hex{25626865626c6c616f04} "hello"> string1: <StreamingTest #hex{25626865626c6c616f04} "hello">
string2: <StreamingTest #hex{25626865636c6c6f04} "hello"> string2: <StreamingTest #hex{25626865636c6c6f04} "hello">
string3: <Test #hex{5568656c6c6f} "hello"> string3: <Test #hex{5568656c6c6f} "hello">
string4: <Test #hex{5f 14 616263e6b0b4e6b0b45c2f22080c0a0d0978797a} "abc\u6c34\u6C34\\/\"\b\f\n\r\txyz"> string4: <Test #hex{5f 14 616263e6b0b4e6b0b45c2f22080c0a0d0978797a} "abc\u6c34\u6C34\\/\"\b\f\n\r\txyz">
string5: <Test #hex{54f09d849e} "\uD834\uDD1E"> string5: <Test #hex{54f09d849e} "\uD834\uDD1E">
symbol0: <Test #hex{70} ||> symbol0: <Test #hex{70} ||>
symbol1: <StreamingTest #hex{27626865626c6c616f04} hello> symbol1: <StreamingTest #hex{27626865626c6c616f04} hello>
symbol2: <Test #hex{7568656c6c6f} hello> symbol2: <Test #hex{7568656c6c6f} hello>
value1: <Test #"\x66corymb" #value#"fcorymb"> value1: <Test #"\x66corymb" #value#"fcorymb">
value2: <Test #"\x01" #value#"\x01"> value2: <Test #"\x01" #value#"\x01">
value3: <Test #"\x01" #value#base64{AQ}> value3: <Test #"\x01" #value#base64{AQ}>
value4: <Test #"\x01" #value#base64{AQ==}> value4: <Test #"\x01" #value#base64{AQ==}>
value5: <Test #"\x01" #value #base64{AQ==}> value5: <Test #"\x01" #value #base64{AQ==}>
value6: <Test #hex{93313233} #value#hex{93313233}> value6: <Test #hex{93313233} #value#hex{93313233}>
longlist14: <Test #hex{9e0000000000000000000000000000} longlist14: <Test #hex{9e0000000000000000000000000000}
[#false #false #false #false #false [#false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false
#false #false #false #false]> #false #false #false #false]>
longlist15: <Test #hex{9f0f000000000000000000000000000000} longlist15: <Test #hex{9f0f000000000000000000000000000000}
[#false #false #false #false #false [#false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false]> #false #false #false #false #false]>
longlist100: longlist100:
<Test #hex{9f64 <Test #hex{9f64
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000} 00000000000000000000}
[#false #false #false #false #false #false #false #false #false #false [#false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false]> #false #false #false #false #false #false #false #false #false #false]>
longlist200: longlist200:
<Test #hex{9fc801 <Test #hex{9fc801
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000 00000000000000000000
00000000000000000000} 00000000000000000000}
[#false #false #false #false #false #false #false #false #false #false [#false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false #false
#false #false #false #false #false #false #false #false #false #false]> #false #false #false #false #false #false #false #false #false #false]>
rfc8259-example1: <NondeterministicTest rfc8259-example1: <NondeterministicTest
#hex{b2 55 496d616765 #hex{b2 55 496d616765
bc 55 5469746c65 bc 55 5469746c65
5f14 566965772066726f6d203135746820466c6f6f72 5f14 566965772066726f6d203135746820466c6f6f72
59 5468756d626e61696c 59 5468756d626e61696c
b6 53 55726c b6 53 55726c
5f26 687474703a2f2f7777772e6578616d706c652e636f6d2f696d6167652f343831393839393433 5f26 687474703a2f2f7777772e6578616d706c652e636f6d2f696d6167652f343831393839393433
56 486569676874 56 486569676874
41 7d 41 7d
55 5769647468 55 5769647468
41 64 41 64
58 416e696d61746564 58 416e696d61746564
75 66616c7365 75 66616c7365
56 486569676874 56 486569676874
42 0258 42 0258
55 5769647468 55 5769647468
42 0320 42 0320
53 494473 53 494473
94 41 74 94 41 74
42 03af 42 03af
42 00ea 42 00ea
43 009789} 43 009789}
{ {
"Image": { "Image": {
"Width": 800, "Width": 800,
"Height": 600, "Height": 600,
"Title": "View from 15th Floor", "Title": "View from 15th Floor",
"Thumbnail": { "Thumbnail": {
"Url": "http://www.example.com/image/481989943", "Url": "http://www.example.com/image/481989943",
"Height": 125, "Height": 125,
"Width": 100 "Width": 100
}, },
"Animated" : false, "Animated" : false,
"IDs": [116, 943, 234, 38793] "IDs": [116, 943, 234, 38793]
} }
}> }>
rfc8259-example2: <NondeterministicTest rfc8259-example2: <NondeterministicTest
#hex{92 bf10 58 4c61746974756465 03 4042e226809d4952 #hex{92 bf10 58 4c61746974756465 03 4042e226809d4952
57 41646472657373 50 57 41646472657373 50
59 707265636973696f6e 53 7a6970 59 707265636973696f6e 53 7a6970
57 436f756e747279 52 5553 57 436f756e747279 52 5553
59 4c6f6e676974756465 03 c05e99566cf41f21 59 4c6f6e676974756465 03 c05e99566cf41f21
55 5374617465 52 4341 55 5374617465 52 4341
53 5a6970 55 3934313037 53 5a6970 55 3934313037
54 43697479 5d 53414e204652414e434953434f 54 43697479 5d 53414e204652414e434953434f
bf10 58 4c61746974756465 03 4042af9d66adb403 bf10 58 4c61746974756465 03 4042af9d66adb403
57 41646472657373 50 57 41646472657373 50
59 707265636973696f6e 53 7a6970 59 707265636973696f6e 53 7a6970
57 436f756e747279 52 5553 57 436f756e747279 52 5553
59 4c6f6e676974756465 03 c05e81aa4fca42af 59 4c6f6e676974756465 03 c05e81aa4fca42af
55 5374617465 52 4341 55 5374617465 52 4341
53 5a6970 55 3934303835 53 5a6970 55 3934303835
54 43697479 59 53554e4e5956414c45} 54 43697479 59 53554e4e5956414c45}
[ [
{ {
"precision": "zip", "precision": "zip",
"Latitude": 37.7668, "Latitude": 37.7668,
"Longitude": -122.3959, "Longitude": -122.3959,
"Address": "", "Address": "",
"City": "SAN FRANCISCO", "City": "SAN FRANCISCO",
"State": "CA", "State": "CA",
"Zip": "94107", "Zip": "94107",
"Country": "US" "Country": "US"
}, },
{ {
"precision": "zip", "precision": "zip",
"Latitude": 37.371991, "Latitude": 37.371991,
"Longitude": -122.026020, "Longitude": -122.026020,
"Address": "", "Address": "",
"City": "SUNNYVALE", "City": "SUNNYVALE",
"State": "CA", "State": "CA",
"Zip": "94085", "Zip": "94085",
"Country": "US" "Country": "US"
} }
]> ]>
} }
>