Object subclass: #T
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'cocon-squeak'!

T subclass: #M
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'cocon-squeak'!

M subclass: #B
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'cocon-squeak'!

Object subclass: #U
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'cocon-squeak'!

!U methodsFor: 'services' stamp: 'ab 5/23/2001 14:14'! ctv: aB
    "an attempt of contravariant definition !!"

    Transcript show: 'ctv(B) in U';cr! !

!U methodsFor: 'services' stamp: 'ab 5/23/2001 14:13'! cv: aT
    "an attempt of covariant definition !!"

    Transcript show: 'cv(T) in U';cr! !

"-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- "!

U class
    instanceVariableNames: ''!

!U class methodsFor: 'testing' stamp: 'ab 5/23/2001 15:21'! test
    "U test"
    | u d t m b |

    u := U new.
    d := D new.
    t := T new.
    m := M new.
    b := B new.

    Transcript show: '-- first test suite';cr.
    u cv: t.
    u cv: m.
    u cv: b.
    u ctv: t.
    u ctv: m.
    u ctv: b.
    Transcript show: '-- second test suite';cr.
    d cv: t.
    d cv: m.
    d cv: b.
    d ctv: t.
    d ctv: m.
    d ctv: b.
    Transcript show: '-- third test suite';cr.
    u := d.
    u cv: t.
    u cv: m.
    u cv: b.
    u ctv: t.
    u ctv: m.
    u ctv: b.
! !

U subclass: #D
    instanceVariableNames: ''
    classVariableNames: ''
    poolDictionaries: ''
    category: 'cocon-squeak'!

!D methodsFor: 'services' stamp: 'ab 5/23/2001 15:22'! ctv: aM
    "an attempt of contravariant redefinition !!"

    Transcript show: 'ctv(M) in D';cr! !

!D methodsFor: 'services' stamp: 'ab 5/23/2001 15:22'! cv: aM
    "an attempt of covariant redefinition !!"

    Transcript show: 'cv(M) in D';cr! !

"run"

-- first test suite

cv(T) in U
cv(T) in U
cv(T) in U
ctv(B) in U
ctv(B) in U
ctv(B) in U

-- second test suite

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

-- third test suite

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