Default equality for list->lset, more testing.

This commit is contained in:
Dominik Pantůček 2023-04-07 22:44:37 +02:00
parent ba50349f30
commit ed8a11a5d8

View file

@ -132,13 +132,16 @@
(cons (car els) res)))))))
;; Converts given list to a set with unique members
(define (list->lset lst equality?)
(let loop ((lst lst)
(ls (make-lset equality?)))
(if (null? lst)
ls
(loop (cdr lst)
(lset-add ls (car lst))))))
(define (list->lset lst . equality?)
(let ((equality? (if (null? equality?)
equal?
(car equality?))))
(let loop ((lst lst)
(ls (make-lset equality?)))
(if (null? lst)
ls
(loop (cdr lst)
(lset-add ls (car lst)))))))
;; Converts the list set to plain list (effectively returning the
;; internal list)
@ -192,6 +195,28 @@
(lset-member?
(lset-add (make-lset string=?) "test")
"not"))
(test-equal? lset-count
(lset-count (make-lset))
0)
(test-equal? lset-count
(lset-count (lset-add (make-lset) 1))
1)
(test-equal? lset-count
(lset-count (lset-add (make-lset) 1 2 3 1 2))
3)
(test-false lset-remove
(lset-member?
(lset-remove (lset-add (make-lset) 1 2 3) 2)
2))
(test-equal? list->lset
(lset-count
(list->lset '(1 2 3 1 2)))
3)
(test-equal? lset->list
(length
(lset->list
(list->lset '(1 2 3 1 2))))
3)
))
)