summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-01-21 07:24:17 -0800
committerKaz Kylheku <kaz@kylheku.com>2025-01-21 07:24:17 -0800
commit6824735d879f42572778b40c323828f533b87248 (patch)
treeb135841d76b1854936138e348355ae8f93001ee1 /tests
parent519b05f5281572ef9f6f686844af25159ca5896e (diff)
downloadtxr-6824735d879f42572778b40c323828f533b87248.tar.gz
txr-6824735d879f42572778b40c323828f533b87248.tar.bz2
txr-6824735d879f42572778b40c323828f533b87248.zip
New function: get-csv.
* autloload.c (csv_set_entries, csv_instantiate): New static funtions. (autoload_init): Register autoload of stdlib/csv module via new functions. * stdlib/csv.tl: New file. * tests/010/csv.tl: Likewise. * txr.1: Documented.
Diffstat (limited to 'tests')
-rw-r--r--tests/010/csv.tl166
1 files changed, 166 insertions, 0 deletions
diff --git a/tests/010/csv.tl b/tests/010/csv.tl
new file mode 100644
index 00000000..fffd8d0d
--- /dev/null
+++ b/tests/010/csv.tl
@@ -0,0 +1,166 @@
+(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"))