277 lines
7.8 KiB
Racket
277 lines
7.8 KiB
Racket
(require
|
|
mzlib/etc
|
|
mzlib/list
|
|
mzlib/match
|
|
"../alignment.rkt"
|
|
"test-macro.rkt")
|
|
|
|
;;los-equal? ((listof rect?) (listof rect?) . -> . boolean?)
|
|
;;tests the equality of the list of structures
|
|
(define (los-equal? a b)
|
|
(equal?
|
|
(map rect->list a)
|
|
(map rect->list b)))
|
|
|
|
;;rect->list (rect? . -> . vector?)
|
|
;;a vector of the fields in the rect
|
|
(define rect->list
|
|
(match-lambda
|
|
[($ rect ($ dim x width stretchable-width?) ($ dim y height stretchable-height?))
|
|
(list x width stretchable-width? y height stretchable-height?)]))
|
|
|
|
;;empty pasteboard
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 100 100 empty)
|
|
empty)
|
|
|
|
;;empty pasteboard
|
|
(test
|
|
los-equal?
|
|
(align 'horizontal 100 100 empty)
|
|
empty)
|
|
|
|
;;one unstretchable snip
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
100 100
|
|
(list (make-rect (make-dim 0 10 false)
|
|
(make-dim 0 10 false))))
|
|
(list (make-rect (make-dim 0 10 false)
|
|
(make-dim 0 10 false))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'horizontal
|
|
100 100
|
|
(list (make-rect (make-dim 0 10 false)
|
|
(make-dim 0 10 false))))
|
|
(list (make-rect (make-dim 0 10 false)
|
|
(make-dim 0 10 false))))
|
|
|
|
;;one stretchable snip
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
100 100
|
|
(list (make-rect (make-dim 0 10 true)
|
|
(make-dim 0 10 true))))
|
|
(list (make-rect (make-dim 0 100 true)
|
|
(make-dim 0 100 true))))
|
|
|
|
;;two stretchable snips
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
10
|
|
10
|
|
(list
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))))
|
|
(list
|
|
(make-rect (make-dim 0 10 true)
|
|
(make-dim 0 5 true))
|
|
(make-rect (make-dim 0 10 true)
|
|
(make-dim 5 5 true))))
|
|
|
|
;;three stretchable, one too big
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
50 100
|
|
(list (make-rect (make-dim 0 0 true)
|
|
(make-dim 0 50 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))))
|
|
(list (make-rect (make-dim 0 50 true)
|
|
(make-dim 0 50 true))
|
|
(make-rect (make-dim 0 50 true)
|
|
(make-dim 50 25 true))
|
|
(make-rect (make-dim 0 50 true)
|
|
(make-dim 75 25 true))))
|
|
|
|
;;three stetchable, one too big, and an unstetchable
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
50 100
|
|
(list (make-rect (make-dim 0 0 true)
|
|
(make-dim 0 50 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 50 false)
|
|
(make-dim 0 10 false))))
|
|
(list (make-rect (make-dim 0 50 true)
|
|
(make-dim 0 50 true))
|
|
(make-rect (make-dim 0 50 true)
|
|
(make-dim 50 20 true))
|
|
(make-rect (make-dim 0 50 true)
|
|
(make-dim 70 20 true))
|
|
(make-rect (make-dim 0 50 false)
|
|
(make-dim 90 10 false))))
|
|
|
|
;;failure from test-suite frame
|
|
;;wrong answer given was (list (make-rect 0 0 335.0 10 #t))
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
335.0
|
|
563.0
|
|
(list
|
|
(make-rect (make-dim 0 10.0 #t)
|
|
(make-dim 0 10.0 #t))))
|
|
(list (make-rect (make-dim 0 335.0 true)
|
|
(make-dim 0 563.0 true))))
|
|
|
|
;;sort of like the previous failed test but with a nonsizable snip
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
563.0
|
|
335.0
|
|
(list
|
|
(make-rect (make-dim 0 10.0 #t)
|
|
(make-dim 0 10.0 #t))
|
|
(make-rect (make-dim 0 10.0 false)
|
|
(make-dim 0 10.0 false))))
|
|
(list (make-rect (make-dim 0 563.0 true)
|
|
(make-dim 0 325.0 true))
|
|
(make-rect (make-dim 0 10.0 false)
|
|
(make-dim 325.0 10.0 false))))
|
|
|
|
;;something that requires a little modulo in division
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
10
|
|
10
|
|
(list
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))
|
|
(make-rect (make-dim 0 0 true)
|
|
(make-dim 0 0 true))))
|
|
(list (make-rect (make-dim 0 10 true)
|
|
(make-dim 0 4 true))
|
|
(make-rect (make-dim 0 10 true)
|
|
(make-dim 4 3 true))
|
|
(make-rect (make-dim 0 10 true)
|
|
(make-dim 7 3 true))))
|
|
|
|
;; 1 snip only stretches in off dimention
|
|
(test
|
|
los-equal?
|
|
(align 'vertical
|
|
100
|
|
400
|
|
(list
|
|
(make-rect (make-dim 0 10 true)
|
|
(make-dim 0 30 false))))
|
|
(list (make-rect (make-dim 0 100 true)
|
|
(make-dim 0 30 false))))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; The following examples of usage were taken from the test-suite tool and turned into test cases ;;
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 563.0 335.0 (list))
|
|
empty)
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 563.0 335.0
|
|
(list (make-rect (make-dim 0 241 #t) (make-dim 0 114 #f))))
|
|
(list (make-rect (make-dim 0 563.0 #t) (make-dim 0 114 #f))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 551.0 102.0
|
|
(list (make-rect (make-dim 0 34 #t) (make-dim 0 47 #t))
|
|
(make-rect (make-dim 0 231 #t) (make-dim 0 57 #t))))
|
|
(list (make-rect (make-dim 0 551.0 #t) (make-dim 0 47 #t))
|
|
(make-rect (make-dim 0 551.0 #t) (make-dim 47 57 #t))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 539.0 35.0
|
|
(list (make-rect (make-dim 0 24 #f) (make-dim 0 13 #f))
|
|
(make-rect (make-dim 0 11 #f) (make-dim 0 24 #f))))
|
|
(list (make-rect (make-dim 0 24 #f) (make-dim 0 13 #f))
|
|
(make-rect (make-dim 0 11 #f) (make-dim 13 24 #f))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'horizontal 539.0 45.0
|
|
(list (make-rect (make-dim 0 65 #t) (make-dim 0 47 #t))
|
|
(make-rect (make-dim 0 48 #t) (make-dim 0 47 #t))
|
|
(make-rect (make-dim 0 63 #t) (make-dim 0 47 #t))
|
|
(make-rect (make-dim 0 45 #f) (make-dim 0 44 #f))))
|
|
(list
|
|
(make-rect (make-dim 0 165.0 true) (make-dim 0 45.0 true))
|
|
(make-rect (make-dim 165.0 165.0 true) (make-dim 0 45.0 true))
|
|
(make-rect (make-dim 330.0 164.0 true) (make-dim 0 45.0 true))
|
|
(make-rect (make-dim 494.0 45 false) (make-dim 0 44 false))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 153.0 33.0
|
|
(list (make-rect (make-dim 0 55 #f) (make-dim 0 13 #f))
|
|
(make-rect (make-dim 0 11 #f) (make-dim 0 24 #f))))
|
|
(list
|
|
(make-rect (make-dim 0 55 false) (make-dim 0 13 false))
|
|
(make-rect (make-dim 0 11 false) (make-dim 13 24 false))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 153.0 33.0
|
|
(list (make-rect (make-dim 0 38 #f) (make-dim 0 13 #f))
|
|
(make-rect (make-dim 0 11 #f) (make-dim 0 24 #f))))
|
|
(list
|
|
(make-rect (make-dim 0 38 false) (make-dim 0 13 false))
|
|
(make-rect (make-dim 0 11 false) (make-dim 13 24 false))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 152.0 33.0
|
|
(list (make-rect (make-dim 0 26 #f) (make-dim 0 13 #f))
|
|
(make-rect (make-dim 0 53 #f) (make-dim 0 24 #f))))
|
|
(list
|
|
(make-rect (make-dim 0 26 false) (make-dim 0 13 false))
|
|
(make-rect (make-dim 0 53 false) (make-dim 13 24 false))))
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 0 0 empty)
|
|
empty)
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 4 0 empty)
|
|
empty)
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'vertical 0 3 empty)
|
|
empty)
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'horizontal 35 1 empty)
|
|
empty)
|
|
|
|
(test
|
|
los-equal?
|
|
(align 'horizontal 0 0
|
|
(list (make-rect (make-dim 0 4 #f) (make-dim 0 5 #f))))
|
|
(list (make-rect (make-dim 0 4 #f) (make-dim 0 5 #f))))
|