(load "../common") (defmacro mtest-csv (. pairs) (tree-bind (data expected) (flow pairs (tuples 2) transpose) ^(mtest ,*(mappend (ret ^((get-csv ,(regsub "#" "\"" @1)) ,(mapcar (op regsub "#" "\"") @2))) data expected)))) (mtest-csv "" #("") "," #("" "") ",," #("" "" "")) (mtest-csv "\r" #("\r") "\r\n" #("") "\r\r" #("\r\r") "\r\r\n" #("\r") "\r\r" #("\r\r") "\r\r\r" #("\r\r\r") "\r\r\r\n" #("\r\r") "\r,\r" #("\r" "\r") "\r\n,\r" #("") "\r\r\n,\r" #("\r") ",\r\r" #("" "\r\r") ",\r\n" #("" "")) (mtest-csv "a\r" #("a\r") "a\r\n" #("a") "a\r\r" #("a\r\r") "a\r\r\n" #("a\r") "a\r\r" #("a\r\r") "a\r\r\r" #("a\r\r\r") "a\r\r\r\n" #("a\r\r") "a\r,a\r" #("a\r" "a\r") "a\r\n,a\r" #("a") "a\r\r\n,a\r" #("a\r") "a,a\r\r" #("a" "a\r\r") "a,\r\r" #("a" "\r\r") ",a\r\n" #("" "a")) (mtest-csv "##" #("") "#" #("") "#,#" #(",") "##,##" #("" "") "####" #("#") "##a#" #("a#") "#\r#" #("\r") "#\n#" #("\n") "#\r\n#" #("\n") "#\r\r\n#" #("\r\n") "#\r\r\r\n#" #("\r\r\n") "##\r\n#" #("") "##\r\r\n#" #("\r") "##\r\r\r\n#" #("\r\r")) (mtest-csv "##\n" #("") "#\n" #("\n") "#,#\n" #(",") "##,##\n" #("" "") "####\n" #("#") "##a#\n" #("a#") "#\r#\n" #("\r") "#\n#\n" #("\n") "#\r\n#\n" #("\n") "#\r\r\n#\n" #("\r\n") "#\r\r\r\n#\n" #("\r\r\n") "##\r\n#\n" #("") "##\r\r\n#\n" #("\r") "##\r\r\r\n#\n" #("\r\r")) (mtest-csv "#\r##\r#" #("\r#\r") "#\n##\n#" #("\n#\n") "#\r\n##\r\n#" #("\n#\n")) (mtest-csv "a#b" #("a#b") "a##b" #("a##b") "a###b" #("a###b")) (mtest-csv "#a#b" #("ab") "ab#cd#ef" #("ab#cd#ef")) (mtest-csv "a," #("a" "") ",a" #("" "a") "a,b,c" #("a" "b" "c") "#a#,b,c" #("a" "b" "c") "a,#b#,c" #("a" "b" "c") "a,b,#c#" #("a" "b" "c") "#a#,b,#c#" #("a" "b" "c") "#a#,#b#,#c#" #("a" "b" "c")) (mtest-csv "a,\r\n" #("a" "") ",a\r\n" #("" "a") "a,b,c\r\n" #("a" "b" "c") "#a#,b,c\r\n" #("a" "b" "c") "a,#b#,c\r\n" #("a" "b" "c") "a,b,#c#\r\n" #("a" "b" "c") "#a#,b,#c#\r\n" #("a" "b" "c") "#a#,#b#,#c#\r\n" #("a" "b" "c")) (mtest-csv "a,\n" #("a" "") ",a\n" #("" "a") "a,b,c\n" #("a" "b" "c") "#a#,b,c\n" #("a" "b" "c") "a,#b#,c\n" #("a" "b" "c") "a,b,#c#\n" #("a" "b" "c") "#a#,b,#c#\n" #("a" "b" "c") "#a#,#b#,#c#\n" #("a" "b" "c")) (mtest-csv "a,\r" #("a" "\r") ",a\r" #("" "a\r") "a,b,c\r" #("a" "b" "c\r") "#a#,b,c\r" #("a" "b" "c\r") "a,#b#,c\r" #("a" "b" "c\r") "a,b,#c#\r" #("a" "b" "c\r") "#a#,b,#c#\r" #("a" "b" "c\r") "#a#,#b#,#c#\r" #("a" "b" "c\r")) (mtest-csv "a,\n" #("a" "") ",a\n" #("" "a") "a,b,c\n" #("a" "b" "c") "#a#,b,c\n" #("a" "b" "c") "a,#b#,c\n" #("a" "b" "c") "a,b,#c#\n" #("a" "b" "c") "#a#,b,#c#\n" #("a" "b" "c") "#a#,#b#,#c#\n" #("a" "b" "c")) (mtest-csv "a,\r" #("a" "\r") ",a\r" #("" "a\r") "a,b,c\r" #("a" "b" "c\r") "#a#,b,c\r" #("a" "b" "c\r") "a,#b#,c\r" #("a" "b" "c\r") "a,b,#c#\r" #("a" "b" "c\r") "#a#,b,#c#\r" #("a" "b" "c\r") "#a#,#b#,#c#\r" #("a" "b" "c\r")) (mtest-csv "aa,\r\n" #("aa" "") ",aa\r\n" #("" "aa") "aa,bb,cc\r\n" #("aa" "bb" "cc") "#aa#,bb,cc\r\n" #("aa" "bb" "cc") "aa,#bb#,cc\r\n" #("aa" "bb" "cc") "aa,bb,#cc#\r\n" #("aa" "bb" "cc") "#aa#,bb,#cc#\r\n" #("aa" "bb" "cc") "#aa#,#bb#,#cc#\r\n" #("aa" "bb" "cc")) (mtest-csv "#Hello, ##Bob##!" #("Hello, #Bob#!") "#Hello, ##Bob##!\r" #("Hello, #Bob#!\r") "#Hello, ##Bob##!\n" #("Hello, #Bob#!\n") "#Hello, ##Bob##!\r\n" #("Hello, #Bob#!\n") "#Hello, ##Bob##!#\r\n" #("Hello, #Bob#!") "#Hello, ##Bob##!#\n" #("Hello, #Bob#!") "#Hello, ##Bob##!#\r" #("Hello, #Bob#!\r"))