107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
		
		
			
		
	
	
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
| 
								 | 
							
								; 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 <func> is-empty} yields true
							 | 
						||
| 
								 | 
							
								; {none <func>} 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
							 |