; test PDB methods that change selection from existing selection ; setup ; Reusing image 10 (define testImage 10) ; Test a selection-changing function ; starting from selection None. ; ; The testFunction takes a "step" arg ; and does not change the selection bounds. ; {none is-empty} yields true ; {none } is not an error (define (test-selection-change-from-none testFunction testImage) ; Starting state: selection none (assert `(pika-selection-none ,testImage)) ; test the testFunction (assert `(,testFunction ,testImage 4 )) ; radius or step ; expect selection is still empty (assert `(= (car (pika-selection-is-empty ,testImage)) 1)) ; expect since there is no selection, the bounds are the entire image (assert `(equal? (cdr (pika-selection-bounds ,testImage)) '(0 0 21 22))) ) (define (test-selection-change-from-all testFunction testImage isIdempotent) ; Starting state: selection all (assert `(pika-selection-all ,testImage)) ; test the testFunction (assert `(,testFunction ,testImage 4 )) ; radius or step (if isIdempotent (begin ; expect selection is still not empty (assert `(= (car (pika-selection-is-empty ,testImage)) 0)) ; expect selection bounds are still entire image (assert `(equal? (cdr (pika-selection-bounds ,testImage)) '(0 0 21 22))))) ) ; test selection methods that change by a pixel amount (test-selection-change-from-none pika-selection-feather testImage) (test-selection-change-from-none pika-selection-grow testImage) (test-selection-change-from-none pika-selection-shrink testImage) (test-selection-change-from-none pika-selection-border testImage) ; feather and grow from all are idempotent (test-selection-change-from-all pika-selection-feather testImage #t) (test-selection-change-from-all pika-selection-grow testImage #t) (test-selection-change-from-all pika-selection-shrink testImage #f) ; shrink from all changes bounds (assert `(equal? (cdr (pika-selection-bounds ,testImage)) '(4 4 17 18))) (test-selection-change-from-all pika-selection-border testImage #f) ; border from all empties the selection (assert `(= (car (pika-selection-is-empty ,testImage)) 1)) ; Effectiveness ; When starting from a typical selection (not empty, not all) ; TODO feather effective? ; Might feather change bounds? ; grow is effective ; bounds are larger ; TODO (assert `(equal? (cdr (pika-selection-bounds ,testImage)) '(0 0 21 22))) ; TODO test flood effective: holes were filled ; Can't do it without knowing how many pixels are selected? ; Knowing bounds is not adequate. ; Simple tests of success (assert `(pika-selection-flood ,testImage)) (assert `(pika-selection-invert ,testImage)) (assert `(pika-selection-sharpen ,testImage)) (assert `(pika-selection-translate ,testImage 4 4)) ; TODO invert none is all and vice versa ; TODO translate effective ; TODO translate by large offset is empty selection ; TODO sharpen is effective at removing antialiasing ; save creates a new channel