define method main (u :: <U>, d :: <D>,
      b :: <B>, m :: <M>, t :: <T>) => ()
  format-out("-- first test suite\n");
  cv(u,t);
  cv(u,m);
  cv(u,b);
  format-out("Dylan error: No applicable method,
    applying {<generic-function>: ctv (<object>, <object>)
              => (#rest <object>)} to #[{<u>}, {<t>}].\n");
  //ctv(u,t);
  format-out("Dylan error: No applicable method,
    applying {<generic-function>: ctv (<object>, <object>)
              => (#rest <object>)} to #[{<u>}, {<m>}].\n");
  //ctv(u,m);
  ctv(u,b);
  format-out("-- second test suite\n");
  cv(d,t);
  cv(d,m);
  cv(d,b);
  format-out("Dylan error: No applicable method,
    applying {<generic-function>: ctv (<object>, <object>)
              => (#rest <object>)} to #[{<d>}, {<t>}].\n");
  //ctv(d,t);
  ctv(d,m);
  ctv(d,b);
  format-out("-- third test suite\n");
  u := d;
  cv(u,t);
  cv(u,m);
  cv(u,b);
  format-out("Dylan error: No applicable method,
    applying {<generic-function>: ctv (<object>, <object>)
              => (#rest <object>)} to #[{<d>}, {<t>}].\n");
  //ctv(u,t);
  ctv(u,m);
  ctv(u,b);
end method main;

define class <T> (<object>) end class <T>; define class <M> (<T>) end class
<M>; define class <B> (<M>) end class <B>;

define class <U> (<object>) end class <U>; define method cv(u :: <U>, t :: <T>)
  format-out("cv(T) in U\n");
end method; define method ctv(u :: <U>, t :: <B>)
  format-out("ctv(B) in U\n");
end method;

define class <D> (<U>) end class <D>; define method cv(d :: <D>, m :: <M>)
  format-out("cv(M) in D\n");
end method; define method ctv(d :: <D>, m :: <M>)
  format-out("ctv(M) in D\n");
end method;

begin
  main(make(<U>),make(<D>),make(<B>),make(<M>), make(<T>));
end;

\\ run
-- first test suite
cv(T) in U
cv(T) in U
cv(T) in U

Dylan error: No applicable method, applying {<generic-function>:ctv (<object>,
<object>) => (#rest <object>)} to #[{<u>}, {<t>}].

Dylan error: No applicable method, applying {<generic-function>: ctv (<object>,
<object>) => (#rest <object>)} to #[{<u>}, {<m>}].

ctv(B) in U

-- second test suite
cv(T) in U
cv(M) in D
cv(M) in D

Dylan error: No applicable method, applying {<generic-function>: ctv (<object>,
<object>) => (#rest <object>)} to #[{<d>}, {<t>}].

ctv(M) in D
ctv(M) in D

-- third test suite
cv(T) in U
cv(M) in D
cv(M) in D

Dylan error: No applicable method, applying {<generic-function>: ctv (<object>,
<object>) => (#rest <object>)} to #[{<d>}, {<t>}].

ctv(M) in D
ctv(M) in D