Closed gambiteer closed 2 months ago
All these should throw an error:
> chibi-scheme > (import (srfi 231)) > (array-tile (make-array (make-interval '#(4)) list) '#(#(0 3 0 -1 2))) #<Array 140234477650720> > (array-tile (make-array (make-interval '#(0)) list) '#(2)) #<Array 140234472000192> > (array-tile (make-array (make-interval '#(0)) list) '#(#())) #<Array 140234472321024>
I admit, the conditions on the scale factors is perhaps too complicated, but here's a fix all the same:
diff --git a/lib/srfi/231/transforms.scm b/lib/srfi/231/transforms.scm index 0e4bb915..392c6230 100644 --- a/lib/srfi/231/transforms.scm +++ b/lib/srfi/231/transforms.scm @@ -159,9 +159,15 @@ sizes))) (assert (vector-every (lambda (s len) - (if (exact-integer? s) - (positive? s) - (= (vector-fold + 0 s) len))) + (if (zero? len) + (and (vector? s) + (not (zero? (vector-length s))) + (vector-every zero? s)) + (or (and (exact-integer? s) + (positive? s)) + (and (vector? s) + (not (vector-any negative? s)) + (= (vector-fold + 0 s) len))))) sizes (interval-widths (array-domain array)))) (let ((domain (make-interval
All these should throw an error:
I admit, the conditions on the scale factors is perhaps too complicated, but here's a fix all the same: