diff options
| author | 2025-01-20 10:15:08 -0500 | |
|---|---|---|
| committer | 2025-01-20 10:17:25 -0500 | |
| commit | 19b86dc0ad2664e16dfae14daa64731f7e536a9a (patch) | |
| tree | e10737eedf6694e8385d85107da9fd3c5c01adcd /tests | |
| parent | set operations (diff) | |
insert and delete
Diffstat (limited to '')
| -rw-r--r-- | tests/run.scm | 93 |
1 files changed, 86 insertions, 7 deletions
diff --git a/tests/run.scm b/tests/run.scm index f9218bc..365fa29 100644 --- a/tests/run.scm +++ b/tests/run.scm @@ -11,6 +11,11 @@ | 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. + |---------------------------------------------- + | This test suite would be better if property tests (and by association + | generators) could take multiple values. As it stands now property + | test generators cannot be correlated without doing a hack like returning + | a vector (which the current implementation does). |# (import r7rs) @@ -18,17 +23,17 @@ (load "random-number-vector.sld") (load "util.sld") -(import (except (mcgoron weight-balanced-trees internal) - every) - (prefix (only (mcgoron weight-balanced-trees internal) - every) - node-) - (mcgoron weight-balanced-trees test util) +(import (mcgoron weight-balanced-trees test util) (mcgoron weight-balanced-trees test random-number-vector) (prefix (only (mcgoron srfi 64) factory) mcgoron-test-) (except (mcgoron srfi 64) factory) (srfi 1) (srfi 26) (srfi 64) (srfi 128) (srfi 132) (srfi 133) - (srfi 158) (srfi 194) (srfi 197) (srfi 252)) + (srfi 158) (srfi 194) (srfi 197) (srfi 252) + (except (mcgoron weight-balanced-trees internal) + every) + (prefix (only (mcgoron weight-balanced-trees internal) + every) + node-)) ;;; ;;;;;;;;;;;;;;;; ;;; Parameters @@ -412,3 +417,77 @@ (list (vector->node-generator) (vector->node-generator)))) +;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;; Update +;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(define (insert elem set) + (update number-comparator + set + elem + (lambda (value) value) + (lambda () + (wb-tree-node elem '() '())))) + +(test-group "update of unordered list is balanced" + (define (insert-unordered lst) + (let ((set (fold insert '() lst))) + (balanced? set))) + + (test-property insert-unordered + (list (list-generator-of + (exact-integer-generator))))) + +(test-group "update of unordered list is subset of list" + (define (subset-of-list lst) + (let ((set (fold insert '() lst))) + (when (verbose) + (dynamic-property-set! 'lst lst) + (dynamic-property-set! 'set (node->in-order-list set))) + (every (cut search number-comparator <> set) lst))) + (parameterize ((verbose #f)) + (test-property subset-of-list + (list (list-generator-of + (exact-integer-generator)))))) + +(test-group "list is subset of update of unordered list" + (define (list-is-subset-of lst) + (let ((set (fold insert '() lst))) + (node-every (cut memq <> lst) set))) + (test-property list-is-subset-of + (list (list-generator-of + (exact-integer-generator))))) + +;;; ;;;;;;;;;;;;;;;; +;;; Delete +;;; ;;;;;;;;;;;;;;;; + +(define (call/difference procedure) + (lambda (lst1 lst2) + (let* ((set1 (fold insert '() lst1)) + (set2 (fold insert '() lst2)) + (diff (difference number-comparator set1 set2)) + (deleted (fold (lambda (elem set) + (when (verbose) + (dynamic-property-set! 'elem elem) + (dynamic-property-set! 'set set)) + (delete number-comparator elem set)) + set1 + lst2))) + (procedure lst1 lst2 diff deleted)))) + +(test-group "delete of two sets is subset of difference" + (define (delete-and-difference lst1 lst2 diff deleted) + (node-every (cut search number-comparator <> diff) deleted)) + (parameterize ((verbose #f)) + (test-property (call/difference delete-and-difference) + (list (list-generator-of (exact-integer-generator)) + (list-generator-of (exact-integer-generator)))))) + +(test-group "difference is subset of delete of two sets" + (define (difference-and-delete lst1 lst2 diff deleted) + (node-every (cut search number-comparator <> deleted) diff)) + (test-property (call/difference difference-and-delete) + (list (list-generator-of (exact-integer-generator)) + (list-generator-of (exact-integer-generator))))) + |
