summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-05-20 21:20:34 -0700
committerKaz Kylheku <kaz@kylheku.com>2017-05-20 21:20:34 -0700
commit5fc47b3d24f1fa568ffb54db8e8054f190e2fb2b (patch)
tree8943e009897bbd09b1c702234a001d69b38d9bcf /tests
parent1bf2b4787766da146c6b32dffccca2a3b6b35273 (diff)
downloadtxr-5fc47b3d24f1fa568ffb54db8e8054f190e2fb2b.tar.gz
txr-5fc47b3d24f1fa568ffb54db8e8054f190e2fb2b.tar.bz2
txr-5fc47b3d24f1fa568ffb54db8e8054f190e2fb2b.zip
ffi: add two tests based on glob function.
One approach captures the paths as a carray of strings, and explicitly frees it with globfree. The other approach uses a zarray, taking advantage of null termination. globfree is elided because TXR FFI does the freeing; the types used declare to it that it is taking ownership of a dynamically allocated vector of dynamically allocated strings, and so it performs the equivalent of globfree. * tests/017/glob-carray.expected: New file. * tests/017/glob-carray.tl: Likewise. * tests/017/glob-zarray.expected: Likewise. * tests/017/glob-zarray.tl: Likewise.
Diffstat (limited to 'tests')
-rw-r--r--tests/017/glob-carray.expected4
-rw-r--r--tests/017/glob-carray.tl21
-rw-r--r--tests/017/glob-zarray.expected3
-rw-r--r--tests/017/glob-zarray.tl17
4 files changed, 45 insertions, 0 deletions
diff --git a/tests/017/glob-carray.expected b/tests/017/glob-carray.expected
new file mode 100644
index 00000000..ac1290e3
--- /dev/null
+++ b/tests/017/glob-carray.expected
@@ -0,0 +1,4 @@
+0
+#S(glob-t pathc 4 pathv #<carray 4 #<ffi-type str-d>> reserve 0)
+#("tests/001/query-1.txr" "tests/001/query-2.txr" "tests/001/query-3.txr"
+ "tests/001/query-4.txr")
diff --git a/tests/017/glob-carray.tl b/tests/017/glob-carray.tl
new file mode 100644
index 00000000..3c68ac1a
--- /dev/null
+++ b/tests/017/glob-carray.tl
@@ -0,0 +1,21 @@
+(load "../common")
+
+(defstruct glob-t nil
+ pathc pathv reserve)
+
+(deffi-type glob-t (struct glob-t
+ (pathc size-t)
+ (pathv (carray str-d))
+ (reserve size-t)))
+
+(with-dyn-lib nil
+ (deffi globb "glob" int (str int closure (ptr-out glob-t)))
+ (deffi globfree "globfree" void ((ptr-in glob-t)))
+ (deffi-cb glob-cb int (str int) -1))
+
+(let* ((g (new glob-t)))
+ (prinl (globb "tests/001/*.txr" 0 (glob-cb (lambda (path err))) g))
+ (carray-set-length g.pathv g.pathc)
+ (prinl g)
+ (prinl (vec-carray g.pathv))
+ (globfree g))
diff --git a/tests/017/glob-zarray.expected b/tests/017/glob-zarray.expected
new file mode 100644
index 00000000..4bfc0810
--- /dev/null
+++ b/tests/017/glob-zarray.expected
@@ -0,0 +1,3 @@
+0
+#S(glob-t pathc 4 pathv #("tests/001/query-1.txr" "tests/001/query-2.txr" "tests/001/query-3.txr"
+ "tests/001/query-4.txr") reserve 0)
diff --git a/tests/017/glob-zarray.tl b/tests/017/glob-zarray.tl
new file mode 100644
index 00000000..b6e16d13
--- /dev/null
+++ b/tests/017/glob-zarray.tl
@@ -0,0 +1,17 @@
+(load "../common")
+
+(defstruct glob-t nil
+ pathc pathv reserve)
+
+(deffi-type glob-t (struct glob-t
+ (pathc size-t)
+ (pathv (ptr-out-d (zarray str-d)))
+ (reserve size-t)))
+
+(with-dyn-lib (libc)
+ (deffi globb "glob" int (str int closure (ptr-out glob-t)))
+ (deffi-cb glob-cb int (str int) -1))
+
+(let* ((g (new glob-t)))
+ (prinl (globb "tests/001/*.txr" 0 (glob-cb (lambda (path err))) g))
+ (prinl g))