diff --git a/module/rnrs/enums.scm b/module/rnrs/enums.scm index 79d341746..e97be46e3 100644 --- a/module/rnrs/enums.scm +++ b/module/rnrs/enums.scm @@ -82,8 +82,8 @@ (enum-set-subset? enum-set-2 enum-set-1))) (define (enum-set-union enum-set-1 enum-set-2) - (if (eq? (enum-set-universe enum-set-1) - (enum-set-universe enum-set-2)) + (if (equal? (enum-set-universe enum-set-1) + (enum-set-universe enum-set-2)) (make-enum-set (enum-set-universe enum-set-1) (lset-union eq? (enum-set-set enum-set-1) @@ -91,8 +91,8 @@ (raise (make-assertion-violation)))) (define (enum-set-intersection enum-set-1 enum-set-2) - (if (eq? (enum-set-universe enum-set-1) - (enum-set-universe enum-set-2)) + (if (equal? (enum-set-universe enum-set-1) + (enum-set-universe enum-set-2)) (make-enum-set (enum-set-universe enum-set-1) (lset-intersection eq? (enum-set-set enum-set-1) @@ -100,8 +100,8 @@ (raise (make-assertion-violation)))) (define (enum-set-difference enum-set-1 enum-set-2) - (if (eq? (enum-set-universe enum-set-1) - (enum-set-universe enum-set-2)) + (if (equal? (enum-set-universe enum-set-1) + (enum-set-universe enum-set-2)) (make-enum-set (enum-set-universe enum-set-1) (lset-difference eq? (enum-set-set enum-set-1) diff --git a/test-suite/tests/r6rs-enums.test b/test-suite/tests/r6rs-enums.test index d91de1c35..4b7d1d72a 100644 --- a/test-suite/tests/r6rs-enums.test +++ b/test-suite/tests/r6rs-enums.test @@ -146,7 +146,13 @@ (set1 ((enum-set-constructor universe) '(a b c))) (set2 ((enum-set-constructor universe) '(d e f))) (union (enum-set-union set1 set2))) - (equal? (enum-set->list union) '(a b c d e f))))) + (equal? (enum-set->list union) '(a b c d e f)))) + + (pass-if "enum-set-union operates on syntactically-generated sets" + (let* ((set1 (make-foo-set foo)) + (set2 (make-foo-set bar)) + (union (enum-set-union set1 set2))) + (equal? (enum-set->list union) '(foo bar))))) (with-test-prefix "enum-set-intersection" (pass-if "&assertion raised on different universes" @@ -170,7 +176,13 @@ (set1 ((enum-set-constructor universe) '(a b c))) (set2 ((enum-set-constructor universe) '(d e f))) (intersection (enum-set-intersection set1 set2))) - (null? (enum-set->list intersection))))) + (null? (enum-set->list intersection)))) + + (pass-if "enum-set-intersection on syntactically-generated sets" + (let* ((set1 (make-foo-set foo bar)) + (set2 (make-foo-set bar baz)) + (intersection (enum-set-intersection set1 set2))) + (equal? (enum-set->list intersection) '(bar))))) (with-test-prefix "enum-set-difference" (pass-if "&assertion raised on different universes" @@ -194,7 +206,13 @@ (set1 ((enum-set-constructor universe) '(a b c))) (set2 ((enum-set-constructor universe) '(a b c d))) (difference (enum-set-difference set1 set2))) - (null? (enum-set->list difference))))) + (null? (enum-set->list difference)))) + + (pass-if "enum-set-difference on syntactically-generated sets" + (let* ((set1 (make-foo-set foo bar baz)) + (set2 (make-foo-set foo baz)) + (difference (enum-set-difference set1 set2))) + (equal? (enum-set->list difference) '(bar))))) (with-test-prefix "enum-set-complement" (pass-if "complement of empty set is universe"