diff options
| author | 2025-03-15 18:47:41 -0400 | |
|---|---|---|
| committer | 2025-03-15 18:47:41 -0400 | |
| commit | 2c7927945b1849f1567cc5fa875982e6ee58212f (patch) | |
| tree | deb919191ce4139784b0031a4bbe175e0a737217 /mcgoron | |
| parent | add bulk list operations for set-set operatoins (diff) | |
test bulk set generators
Diffstat (limited to 'mcgoron')
| -rw-r--r-- | mcgoron/weight-balanced-trees/srfi/113/252.scm | 30 | ||||
| -rw-r--r-- | mcgoron/weight-balanced-trees/srfi/113/252.sld | 2 |
2 files changed, 28 insertions, 4 deletions
diff --git a/mcgoron/weight-balanced-trees/srfi/113/252.scm b/mcgoron/weight-balanced-trees/srfi/113/252.scm index 2a9eeab..db8f267 100644 --- a/mcgoron/weight-balanced-trees/srfi/113/252.scm +++ b/mcgoron/weight-balanced-trees/srfi/113/252.scm @@ -13,6 +13,18 @@ | limitations under the License. |# +(define (unique-vector-of cmp element-generator max-vector-length) + (define vector-length-generator + (make-random-integer-generator 0 max-vector-length)) + (lambda () + (generator->vector + (gstate-filter (lambda (element set) + (if (set-contains? set element) + (values #f set) + (values #t (set-adjoin set element)))) + element-generator) + (vector-length-generator)))) + (define default-max-set-size (make-parameter 100)) @@ -26,6 +38,9 @@ element-generator (default-max-set-size))) ((comparator element-generator max-set-size) + (define set-size-generator + (make-random-integer-generator 0 max-set-size)) + (define the-set (set comparator)) (gmap (cut list->set comparator <>) (list-generator-of element-generator max-set-size))))) @@ -50,9 +65,19 @@ (map (cut set-union i-set <>) sets))) (gmap do-intersection (gremove null? - (list-generator-of set-generator + (list-generator-of (gremove set-empty? set-generator) max-num-of-sets)))))) +(define (make-set-disjoint-from-all set other-sets) + ;; Make `set` disjoint from all sets in `other-sets`, except for a set + ;; that is exactly itself (i.e. `eq?`). + (fold (lambda (other-set set) + (if (eq? other-set set) + set + (set-difference set other-set))) + set + other-sets)) + (define disjoint-set-generator-of (case-lambda ((set-generator) @@ -60,8 +85,7 @@ (default-max-number-of-sets))) ((set-generator max-num-of-sets) (gmap (lambda (sets) - (let ((i (apply set-intersection sets))) - (map (cut set-difference <> i) sets))) + (map (cut make-set-disjoint-from-all <> sets) sets)) (gremove null? (list-generator-of set-generator max-num-of-sets)))))) diff --git a/mcgoron/weight-balanced-trees/srfi/113/252.sld b/mcgoron/weight-balanced-trees/srfi/113/252.sld index 07a60f0..7e34a84 100644 --- a/mcgoron/weight-balanced-trees/srfi/113/252.sld +++ b/mcgoron/weight-balanced-trees/srfi/113/252.sld @@ -16,7 +16,7 @@ (define-library (mcgoron weight-balanced-trees srfi 113 252) (import (scheme base) (scheme case-lambda) (mcgoron weight-balanced-trees srfi 113 sets) - (srfi 26) (srfi 128) (srfi 158) (srfi 252)) + (srfi 1) (srfi 26) (srfi 128) (srfi 158) (srfi 194) (srfi 252)) (export default-max-set-size set-generator-of default-max-number-of-sets intersecting-set-generator-of |
