esmolanka / sexp-grammar

Invertible parsing for S-expressions
33 stars 4 forks source link

Tests fail #20

Closed sternenseemann closed 3 years ago

sternenseemann commented 3 years ago

Happened on aarch64-linux if that's relevant.

All tests
  Sexp lexer/parser tests
    123 is an integer number:                                      OK (0.01s)
    +123 is an integer number:                                     OK
    -123 is an integer number:                                     OK
    +123.45 is a floating number:                                  OK
    0_1 is a symbol:                                               OK
    1e2 is a symbol:                                               OK
    -1e2 is a symbol:                                              OK
    comments:                                                      OK
    cyrillic characters in comments:                               OK
    unicode math in comments:                                      OK
    hello-world is symbol:                                         OK
    \forall is a symbol:                                           OK
    \Bbb{N} is a symbol:                                           OK
    whitespace and symbol:                                         OK
    cyrillic characters symbol:                                    OK
    greek characters symbol:                                       OK
    special-characters "\:$%^&*," symbol:                          OK
    string with arabic characters:                                 OK
    string with japanese characters:                               OK
    string with newline:                                           OK
    string with \n:                                                OK
    string with \t:                                                OK
    string with \":                                                OK
    string with \\:                                                OK
    paren-list:                                                    OK
    bracket-list:                                                  OK
    brace-list:                                                    OK
    quoted:                                                        OK
    hashed:                                                        OK
    keyword:                                                       OK
