tests/2htdp/image.ss
#lang scheme
(require (planet cce/scheme:7/planet)
         (prefix-in mz: 2htdp/image)
         (prefix-in ty: (this-package-in 2htdp/image))
         test-engine/scheme-tests)

(define-namespace-anchor a)

(define (eval-with modname)
  (let ((ns (make-base-empty-namespace)))
    ;; Removing this expression results in error:
    ;; dynamic-require: unknown module: '#%mred-kernel
    (namespace-attach-module (namespace-anchor->namespace a)
                             modname
                             ns)   
    (parameterize ((current-namespace ns))
      (namespace-require 'scheme)
      (namespace-require modname)
      (namespace-require 'lang/posn)      
      (let ((ns (current-namespace)))
        (λ (x) (eval x ns))))))

(define-syntax-rule (check-sames* e ...)
  (begin
    (define f 
      (eval-with '2htdp/image))
    (define g 
      (eval-with `(planet ,(this-package-version-symbol 2htdp/image))))
    (check-expect (f 'e) (g 'e)) ...))

(check-sames*
 (circle 30 "outline" "red")
 (circle 20 "solid" "blue")
 (ellipse 40 20 "outline" "black")
 (ellipse 20 40 "solid" "blue")
 (triangle 40 "solid" "tan")
 (right-triangle 36 48 "solid" "black")
 (isosceles-triangle 200 170 "solid" "seagreen")
 (isosceles-triangle 60 30 "solid" "aquamarine")
 (isosceles-triangle 60 330 "solid" "lightseagreen")
 (square 40 "solid" "slateblue")
 (square 50 "outline" "darkmagenta")
 (rectangle 40 20 "outline" "black")
 (rectangle 20 40 "solid" "blue")
 (rhombus 40 45 "solid" "magenta")
 (rhombus 80 150 "solid" "mediumpurple")
 (regular-polygon 50 3 "outline" "red")
 (regular-polygon 40 4 "outline" "blue")
 (regular-polygon 20 8 "solid" "red")
 (star 40 "solid" "gray")
 (star-polygon 40 5 2 "solid" "seagreen")
 (star-polygon 40 7 3 "outline" "darkred")
 (star-polygon 20 10 3 "solid" "cornflowerblue")
 (polygon (list (make-posn 0 0)
                (make-posn -10 20)
                (make-posn 60 0)
                (make-posn -10 -20))
          "solid"
          "burlywood")
 
 (polygon (list (make-posn 0 0)
                (make-posn 0 40)
                (make-posn 20 40)
                (make-posn 20 60)
                (make-posn 40 60)
                (make-posn 40 20)
                (make-posn 20 20)
                (make-posn 20 0))
          "solid"
          "plum")

 (underlay
  (rectangle 80 80 "solid" "mediumseagreen")
  (polygon
   (list (make-posn 0 0)
         (make-posn 50 0)
         (make-posn 0 50)
         (make-posn 50 50))
   "outline"
   (make-pen "darkslategray" 10 "solid" "round" "round")))
 
 (underlay
  (rectangle 90 80 "solid" "mediumseagreen")
  (polygon
   (list (make-posn 0 0)
         (make-posn 50 0)
         (make-posn 0 50)
         (make-posn 50 50))
   "outline"
   (make-pen "darkslategray" 10 "solid" "projecting" "miter")))
 
 
 (add-line (ellipse 40 40 "outline" "maroon")
           0 40 40 0 "maroon") 
 (add-line (rectangle 40 40 "solid" "gray")           
           -10 50 50 -10 "maroon")
 
 (add-line
  (rectangle 100 100 "solid" "darkolivegreen")
  25 25 75 75
  (make-pen "goldenrod" 30 "solid" "round" "round"))
 
 (add-curve (rectangle 100 100 "solid" "black")
            20 20 0 1/3
            80 80 0 1/3
            "white") 
 (add-curve (rectangle 100 100 "solid" "black")
            20 20 0 1
            80 80 0 1
            "white")
 
 (add-curve
  (add-curve
   (rectangle 40 100 "solid" "black")
   20 10 180 1/2
   20 90 180 1/2
   (make-pen "white" 4 "solid" "round" "round"))
  20 10 0 1/2
  20 90 0 1/2
  (make-pen "white" 4 "solid" "round" "round"))
 
 (add-curve (rectangle 100 100 "solid" "black")
            -20 -20 0 1
            120 120 0 1
            "red")
 
 (text "Hello" 24 "olive")
 (text "Goodbye" 36 "indigo")
 (text/font "Hello" 24 "olive"
            "Gill Sans" 'swiss 'normal 'bold #f)
 (text/font "Goodbye" 18 "indigo"
            #f 'modern 'italic 'normal #f)
 (text/font "not really a link" 18 "blue"
            #f 'roman 'normal 'normal #t)
 #;(bitmap icons/stop-16x16.png)
 #;(bitmap icons/b-run.png)
 (overlay (rectangle 30 60 "solid" "orange")
          (ellipse 60 30 "solid" "purple"))
 (overlay (ellipse 10 10 "solid" "red")
          (ellipse 20 20 "solid" "black")
          (ellipse 30 30 "solid" "red")
          (ellipse 40 40 "solid" "black")
          (ellipse 50 50 "solid" "red")
          (ellipse 60 60 "solid" "black")) 
 (overlay (regular-polygon 20 5 "solid" (make-color  50  50 255))
          (regular-polygon 26 5 "solid" (make-color 100 100 255))
          (regular-polygon 32 5 "solid" (make-color 150 150 255))
          (regular-polygon 38 5 "solid" (make-color 200 200 255))
          (regular-polygon 44 5 "solid" (make-color 250 250 255)))
 (overlay/align "left" "middle"
                (rectangle 30 60 "solid" "orange")
                (ellipse 60 30 "solid" "purple"))
 (overlay/align "right" "bottom"
                (rectangle 20 20 "solid" "silver")
                (rectangle 30 30 "solid" "seagreen")
                (rectangle 40 40 "solid" "silver")
                (rectangle 50 50 "solid" "seagreen"))
 (overlay/xy (rectangle 20 20 "outline" "black")
             20 0
             (rectangle 20 20 "outline" "black"))
 (overlay/xy (rectangle 20 20 "solid" "red")
             20 20
             (rectangle 20 20 "solid" "black"))
 (overlay/xy (rectangle 20 20 "solid" "red")
             -20 -20
             (rectangle 20 20 "solid" "black"))
 (overlay/xy
  (overlay/xy (ellipse 40 40 "outline" "black")
              10
              15
              (ellipse 10 10 "solid" "forestgreen"))
  20
  15
  (ellipse 10 10 "solid" "forestgreen"))
 
 (underlay (rectangle 30 60 "solid" "orange")
           (ellipse 60 30 "solid" "purple"))
 (underlay (ellipse 10 60 "solid" "red")
           (ellipse 20 50 "solid" "black")
           (ellipse 30 40 "solid" "red")
           (ellipse 40 30 "solid" "black")
           (ellipse 50 20 "solid" "red")
           (ellipse 60 10 "solid" "black"))
 (underlay/align "left" "middle"
                 (rectangle 30 60 "solid" "orange")
                 (ellipse 60 30 "solid" "purple"))
 (underlay/align "right" "top"
                 (rectangle 50 50 "solid" "seagreen")
                 (rectangle 40 40 "solid" "silver")
                 (rectangle 30 30 "solid" "seagreen")
                 (rectangle 20 20 "solid" "silver"))
 (underlay/xy (rectangle 20 20 "outline" "black")
              20 0
              (rectangle 20 20 "outline" "black"))
 (underlay/xy (rectangle 20 20 "solid" "red")
              20 20
              (rectangle 20 20 "solid" "black"))
 (underlay/xy (rectangle 20 20 "solid" "red")
              -20 -20
              (rectangle 20 20 "solid" "black"))
 (underlay/xy
  (underlay/xy (ellipse 40 40 "solid" "gray")
               10
               15
               (ellipse 10 10 "solid" "forestgreen"))
  20
  15
  (ellipse 10 10 "solid" "forestgreen"))
 
 (beside (ellipse 20 70 "solid" "gray")
         (ellipse 20 50 "solid" "darkgray")
         (ellipse 20 30 "solid" "dimgray")
         (ellipse 20 10 "solid" "black"))
 (beside/align "bottom"
               (ellipse 20 70 "solid" "lightsteelblue")
               (ellipse 20 50 "solid" "mediumslateblue")
               (ellipse 20 30 "solid" "slateblue")
               (ellipse 20 10 "solid" "navy"))
 (beside/align "top"
               (ellipse 20 70 "solid" "mediumorchid")
               (ellipse 20 50 "solid" "darkorchid")
               (ellipse 20 30 "solid" "purple")
               (ellipse 20 10 "solid" "indigo"))
 (beside/align "baseline"
               (text "ijy" 18 "black")
               (text "ijy" 24 "black"))
 (above (ellipse 70 20 "solid" "gray")
        (ellipse 50 20 "solid" "darkgray")
        (ellipse 30 20 "solid" "dimgray")
        (ellipse 10 20 "solid" "black"))
 (above/align "right"
              (ellipse 70 20 "solid" "gold")
              (ellipse 50 20 "solid" "goldenrod")
              (ellipse 30 20 "solid" "darkgoldenrod")
              (ellipse 10 20 "solid" "sienna"))
 (above/align "left"
              (ellipse 70 20 "solid" "yellowgreen")
              (ellipse 50 20 "solid" "olivedrab")
              (ellipse 30 20 "solid" "darkolivegreen")
              (ellipse 10 20 "solid" "darkgreen"))
 (empty-scene 160 90)
 (place-image
  (triangle 32 "solid" "red")
  24 24
  (rectangle 48 48 "solid" "gray"))
 (place-image
  (triangle 64 "solid" "red")
  24 24
  (rectangle 48 48 "solid" "gray"))
 (place-image
  (circle 4 "solid" "white")
  18 20
  (place-image
   (circle 4 "solid" "white")
   0 6
   (place-image
    (circle 4 "solid" "white")
    14 2
    (place-image
     (circle 4 "solid" "white")
     8 14
     (rectangle 24 24 "solid" "goldenrod")))))

 
 (place-image/align (triangle 48 "solid" "yellowgreen")
                    64 64 "right" "bottom"
                    (rectangle 64 64 "solid" "mediumgoldenrod"))
 (beside
  (place-image/align (circle 8 "solid" "tomato")
                     0 0 "center" "center"
                     (rectangle 32 32 "outline" "black"))
  (place-image/align (circle 8 "solid" "tomato")
                     8 8 "center" "center"
                     (rectangle 32 32 "outline" "black"))
  (place-image/align (circle 8 "solid" "tomato")
                     16 16 "center" "center"
                     (rectangle 32 32 "outline" "black"))
  (place-image/align (circle 8 "solid" "tomato")
                     24 24 "center" "center"
                     (rectangle 32 32 "outline" "black"))
  (place-image/align (circle 8 "solid" "tomato")
                     32 32 "center" "center"
                     (rectangle 32 32 "outline" "black")))
 
 (scene+line (ellipse 40 40 "outline" "maroon")
             0 40 40 0 "maroon")
 (scene+line (rectangle 40 40 "solid" "gray")
             -10 50 50 -10 "maroon")
 
 (scene+line
  (rectangle 100 100 "solid" "darkolivegreen")
  25 25 100 100
  (make-pen "goldenrod" 30 "solid" "round" "round"))
 
 (scene+curve (rectangle 100 100 "solid" "black")
              20 20 0 1/3
              80 80 0 1/3
              "white")
 (scene+curve (rectangle 100 100 "solid" "black")
              20 20 0 1
              80 80 0 1
              "white")
 (scene+curve
  (add-curve
   (rectangle 40 100 "solid" "black")
   20 10 180 1/2
   20 90 180 1/2
   "white")
  20 10 0 1/2
  20 90 0 1/2
  "white")
 (scene+curve (rectangle 100 100 "solid" "black")
              -20 -20 0 1
              120 120 0 1
              "red")
 (rotate 45 (ellipse 60 20 "solid" "olivedrab"))
 (rotate 5 (rectangle 50 50 "outline" "black"))
 (rotate 45
         (beside/align
          "center"
          (rectangle 40 20 "solid" "darkseagreen")
          (rectangle 20 100 "solid" "darkseagreen")))
 (scale 2 (ellipse 20 30 "solid" "blue"))
 (ellipse 40 60 "solid" "blue")
 (scale/xy 3
           2
           (ellipse 20 30 "solid" "blue"))
 (ellipse 60 60 "solid" "blue")
 (crop 0 0 40 40 (circle 40 "solid" "chocolate"))
 (crop 40 60 40 60 (ellipse 80 120 "solid" "dodgerblue"))
 (above
  (beside (crop 40 40 40 40 (circle 40 "solid" "palevioletred"))
          (crop 0 40 40 40 (circle 40 "solid" "lightcoral")))
  (beside (crop 40 0 40 40 (circle 40 "solid" "lightcoral"))
          (crop 0 0 40 40 (circle 40 "solid" "palevioletred"))))
 (frame (ellipse 20 20 "outline" "black"))
 (beside
  (ellipse 20 70 "solid" "lightsteelblue")
  (frame (ellipse 20 50 "solid" "mediumslateblue"))
  (ellipse 20 30 "solid" "slateblue")
  (ellipse 20 10 "solid" "navy"))
 
 (image-width (ellipse 30 40 "solid" "orange"))
 (image-width (circle 30 "solid" "orange"))
 (image-width (beside (circle 20 "solid" "orange")
                      (circle 20 "solid" "purple")))
 (image-height (ellipse 30 40 "solid" "orange"))
 (image-height (circle 30 "solid" "orange"))
 (image-height (overlay (circle 20 "solid" "orange")
                        (circle 30 "solid" "purple")))
 (image-baseline (text "Hello" 24 "black"))
 (image-height (text "Hello" 24 "black"))
 (image-baseline (rectangle 100 100 "solid" "black"))
 (image-height (rectangle 100 100 "solid" "black"))
 
 )
 
 
 (test)