summary refs log tree commit diff
diff options
context:
space:
mode:
authorArun Isaac2021-10-23 09:47:14 +0530
committerArun Isaac2021-10-23 09:47:14 +0530
commit7a4f28752dd142bd85939d840393c4cd8421f784 (patch)
tree4dca1708fbea9436ed23b418714c62f41db38786
parent40d74e554515bf775cc2883a3b7afe5e47ebf22f (diff)
downloadguile-email-7a4f28752dd142bd85939d840393c4cd8421f784.tar.gz
guile-email-7a4f28752dd142bd85939d840393c4cd8421f784.tar.lz
guile-email-7a4f28752dd142bd85939d840393c4cd8421f784.zip
build-aux: Read emails one by one from mbox corpora.
Reading emails one by one avoids allocating memory for a list of
emails.

* build-aux/test-corpus.scm.in (read-next-email-in-mbox): New function.
(test-corpus): Use port-transduce to read emails one by one.
-rw-r--r--build-aux/test-corpus.scm.in9
1 files changed, 7 insertions, 2 deletions
diff --git a/build-aux/test-corpus.scm.in b/build-aux/test-corpus.scm.in
index 9e66132..2bf7a0a 100644
--- a/build-aux/test-corpus.scm.in
+++ b/build-aux/test-corpus.scm.in
@@ -62,6 +62,10 @@ parse-email fails to fail directory."
                                  index)
     (cut put-bytevector <> email)))
 
+(define read-next-email-in-mbox
+  (@@ (email email)
+      read-next-email-in-mbox))
+
 (define (test-corpus corpus)
   "Test CORPUS, a directory containing mbox files."
   (for-each (lambda (mbox)
@@ -69,7 +73,7 @@ parse-email fails to fail directory."
                 (display (format "~a~%" mbox-path))
                 (call-with-input-file mbox-path
                   (lambda (port)
-                    (list-transduce (compose (tenumerate)
+                    (port-transduce (compose (tenumerate)
                                              (tmap (match-lambda
                                                      ((index . bv)
                                                       (catch #t
@@ -78,7 +82,8 @@ parse-email fails to fail directory."
                                                         (lambda _
                                                           (write-failed-email corpus mbox index bv)))))))
                                     (const #t)
-                                    (mbox->emails port))))))
+                                    read-next-email-in-mbox
+                                    port)))))
             (directory-files corpus)))
 
 ;; If fail directory exists, delete its contents. Else, create it.