From 8526d473c58160fd27b3b668e7329d06a42b7fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Thu, 15 Jun 2023 16:11:36 +0200 Subject: [PATCH] Re-add util-list. --- src/Makefile | 38 ++++++++++++++++-------- src/ansi.scm | 2 +- src/brmember-parser.scm | 2 +- src/brmember.scm | 2 +- src/command-line.scm | 2 +- src/export-wiki-compat.scm | 2 +- src/mailman.scm | 2 +- src/mbase-dir.scm | 2 +- src/mbase.scm | 2 +- src/members-fees.scm | 2 +- src/members-payments.scm | 2 +- src/members-print.scm | 2 +- src/primes.scm | 2 +- src/table-old.scm | 2 +- src/util-list.scm | 61 ++++++++++++++++++++++++++++++++++++++ 15 files changed, 99 insertions(+), 26 deletions(-) create mode 100644 src/util-list.scm diff --git a/src/Makefile b/src/Makefile index 478f534..87b31b3 100644 --- a/src/Makefile +++ b/src/Makefile @@ -117,13 +117,13 @@ UTIL-DICT-LIST-SOURCES=util-dict-list.scm testing.import.scm \ util-dict-list.o: util-dict-list.import.scm util-dict-list.import.scm: $(UTIL-DICT-LIST-SOURCES) -ANSI-SOURCES=ansi.scm testing.import.scm +ANSI-SOURCES=ansi.scm testing.import.scm util-list.import.scm ansi.o: ansi.import.scm ansi.import.scm: $(ANSI-SOURCES) COMMAND-LINE-SOURCES=command-line.scm testing.import.scm \ - util-proc.import.scm + util-proc.import.scm util-list.import.scm command-line.o: command-line.import.scm command-line.import.scm: $(COMMAND-LINE-SOURCES) @@ -132,13 +132,14 @@ MBASE-SOURCES=mbase.scm testing.import.scm util-dict-list.import.scm \ primes.import.scm brmember.import.scm ansi.import.scm \ cal-period.import.scm cal-month.import.scm \ configuration.import.scm progress.import.scm \ - table-old.import.scm mbase-dir.import.scm util-tag.import.scm \ - racket-kwargs.import.scm util-dict-bst.import.scm + table-old.import.scm mbase-dir.import.scm \ + util-tag.import.scm racket-kwargs.import.scm \ + util-dict-bst.import.scm util-list.import.scm mbase.o: mbase.import.scm mbase.import.scm: $(MBASE-SOURCES) -PRIMES-SOURCES=primes.scm testing.import.scm +PRIMES-SOURCES=primes.scm testing.import.scm util-list.import.scm primes.o: primes.import.scm primes.import.scm: $(PRIMES-SOURCES) @@ -146,7 +147,8 @@ primes.import.scm: $(PRIMES-SOURCES) BRMEMBER-SOURCES=brmember.scm util-dict-list.import.scm \ cal-period.import.scm testing.import.scm cal-month.import.scm \ configuration.import.scm primes.import.scm \ - bank-account.import.scm util-tag.import.scm + bank-account.import.scm util-tag.import.scm \ + util-list.import.scm brmember.o: brmember.import.scm brmember.import.scm: $(BRMEMBER-SOURCES) @@ -162,7 +164,8 @@ progress.o: progress.import.scm progress.import.scm: $(PROGRESS-SOURCES) TABLE-OLD-SOURCES=table-old.scm ansi.import.scm testing.import.scm \ - util-string.import.scm racket-kwargs.import.scm + util-string.import.scm racket-kwargs.import.scm \ + util-list.import.scm table-old.o: table-old.import.scm table-old.import.scm: $(TABLE-OLD-SOURCES) @@ -177,7 +180,8 @@ BRMEMBER-PARSER-SOURCES=brmember-parser.scm brmember.import.scm \ testing.import.scm util-dict-list.import.scm \ cal-month.import.scm cal-period.import.scm \ configuration.import.scm util-string.import.scm \ - util-parser.import.scm cal-day.import.scm + util-parser.import.scm cal-day.import.scm \ + util-list.import.scm brmember-parser.o: brmember-parser.import.scm brmember-parser.import.scm: $(BRMEMBER-PARSER-SOURCES) @@ -189,21 +193,22 @@ MEMBERS-PRINT-SOURCES=members-print.scm util-dict-list.import.scm \ bank-account.import.scm members-fees.import.scm \ members-payments.import.scm brmember-format.import.scm \ specification.import.scm cal-format.import.scm \ - util-git.import.scm + util-git.import.scm util-list.import.scm members-print.o: members-print.import.scm members-print.import.scm: $(MEMBERS-PRINT-SOURCES) MEMBERS-FEES-SOURCES=members-fees.scm configuration.import.scm \ brmember.import.scm cal-month.import.scm table-old.import.scm \ - mbase.import.scm specification.import.scm + mbase.import.scm specification.import.scm \ + util-list.import.scm members-fees.o: members-fees.import.scm members-fees.import.scm: $(MEMBERS-FEES-SOURCES) MBASE-DIR-SOURCES=mbase-dir.scm testing.import.scm \ util-dict-list.import.scm brmember.import.scm \ - brmember-parser.import.scm + brmember-parser.import.scm util-list.import.scm mbase-dir.o: mbase-dir.import.scm mbase-dir.import.scm: $(MBASE-DIR-SOURCES) @@ -229,14 +234,15 @@ MEMBERS-PAYMENTS-SOURCES=members-payments.scm bank-account.import.scm \ util-dict-list.import.scm members-fees.import.scm \ cal-period.import.scm configuration.import.scm \ progress.import.scm bank-fio.import.scm \ - specification.import.scm + specification.import.scm util-list.import.scm members-payments.o: members-payments.import.scm members-payments.import.scm: $(MEMBERS-PAYMENTS-SOURCES) EXPORT-WIKI-COMPAT-SOURCES=export-wiki-compat.scm brmember.import.scm \ configuration.import.scm members-payments.import.scm \ - mbase.import.scm util-git.import.scm progress.import.scm + mbase.import.scm util-git.import.scm progress.import.scm \ + util-list.import.scm export-wiki-compat.o: export-wiki-compat.import.scm export-wiki-compat.import.scm: $(EXPORT-WIKI-COMPAT-SOURCES) @@ -248,6 +254,7 @@ environment.import.scm: $(ENVIRONMENT-SOURCES) MAILMAN-SOURCES=mailman.scm progress.import.scm \ util-set-list.import.scm util-io.import.scm \ + util-list.import.scm mailman.o: mailman.import.scm mailman.import.scm: $(MAILMAN-SOURCES) @@ -462,3 +469,8 @@ BOX-DRAWING-SOURCES=box-drawing.scm util-utf8.import.scm \ box-drawing.o: box-drawing.import.scm box-drawing.import.scm: $(BOX-DRAWING-SOURCES) + +UTIL-LIST-SOURCES=util-list.scm testing.import.scm + +util-list.o: util-list.import.scm +util-list.import.scm: $(UTIL-LIST-SOURCES) diff --git a/src/ansi.scm b/src/ansi.scm index 0d94e74..d59e8bc 100644 --- a/src/ansi.scm +++ b/src/ansi.scm @@ -50,7 +50,7 @@ (chicken string) (chicken irregex) (chicken keyword) - srfi-1 + util-list testing) ;; Only basic ANSI colors and bold attribute support. diff --git a/src/brmember-parser.scm b/src/brmember-parser.scm index 5a62606..ba35553 100644 --- a/src/brmember-parser.scm +++ b/src/brmember-parser.scm @@ -36,7 +36,7 @@ (chicken io) (chicken irregex) (chicken string) - srfi-1 + util-list brmember testing util-dict-list diff --git a/src/brmember.scm b/src/brmember.scm index 070260c..d323cc0 100644 --- a/src/brmember.scm +++ b/src/brmember.scm @@ -91,7 +91,7 @@ (chicken irregex) (chicken string) (chicken format) - srfi-1 + util-list util-dict-list testing cal-month diff --git a/src/command-line.scm b/src/command-line.scm index 6d66d7e..8bc5e65 100644 --- a/src/command-line.scm +++ b/src/command-line.scm @@ -40,7 +40,7 @@ (chicken base) (chicken process-context) (chicken format) - srfi-1 + util-list testing util-proc) diff --git a/src/export-wiki-compat.scm b/src/export-wiki-compat.scm index 3e2b5e2..7164159 100644 --- a/src/export-wiki-compat.scm +++ b/src/export-wiki-compat.scm @@ -40,7 +40,7 @@ (chicken pathname) (chicken file) (chicken file posix) - srfi-1 + util-list brmember configuration members-payments diff --git a/src/mailman.scm b/src/mailman.scm index af2c8c8..50476a8 100644 --- a/src/mailman.scm +++ b/src/mailman.scm @@ -59,7 +59,7 @@ (chicken string) (chicken sort) (chicken format) - srfi-1 + util-list progress util-set-list util-io) diff --git a/src/mbase-dir.scm b/src/mbase-dir.scm index eb1876f..07ab84f 100644 --- a/src/mbase-dir.scm +++ b/src/mbase-dir.scm @@ -40,7 +40,7 @@ (chicken file) (chicken format) (chicken irregex) - srfi-1 + util-list testing util-dict-list brmember diff --git a/src/mbase.scm b/src/mbase.scm index 4d4bf0b..c9b7b34 100644 --- a/src/mbase.scm +++ b/src/mbase.scm @@ -65,7 +65,7 @@ (chicken string) (chicken random) (chicken sort) - srfi-1 + util-list testing util-dict-list primes diff --git a/src/members-fees.scm b/src/members-fees.scm index 2a6c12d..a8c90b4 100644 --- a/src/members-fees.scm +++ b/src/members-fees.scm @@ -45,7 +45,7 @@ (chicken base) (chicken format) (chicken sort) - srfi-1 + util-list configuration brmember cal-month diff --git a/src/members-payments.scm b/src/members-payments.scm index e121708..f2ed02c 100644 --- a/src/members-payments.scm +++ b/src/members-payments.scm @@ -46,7 +46,7 @@ (chicken process-context) (chicken pathname) (chicken condition) - srfi-1 + util-list bank-account brmember mbase diff --git a/src/members-print.scm b/src/members-print.scm index d240b61..cbb857d 100644 --- a/src/members-print.scm +++ b/src/members-print.scm @@ -46,7 +46,7 @@ (chicken string) (chicken sort) (chicken format) - srfi-1 + util-list util-dict-list brmember cal-month diff --git a/src/primes.scm b/src/primes.scm index 74c26db..98e2920 100644 --- a/src/primes.scm +++ b/src/primes.scm @@ -35,7 +35,7 @@ (import scheme (chicken base) - srfi-1 + util-list testing) ;; Checks whether given number is prime by checking the remainder of diff --git a/src/table-old.scm b/src/table-old.scm index 518baca..536d194 100644 --- a/src/table-old.scm +++ b/src/table-old.scm @@ -40,7 +40,7 @@ (chicken format) (chicken keyword) (chicken irregex) - srfi-1 + util-list ansi testing util-string diff --git a/src/util-list.scm b/src/util-list.scm new file mode 100644 index 0000000..e6c2393 --- /dev/null +++ b/src/util-list.scm @@ -0,0 +1,61 @@ +;; +;; util-list.scm +;; +;; Various utilities so that no external libraries are needed. +;; +;; ISC License +;; +;; Copyright 2023 Brmlab, z.s. +;; Dominik Pantůček +;; +;; Permission to use, copy, modify, and/or distribute this software +;; for any purpose with or without fee is hereby granted, provided +;; that the above copyright notice and this permission notice appear +;; in all copies. +;; +;; THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL +;; WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED +;; WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE +;; AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +;; CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +;; OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +;; NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +;; CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +;; + +(declare (unit util-list)) + +(module + util-list + ( + filter + util-list-tests! + ) + + (import scheme + (chicken base) + (chicken io) + (chicken process) + testing) + + ;; Returns a list with elements matching pred? predicate. + (define (filter pred? lst) + (let loop ((lst lst) + (res '())) + (if (null? lst) + (reverse res) + (if (pred? (car lst)) + (loop (cdr lst) + (cons (car lst) res)) + (loop (cdr lst) + res))))) + + ;; Performs utils module self-tests. + (define (util-list-tests!) + (run-tests + util-list + (test-equal? filter (filter odd? '(1 2 3 4)) '(1 3)) + (test-equal? filter (filter odd? '(2 4)) '()) + )) + + )