\\" ~qux {`1.915244124435752 [[-1]] [bar 0 BR] ("л (3 символ {@baz @baz} +.0E-2) ~qux ((~qux () {()}) []) {()} +.0E-2 '{1e2 [] {{[]} ~qux} [] +.0E-2 символ} символ '1.0e-2]) -1e2 (,+.0E-2 ('{[] uv鶩} [<Z' (()) <䀘?p {@baz () {}} 1.0e-2] 5 1.0e-2 "\\*𡇙𪹩𨧃 \\@}𦠯" 11) ,@[-1e2 "G        \\-" +.0E-2 ({[] {} -1e2})] [1e2 {} ({{}} -2 :foo {[] `символ} "g,\\") [{+.0E-2 (()) 1.3520026356824904} "u\"\"4\"" {~qux bar} -1e2] (-1e2 1e2 (,@-3) {A1/ [[]] ()}) {,@``+.0E-2 [{}] +.0E-2 `8嗖𞄘+O: {} -5} [{[] :foo 2.41184380602076} '#[]] 0.9406591074758921 "FDR\"
"} "\""}} +.0E-2 bar {,символ {{:foo 1} символ} !2Dl: [(1e2)] "tSsbar {{} `[] []} #() @baz) {символ "" -5.682064401586063 '-1e2 {'{[]}} [()]} 1e2 1e2 [2 bar [#[] [] ()]] [[] bar 2.6084394193802516 [{} `|%A 1.0e-2] ,({} 1e2) [``~qux символ]] ~qux +.0E-2 ,@,@{}) символ {{() {`[`"M"] [] ,@()} символ 'символ ([]) символ} {(символ +.0E-2 {}) {} {1.4343482333519189 символ} (()) #bar (#[1] `символ)} [(1e2 ,@~qux {{}}) []] @baz 1.7045270876932488 (+.0E-2 bar '{}) {} @baz ({}) {} "[            \"_\"#f\"𗼋"} [(,@~qux 1.0e-2 #?E^ {-1e2} ,@bar ~qux) +.0E-2 `[{@baz [{}]} `(bar (1e2)) [0 bar]] #2 ,@,('[(,@1) 1e2] {() ,+.0E-2 ~qux}) @baz [["g" {}] "n" [[+.0E-2] `{-1}] символ {,@+.0E-2 [()]}]] {[(символ -1.9872908510560745) [символ bar ,@()] 1e2 {-1e2}] -1e2 (-It1: []) {1e2 2.0876580557105515 [] {{} ~qux} {[-1e2] 0}} #{-2.0701848382065524} {[@baz] ,@#{} ~qux 𗡈S矊t~𣬧n () ,@1.0e-2} (&㬒㪅 '[1e2 Zx] символ %/=𤏈-) 1.0e-2 Q6j=?w𢴞𞤔`} {символ 6.684198128614428 -1.7853444658859716 (#{2.723290696873135} {} -1e2 (-1e2 :foo))} ~qux (1e2 1e2 (~qux {} {} A캼l녹ꁱ죁 |Sc蛌X ()) ([() [1.0e-2]] +.0E-2) {,@,'-1e2 {,[] bar [{}]} []} '[] [[] :foo ([+.0E-2]) (~qux {} (bar))] (-1e2 1e2 [{} []] [])) ("" ,(символ (@baz '"    M") [-1e2 bar] [{}] {{`()} 0.4232937105087428 @baz}) -1e2 ,+.0E-2 1e2 {1e2 !*h2䦊2 {(bar)} -Et [[-1e2] (()) (,@,'-1e2)]} qo껁 -1e2 @baz +.0E-2 ,{1e2 {()} {`bar () (~qux)}}) 13 {q,n71덮oxZ, `,(,@1.0e-2 1.0e-2 {[()] #'{}} -5.111523771773284 символ) By@𨨣zEgy~𭯇W {,,bar {[0] "&\\
 a\\
\\" 1e2 `([] 3 []) 5.782896308114719 [символ])) bar [-1e2 [-4.594820409325223 ~qux {символ @baz} ['bar]] -1e2 [[] ([] {} ,@~qux) [[{}] '[1e2] -1e2]] [{~qux 1.0e-2} ~qux () 1e2 []] [({} 1.3627620106246041) 0 (() ({}) (символ)) (@baz)] [{{()} ({})} bar [[""] ,[] []] -1e2 () :foo] (@baz @baz 1.0e-2) "       3
        B\"\"" [`#`'[] (()) [``:foo {1}] `:foo ~qux ~qux] {} +.0E-2] [+.0E-2 (([,@1.0e-2] [[]]) [[]] " @
k" 1.0e-2 1.0e-2 {}] "A 𥔡𪐕" :foo ~qux +.0E-2 1<鏨AT>v唄<c$?穵? {-1.4758641492913738 () {(':foo [()])} ,[[,@[] ',~qux bar] #{+.0E-2} `1e2 (1.0e-2) {} ((()))] "480\\1e2] ({символ () @baz [{} {}]} [{-1e2 {[]}} [Gf8 ()] -1e2 (1e2)]) {} {'[{} 1e2 (("")) 1e2] 5 -11.831391667684354} `~qux ({1.0e-2 {@baz {[]}} [[""] []]} +.0E-2 {[] {~qux 1.0e-2 {}} {@baz @baz}} [] ({-2.5087081125401025} +.0E-2 символ bar -1e2) 𦄜hO涕𨔡'nlD%l7) {@baz {tao𣘢3\ ~qux -1e2} (символ 1e2 -0.5851359193345104 ~qux bar [`() ~qux 𘪳𧲕K]) -1e2 (1.0e-2 +.0E-2) ,:foo {(1.0e-2 `{} @baz) 1e2} ([-2 [@baz] "  "]) bar} [[] 1e2 "      \"
W       " bar 1e2 ([~qux '{}] ~qux #`,{`символ #(:foo)} () {+.0E-2} [{} {}]) [("" #1.0e-2) [] 1.0e-2] {~qux}) [(`:foo :foo @baz ~qux (@baz)) (+.0E-2) 0 ({} `символ) :foo @baz () '-0.6103300527192979 1e2 [[,1e2 `쳨\ :foo]] [@baz [] {[] {}} ()]] [#[] 1 [@baz] :foo {'(bar {()} ``([])) ({:foo} -1 '{}) [[1]] :foo (2.7359146372033574 [] {{}})}] ({{[1e2] '[,[]]} "G\"&N" ({{}} -1e2) 1.0e-2} символ {} [[#()] -2.1081330527277884 символ K𘌡佞~] ~qux 'bar (-1e2) @baz {@baz eJx}) [] `символ} [bar 1e2 `{1e2 #[1e2 3.349213250515734] @baz () +.0E-2 [] {[,~qux #,[] 1.0e-2] #1.5482150173104425 ,@,@'-1e2 символ {{[]}}}} [+.0E-2] -22.91668412446008 (['[] #1e2] [{{} {':foo}}] "𤼄9" 7.8246350876746025 ~qux) (~qux ZZT8 '[символ -3] @baz ,@Ir6+𧥦𤄌𠩫\허c ~qux {,@:foo {{()} {'[]}} [[] (,@1.0e-2)] -2.7382046459778744 символ ,@[]} символ ([{} [] -'] () -1e2 -1e2) (qg𬧞 (,@{}) #돮1U `+.0E-2 'bar) ##~qux) bar #{{#{[:foo] "" +.0E-2} (@baz)} [{{1e2} [] {+.0E-2}} {'символ {} 1e2} [[{}]] "\""] @baz} (+.0E-2) {m茺𬉿 `{-4} bar 1e2 𓁐𩴳𭯞 筢f<𐿲-I>f`𨡀} {,(bar -2.8208746369019266 [~qux [()]] 0) (-1e2 <|X :foo :foo {}) {([] [] @baz) `{} символ символ :foo} -1e2 символ [+.0E-2 1e2 [3] (1e2 ',,(@baz) @baz) {[] +.0E-2} {@baz}] {1.0e-2 [] {}} #,{#bar []} 1e2 1e2} {F,htChb轪=N𘉂i bar ,@+.0E-2 {("苟T𮥲" ()) {} +.0E-2 3.510345187939} (,@[bar '-1e2] [{()} [] {}]) bar {,@"
"} {} {} [[#`1.0e-2 1e2 {}]] [{} {{} () '[1.0e-2]}] 1e2} `{{} [:foo (,@:foo)] bar "3I
r" [{} :foo] +.0E-2 "𩍡
2\\"} ["{
琦" -1e2 bar :䝘Q𫻽e椬'N,>G 1e2 {} 1.0e-2 [#{() `[] :foo}] (@baz 1.0e-2 {{{}} 1e2 1} ,[-1e2 *𢡑] #[+.0E-2 #() "}
y\\ ##" \")
        }" {}] 'символ {'`[~qux #(@baz) 1.0e-2 (``[" "]) {[]}] {символ [символ] w2J bar} 1.0e-2 {()} {[() {[]}]} ,@[{@baz (:foo) ,символ} {-1e2 ,@()} символ] @baz символ (뮿?z ,@(() ,@{[]} {()})) [-1e2 символ] ,() {}} [#`"W
Fm\\ " "" -1e2 1e2) `-1e2 5 z2Q5𘥓Un5叐 ([{}] ~qux []) (1e2) :foo ('-5 {𬭷2D} 1.0e-2 bar ,[[{}]] ([]))] +.0E-2 (`,(символ {~qux} ~qux (bar `-1e2))) bar [,-1e2 `({[{}] -1e2} ({} ())) bar [1.0e-2 [()] -1e2] +.0E-2 [{{()} (:foo) ,bar} (1e2 #`()) {1.5092346088135833 () 𨥴@`} ~qux bar +.0E-2] :foo] ,@{((1.0e-2 ,@3 ~qux) {@baz} [,:foo :foo] '5.324523044749347 [] [~qux -1e2])} bar bar [(:foo) ,bar символ ({bar 3 *R} bar {{:foo} -1e2 +.0E-2} [-1e2] {} [#[]]) @baz] -22.581910392607124 (`['1.0e-2 (-1e2 (,[~qux]) {}) +.0E-2 #{}] 1e2 +.0E-2 -6)} {1.0e-2 +.0E-2 {1e2 [{@baz -1e2} символ] [`{} -2 :foo {} ()] "𠔐d         4]
"} -1e2] bar +𭐅.v {(-1e2) ,,@[@baz]}] +.0E-2 [-0.8715577423133258] #{{{} () [символ]}} @baz}} [@baz 8 `(bar `-1e2 ,-1e2 1e2 символ {-1e2 @baz 4 ~qux (({}))}) [`() ({} bar) [{[] +.0E-2} {~qux ,(())} @baz {[] [:foo] []} {} 1e2] ,@[] 𤡖i 1e2] '{''"R.ze
ç ¤+.0E-2 [] :foo ([{} ""])} 1e2 `.oA懄𧛚x|ZtUEy&oBC67.z=𭤸. ~qux (bar) 'bar `"\"8@)W
Cg𧻉 Z%𭥙G𢩢0Mea (mS00 {}) ,@[(1.0e-2) ~qux :foo] [()] {-1e2 ,(-0.218862559763236) +.0E-2 1e2} bar #{{+.0E-2 [] ()} -0.18183371385814737 "" @baz (#()) ""} {bar}} символ] :foo +.0E-2 :foo #[[,@() ~qux -1e2 -1e2 bar +.0E-2 ({} [{} {-1e2}])] ('символ {1e2 `[{}] :foo} {[""] ({} [] [()]) 1e2 ,@[]} ~qux +.0E-2 -1e2 {`символ :foo #(("") ,() []) [() () :foo] ~qux `[[1.0e-2] :foo]} [({}) '1e2 ,@{([])} [{} ,-2.92206607331512 []] @baz]) {((-2.630842522945305) @baz {+.0E-2 "\\S"} :foo ~qux) :foo символ `2.8669698905934977 ,'bar} {bar [1.0e-2 {+.0E-2} [] +.0E-2] "7\"ᗛ@𘊘       " -1e2 ~qux ()} 1e2 ,{{} символ ([+.0E-2] #[,@{}] 0) +.0E-2 #-1e2 символ [] []} 4] {} "i\"/@'𪦕\\L    3       I       l\\
 \"𫸽 J" 34.873426362195104 -37.29712524863216 1.0e-2 {@baz [#,#{(~qux) () [() bar] bar -2} ~qux {@baz {} ({()} @baz) (-1.0898840411368622)} символ {+.0E-2 bar}] #(7.310943832275464 [([])] [#~qux ({'1e2} [])] 6.287534488738398 1e2 "        a       
 " [] -1e2 1.0e-2) 2E3!9ri킐g邋@RK𮫬yAYpV (символ (({{}} #()) 3.547367689652698 {(+.0E-2) символ 1.0e-2} [,@({})] символ) {символ 4.651198140771813} ,() 1.0e-2 (5 ({}) ,@({()} -1e2 @baz) [[()] [[]] a:𫙴] 2.7019417119790075) :foo #~qux) {{[[]] {+.0E-2 {""} [`()]} +.0E-2 #[]} ((-1e2 ~qux 3) bar) 넬V𪃕Eg|&$𣯜𠨉D символ (3.3197773249775993 [+.0E-2 @baz -2.6305808278525604] [:foo] [[#1.0e-2]] 4.630303095666934) {{}} [() ([1.0e-2] -1e2 1e2) bar :foo] bar символ {} [[символ #'[1e2] -1e2] @baz (:foo) "\""] 1e2} (-1e2 (1e2 (:foo 0.07852499424747973 ({})) ,@~qux [~qux ("\"") '#{}] [1.3557077464775602 []]) 1e2 ,символ [1e2 [`,@+.0E-2 #-3 {}] -1e2 ''"Tj
\"Ⲅ\" " ({#{}})] [:foo Q&] :foo 1.0e-2 ,@#+.0E-2 '-9 Q^)} (0.6381901437446563 {[#+.0E-2 -3 &*XD&] 10.901680866262078 {-1e2 символ 1e2 ([{}] ,символ [1.0e-2]) символ ~qux}} ~qux [символ [[]] [1 1.0e-2 [@baz 1.0e-2]] ~qux (()) {{{[]} [] []} [[bar]] [-1e2 "\\"] [() 1e2]} 7 (1.0e-2 {символ ,@{""} ()}) #bar -1e2 +.0E-2 "    s7k'\""] -9.719421987483473 (-1e2 [1.0e-2 1.0e-2 {+.0E-2 (bar) 1e2} [[] {} ~qux] :foo] 3 @baz (((:foo) ''1.0e-2) [() [1.0e-2] bar] (+.0E-2 {}) bar 1.0e-2 +.0E-2) [{#1.0e-2 ()} `-1e2 [1O3= 1.0e-2] [-1e2 ,@bar ,{}] [символ () fClj] 1e2] 4.592679616768332 -1e2 [2 1.0e-2] ())) +.0E-2 1.0e-2 [] ,,@1.0e-2 ~qux [+.0E-2 1e2 '(,4.210579281282652)] @baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Cg𧻉oo #[[,@() ~qux -1e2 -1e2 bar +.0E-2 ({} [{} {-1e2}])] ('символ {1e2 `[{}] :foo} {[""] ({} [] [()]) 1e2 ,@[]} ~qux +.0E-2 -1e2 {`символ :foo #(("") ,() []) [() () :foo] ~qux `[[1.0e-2] :foo]} [({}) '1e2 ,@{([])} [{} ,-2.92206607331512 []] @baz]) {((-2.630842522945305) @baz {+.0E-2 "\\S"} :foo ~qux) :foo символ `2.8669698905934977 ,'bar} {bar [1.0e-2 {+.0E-2} [] +.0E-2] "7\"ᗛ@𘊘 " -1e2 ~qux ()} 1e2 ,{{} символ ([+.0E-2] #[,@{}] 0) +.0E-2 #-1e2 символ [] []} 4] {} "i\"/@'𪦕\\L    3       I       l\\
 \"𫸽 J" 34.873426362195104 -37.29712524863216 1.0e-2 {@baz [#,#{(~qux) () [() bar] bar -2} ~qux {@baz {} ({()} @baz) (-1.0898840411368622)} символ {+.0E-2 bar}] #(7.310943832275464 [([])] [#~qux ({'1e2} [])] 6.287534488738398 1e2 "        a       
 " [] -1e2 1.0e-2) 2E3!9ri킐g邋@RK𮫬yAYpV (символ (({{}} #()) 3.547367689652698 {(+.0E-2) символ 1.0e-2} [,@({})] символ) {символ 4.651198140771813} ,() 1.0e-2 (5 ({}) ,@({()} -1e2 @baz) [[()] [[]] a:𫙴] 2.7019417119790075) :foo #~qux) {{[[]] {+.0E-2 {""} [`()]} +.0E-2 #[]} ((-1e2 ~qux 3) bar) 넬V𪃕Eg|&$𣯜𠨉D символ (3.3197773249775993 [+.0E-2 @baz -2.6305808278525604] [:foo] [[#1.0e-2]] 4.630303095666934) {{}} [() ([1.0e-2] -1e2 1e2) bar :foo] bar символ {} [[символ #'[1e2] -1e2] @baz (:foo) "\""] 1e2} (-1e2 (1e2 (:foo 0.07852499424747973 ({})) ,@~qux [~qux ("\"") '#{}] [1.3557077464775602 []]) 1e2 ,символ [1e2 [`,@+.0E-2 #-3 {}] -1e2 ''"Tj
\"Ⲅ\" " ({#{}})] [:foo Q&] :foo 1.0e-2 ,@#+.0E-2 '-9 Q^)} (0.6381901437446563 {[#+.0E-2 -3 &*XD&] 10.901680866262078 {-1e2 символ 1e2 ([{}] ,символ [1.0e-2]) символ ~qux}} ~qux [символ [[]] [1 1.0e-2 [@baz 1.0e-2]] ~qux (()) {{{[]} [] []} [[bar]] [-1e2 "\\"] [() 1e2]} 7 (1.0e-2 {символ ,@{""} ()}) #bar -1e2 +.0E-2 "    s7k'\""] -9.719421987483473 (-1e2 [1.0e-2 1.0e-2 {+.0E-2 (bar) 1e2} [[] {} ~qux] :foo] 3 @baz (((:foo) ''1.0e-2) [() [1.0e-2] bar] (+.0E-2 {}) bar 1.0e-2 +.0E-2) [{#1.0e-2 ()} `-1e2 [1O3= 1.0e-2] [-1e2 ,@bar ,{}] [символ () fClj] 1e2] 4.592679616768332 -1e2 [2 1.0e-2] ())) +.0E-2 1.0e-2 [] ,,@1.0e-2 ~qux [+.0E-2 1e2 '(,4.210579281282652)] @baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed ((0.6381901437446563 {[#+.0E-2 -3 &*XD&] 10.901680866262078 {-1e2 символ 1e2 ([{}] ,символ [1.0e-2]) символ ~qux}} ~qux [символ [[]] [1 1.0e-2 [@baz 1.0e-2]] ~qux (()) {{{[]} [] []} [[bar]] [-1e2 "\\"] [() 1e2]} 7 (1.0e-2 {символ ,@{""} ()}) #bar -1e2 +.0E-2 "   s7k'\""] -9.719421987483473 (-1e2 [1.0e-2 1.0e-2 {+.0E-2 (bar) 1e2} [[] {} ~qux] :foo] 3 @baz (((:foo) ''1.0e-2) [() [1.0e-2] bar] (+.0E-2 {}) bar 1.0e-2 +.0E-2) [{#1.0e-2 ()} `-1e2 [1O3= 1.0e-2] [-1e2 ,@bar ,{}] [символ () fClj] 1e2] 4.592679616768332 -1e2 [2 1.0e-2] ())) +.0E-2 1.0e-2 [] ,,@1.0e-2 ~qux [+.0E-2 1e2 '(,4.210579281282652)] @baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed (,,@1.0e-2 ~qux [+.0E-2 1e2 '(,4.210579281282652)] @baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed ([+.0E-2 1e2 '(,4.210579281282652)] @baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed (@baz (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed ((+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
ð­¢£        " {1.0e-2 ":" {}} #символ `(,@':foo 1e2 [] ~qux) `1e2 {{} -4 @baz} r6X!2Hl}))�Ð¸Ð¼Ð²Ð¾Ð» bar +.0E-2 `{+.0E-2 `[(()) -1e2 #5 ,{() [[]] `bar} 0 {}] "\" 
Parsed (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ ,@(символ +.0E-2 bar :foo {0.16372873233254476 :foo {,1.0e-2 {} -3} ([] {}) [символ] {'~qux -1e2 [':foo]}}) ["L
\\      
        }"] ,символ {2.0723768619951697 1e2 #("" @baz bar "" {}) :foo {([vc] @baz) '[1.0e-2 '{-1e2} []] 1.0e-2} -8.685468471495893 ,[bar {} 𩵴lꨧ ,@[+.0E-2 @baz (())]] -7 ["
H
" @baz] {({-1e2} -1) '(+.0E-2) {} {} #()} {}} -24)
Parsed (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) ([[,[] ~qux {}] (+.0E-2 {} ()) 1e2 [~qux []]] 1.0e-2 ('1.0e-2 #-1e2 {aCl 1.0e-2 @baz} (1e2 `(1.0e-2))) символ) символ -24)
Parsed (+.0E-2 (~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) -24)
Parsed ((~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}) -24)
Parsed ((~qux {-3 `символ 1e2 mHXA} @baz +.0E-2 {bar} #[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}}))
Parsed (#[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7 ~qux #[2.0070850472968966 '`[() '~qux @baz] (([]) () `(,()))] ,@{[,@-3] ({{}}) {}})
Parsed (#[{'[]} (-1.4249924671053869 []) -3 +.0E-2 1e2 ~qux] [1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7)
Parsed ([1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2] 7)
Parsed ([1e2 {[] -2.539719734490038 -1e2} {{}} `('[[]] 0.5) -1e2])
Parsed [{{}} `('[[]] 0.5) -1e2]
Parsed [`('[[]] 0.5) -1e2]
Parsed [`('[[]] 0.5)]
Parsed (0.5)
FAIL (0.42s)
    *** Failed! Falsified (after 97 tests and 19 shrinks):
    (0.5)
    Use --quickcheck-replay=74758 to reproduce.
  Grammar tests
    Base type combinator tests
      bool/true:                                                   OK
      bool/false:                                                  OK
      integer:                                                     OK
      int:                                                         OK
      real:                                                        OK
      double:                                                      OK
      string:                                                      OK
      string':                                                     OK
      symbol:                                                      OK
    List combinator tests
      empty list of ints:                                          OK
      list of strings:                                             OK
      bracket list of ints:                                        OK
      brace list of strings:                                       OK
    Prefix combinator tests
      quoted:                                                      OK
      hashed:                                                      OK
      backticked:                                                  OK
      comma-ed:                                                    OK
      comma-at-ed:                                                 OK
    Dict combinator tests
      simple dict, present key:                                    OK
      simple dict, missing key:                                    OK
      simple dict, missing optional key:                           OK
      simple dict, extra key:                                      OK
      simple dict, remaining keys, from:                           OK
      simple dict, remaining keys, to:                             OK
      simple dict, remaining keys then one more:                   OK
    Reverse stack prism tests
      pair of two bools:                                           OK
      sum of products (Bar True 42):                               OK
      sum of products (Baz True False) tries to parse (baz #f 10): OK
    parse tests
      (+ 0 (*)):                                                   OK
    gen tests
      (+ 0 (*)):                                                   OK
    parse . gen == id
      ArithExprs/TH:                                               OK (0.01s)
        +++ OK, passed 100 tests.
      ArithExprs/Generics:                                         OK
        +++ OK, passed 100 tests.
      Pair Int String:                                             OK
        +++ OK, passed 100 tests.
      Foo (Foo Int String) (Pair String Int):                      OK (0.01s)
        +++ OK, passed 100 tests.
      Person:                                                      OK (0.09s)
        +++ OK, passed 100 tests.

1 out of 66 tests failed (0.57s)
Test suite sexp-grammar-test: FAIL
esmolanka commented 3 years ago

@sternenseemann could you please check which version of GHC and the dependency packages (text, utf8-string) you used?

sternenseemann commented 3 years ago

GHC 8.10.4, utf8-string-1.0.2 and text-1.2.4.1.

esmolanka commented 3 years ago

Thanks. I actually can reproduce it on my machine with different versions of packages, with reasonably large number of QuickCheck tests. It does not have anything to do with parsing of utf8 strings as I initially suspected.

It looks like sometimes QuickCheck manages to generate such a scientific number that breaks the sexp format/decode invertibility invariant.

Investigating.