aboutsummaryrefslogtreecommitdiffstats
path: root/tests/srfi-113-sets.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-02-15 22:57:35 -0500
committerGravatar Peter McGoron 2025-02-15 22:57:35 -0500
commit4f26003802467bc495847785cf529b806e5d5272 (patch)
tree6d217731d30bf4df90e52c3bb3d7587aa7c94cab /tests/srfi-113-sets.scm
parentnode->reverse-order-generator (diff)
start testing SRFI 113 tests
Diffstat (limited to '')
-rw-r--r--tests/srfi-113-sets.scm71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/srfi-113-sets.scm b/tests/srfi-113-sets.scm
new file mode 100644
index 0000000..edb6334
--- /dev/null
+++ b/tests/srfi-113-sets.scm
@@ -0,0 +1,71 @@
+#| Copyright 2024 Peter McGoron
+ |
+ | Licensed under the Apache License, Version 2.0 (the "License");
+ | you may not use this file except in compliance with the License.
+ | You may obtain a copy of the License at
+ |
+ | http://www.apache.org/licenses/LICENSE-2.0
+ |
+ | Unless required by applicable law or agreed to in writing, software
+ | distributed under the License is distributed on an "AS IS" BASIS,
+ | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ | See the License for the specific language governing permissions and
+ | limitations under the License.
+ |#
+
+(import (mcgoron weight-balanced-trees srfi 113 sets)
+ (srfi 252)
+ (srfi 64))
+
+(define (orderable-generator)
+ ;; Return a value that can be ordered in an obvious way.
+ (gsampling #;(boolean-generator)
+ (real-generator)
+ #;(char-generator)
+ #;(string-generator)
+ #;(bytevector-generator)))
+
+(test-group "multiple element set using `set` procedure"
+ (define (multiple-element-set lst)
+ (let* ((new-set (apply set (make-default-comparator) lst))
+ (set-as-list (set->list new-set)))
+ (test-assert "set?" (set? new-set))
+ (test-assert "empty?" (if (null? lst)
+ (set-empty? new-set)
+ (not (set-empty? new-set))))
+ ;; The new-set will remove duplicates.
+ (test-assert "length?" (<= (set-size new-set) (length lst)))
+ (test-assert "subset of inserted" (lset<= equal? set-as-list lst))))
+ (test-property multiple-element-set
+ (list (list-generator-of (orderable-generator)))))
+
+(define (remove-duplicates generator)
+ (gmap (lambda (lst)
+ (let ((cmp (make-default-comparator)))
+ (let loop ((seen '())
+ (lst lst))
+ (cond
+ ((null? lst) seen)
+ ((member (car lst)
+ seen
+ (cut =? cmp <> <>))
+ (loop seen (cdr lst)))
+ (else (loop (cons (car lst) seen) (cdr lst)))))))
+ generator))
+
+(test-group "multiple element set using `set` procedure, unique elements"
+ (define (multiple-element-set lst)
+ (let* ((new-set (apply set (make-default-comparator) lst))
+ (set-as-list (set->list new-set)))
+ (test-assert "set?" (set? new-set))
+ (test-assert "empty?" (if (null? lst)
+ (set-empty? new-set)
+ (not (set-empty? new-set))))
+ (dynamic-property-set! 'set set-as-list)
+ (dynamic-property-set! 'list lst)
+ (test-equal "length?" (set-size new-set) (length lst))
+ (test-assert "exactly inserted" (lset= equal? set-as-list lst))))
+ (test-property multiple-element-set
+ (list (remove-duplicates
+ (list-generator-of
+ (orderable-generator))))))