module A = BasicFrame(struct let design = TURTLE end) 
 
 module B = BasicFrame(struct let design = WAVE end) 
 
 module Ap = Rotate(A) 
 
 module App = Rotate(Ap) 
 
 module Bp = Rotate(B) 
 
 module Bpp = Rotate(Bp) 
 
 module A4 = Glue (A) (B) (Ap) (Bp) 
 
 module B4 = Glue (A) (Ap) (B) (Bp) 
 
 module A4p = Rotate(A4) 
 
 module B4p = Rotate(B4) 
 
 module C = Glue (A4) (B4) (A4p) (B4p) 
 
 module D = Glue (C) (Rotate (C)) (Rotate (Rotate (C))) (Rotate (Rotate (Rotate (C)))) 
 
 module E = Glue (Rotate (C)) (Rotate (Rotate (Rotate (C)))) (C) (C) 
 
 
 
 
 let _ = 
 
   if (A.box = BOX (NW, TURTLE)) then print_string "success : #1" else print_string "fail : #1" ; 
 
   print_newline(); 
 
   if (B.box = BOX (NW, WAVE)) then print_string "success : #2" else print_string "fail : #2" ; 
 
   print_newline(); 
 
   if (Ap.box = BOX (NE, TURTLE)) then print_string "success : #3" else print_string "fail : #3" ; 
 
   print_newline(); 
 
   if (App.box = BOX (SE, TURTLE)) then print_string "success : #4" else print_string "fail : #4" ; 
 
   print_newline(); 
 
   if (Bp.box = BOX (NE, WAVE)) then print_string "success : #5" else print_string "fail : #5" ; 
 
   print_newline(); 
 
   if (Bpp.box = BOX (SE, WAVE)) then print_string "success : #6" else print_string "fail : #6" ; 
 
   print_newline(); 
 
   if (A4.box = GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE))) then print_string "success : #7" else print_string "fail : #7" ; 
 
   print_newline(); 
 
   if (B4.box = GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE))) then print_string "success : #8" else print_string "fail : #8" ; 
 
   print_newline(); 
 
   if (A4p.box = GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE))) then print_string "success : #9" else print_string "fail : #9" ; 
 
   print_newline(); 
 
   if (B4p.box = GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE))) then print_string "success : #10" else print_string "fail : #10" ; 
 
   print_newline(); 
 
   if (C.box = GLUED 
 
          (GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE)), 
 
           GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
            GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
             GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE)))) then print_string "success : #11" else print_string "fail : #11" ; 
 
 
   print_newline(); 
 
   if (D.box = GLUED 
 
          (GLUED 
 
             (GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), 
 
                 BOX (NE, WAVE)), 
 
                   GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
                     GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
                        GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE))), 
 
                        GLUED 
 
                          (GLUED (BOX (SE, WAVE), BOX (SW, WAVE), BOX (SE, TURTLE), BOX (SW, TURTLE)), 
 
                           GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
                             GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE)), 
 
                              GLUED (BOX (SW, TURTLE), BOX (SW, WAVE), BOX (SE, TURTLE), BOX (SE, WAVE))), 
 
                               GLUED 
 
                                (GLUED (BOX (SW, WAVE), BOX (NW, TURTLE), BOX (NW, WAVE), BOX (SW, TURTLE)), 
 
                                  GLUED (BOX (NW, TURTLE), BOX (SW, WAVE), BOX (NW, WAVE), BOX (SW, TURTLE)), 
 
                                   GLUED (BOX (SW, TURTLE), BOX (SW, WAVE), BOX (SE, TURTLE), BOX (SE, WAVE)), 
 
                                     GLUED (BOX (SE, WAVE), BOX (SW, WAVE), BOX (SE, TURTLE), BOX (SW, TURTLE))), 
 
                                     GLUED 
 
                                       (GLUED (BOX (NW, TURTLE), BOX (SW, WAVE), BOX (NW, WAVE), BOX (SW, TURTLE)), 
 
                                         GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE)), 
 
                                          GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
                                            GLUED (BOX (SW, WAVE), BOX (NW, TURTLE), BOX (NW, WAVE), BOX (SW, TURTLE)))) 
 
          ) then print_string "success : #12" else print_string "fail : #12" ; 
 
   print_newline(); 
 
   if (E.box = GLUED 
 
          (GLUED 
 
             (GLUED (BOX (SE, WAVE), BOX (SW, WAVE), BOX (SE, TURTLE), 
 
                 BOX (SW, TURTLE)), 
 
                   GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
                     GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE)), 
 
                        GLUED (BOX (SW, TURTLE), BOX (SW, WAVE), BOX (SE, TURTLE), BOX (SE, WAVE))), 
 
                        GLUED 
 
                          (GLUED (BOX (NW, TURTLE), BOX (SW, WAVE), BOX (NW, WAVE), BOX (SW, TURTLE)), 
 
                           GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE)), 
 
                             GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
                              GLUED (BOX (SW, WAVE), BOX (NW, TURTLE), BOX (NW, WAVE), BOX (SW, TURTLE))), 
 
                               GLUED 
 
                                (GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE)), 
 
                                  GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
                                   GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
                                     GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE))), 
 
                                     GLUED 
 
                                       (GLUED (BOX (NW, TURTLE), BOX (NW, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE)), 
 
                                         GLUED (BOX (NW, TURTLE), BOX (NE, TURTLE), BOX (NW, WAVE), BOX (NE, WAVE)), 
 
                                          GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (NE, WAVE), BOX (SE, TURTLE)), 
 
                                            GLUED (BOX (SE, WAVE), BOX (NE, TURTLE), BOX (SE, TURTLE), BOX (NE, WAVE)))) 
 
          ) then print_string "success : #13" else print_string "fail : #13" ; 
 
   print_newline(); 
 
 
 
(*   E.rotate A.box;   (*NOT_GLUED_BOX*)   *) 
 
(*   A.rotate E.box;   (*NON_BASIC_BOX*)   *) 
 
 
 
 |