From b5c705d59f2e26eecd58ad59a9d0cee08e5422a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Pant=C5=AF=C4=8Dek?= Date: Fri, 7 Apr 2023 22:36:48 +0200 Subject: [PATCH] Equality predicate optional, start testing. --- src/util-set-list.scm | 47 +++++++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/util-set-list.scm b/src/util-set-list.scm index d4aa170..b7437f3 100644 --- a/src/util-set-list.scm +++ b/src/util-set-list.scm @@ -31,22 +31,28 @@ TAG-LSET make-lset - lset-add - lset-remove + + lset-empty? lset-member? + lset-add + lset-remove + list->lset lset->list lset-merge lset-intersect lset-subtract + + lset-tests! ) (import scheme (chicken string) - (chicken random)) + (chicken random) + testing) ;; Tag used for identifying list sets from this module (define TAG-LSET @@ -64,15 +70,22 @@ "")) ;; Creates new list set using given equality procedure - (define (make-lset equality?) - (list TAG-LSET - (list equality?))) + (define (make-lset . equality?) + (let ((equality? (if (null? equality?) + equal? + (car equality?)))) + (list TAG-LSET + (list equality?)))) ;; Convenience accessors (define lset-meta cadr) (define lset-equality? caadr) (define lset-list cddr) + ;; Returns true if the list set is empty + (define (lset-empty? ls) + (null? (lset-list ls))) + ;; Returns true if given element is in the list (define (lset-member? ls el) (let ((equality? (lset-equality? ls))) @@ -155,20 +168,14 @@ (loop (cdr lst) (lset-remove ls (car lst)))))) + ;; Module self-tests + (define (lset-tests!) + (run-tests + lset + (test-true make-lset/lset-empty? (lset-empty? (make-lset))) + )) + ) (import util-set-list) - -(print TAG-LSET) -(print (make-lset string=?)) -(define ls (make-lset string=?)) -(print ls) -(define ls1 (lset-add ls "a")) -(print ls1) -(define ls2 (lset-add ls1 "a")) -(print ls2) -(define ls3 (lset-add ls2 "b")) -(print ls3) -(define ls4 (lset-remove ls3 "a")) -(print ls4) -(print (list->lset '("asdf" "qwer" "asdf" "xcvv" "asdf" "qwer" "lkjh") string=?)) +(lset-tests!)