// Ġ! LANGUAGE : Ġ+ New Inference Ċ // Ġ! DIAG NO ST ICS : Ġ- UNUSED _ VARIABLE Ġ- ASS IGNED _ B UT _ NE VER _ ACC ES SED _ VARIABLE Ġ- UNUSED _ VALUE Ġ- UNUSED _ PARAMETER Ġ- UNUSED _ EXPRESSION Ċ // ĠSKIP _ TXT ĊĊ Ċ // ĠTEST CASE ĠNUMBER : Ġ 1 Ċ // ĠUN EXPECTED ĠBE HAV IO UR Ċ // ĠISS UES : ĠK T - 4 0 0 7 4 Ċ fun Ġcase 1 ( x : ĠAny ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠA 1 Ġ&& Ġx Ġis ĠB 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Subtype < A 1 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < B 1 >( x ) ĊĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" kotlin . Any Ġ& ĠA 1 Ġ& ĠB 1 ") !> x <! > Ġ Ġ// ĠĠ ĠA 1 Ġ& ĠB 1 Ġ& Ġkotlin . Any ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠA 1 Ċ interface ĠB 1 Ċ Ċ // ĠTEST CASE ĠNUMBER : Ġ 2 Ċ fun Ġ< T > Ġcase 2 ( x : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠB 2 Ġ&& Ġx Ġis ĠA 2 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck Subtype < A 2 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < B 2 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < T >( x ) ĊĊĠĠĠĠĠĠĠ Ġx Ġ// NI ĠA 2 Ġ& ĠB 2 Ġ& ĠT Ġ& ĠT !! ĠO I ĠA 2 Ġ& ĠB 2 Ġ& ĠT ĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" T Ġ& ĠB 2 Ġ& ĠA 2 Ġ& ĠT !! ") !> x <! > ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠA 2 Ċ interface ĠB 2 Ċ Ċ // ĠTEST CASE ĠNUMBER : Ġ 3 Ċ fun Ġ< T > Ġcase 3 a ( x : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠA 3 Ġ&& Ġx Ġis ĠB 3 ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck Subtype < A 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < B 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < T >( x ) ĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" T Ġ& ĠA 3 Ġ& ĠB 3 Ġ& ĠT !! ") !> x <! > ĊĠĠĠ Ġ} Ċ } Ċ fun Ġ< T : ĠAny > Ġcase 3 b ( x : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠA 3 Ġ&& Ġx Ġis ĠB 3 ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck Subtype < A 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < B 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < T >( x ) ĊĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" T Ġ& ĠA 3 Ġ& ĠB 3 Ġ& ĠT ") !> x <! > ĊĠĠĠ Ġ} Ċ } Ċ fun Ġ< T : ĠAny ?> Ġcase 3 c ( x : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠA 3 Ġ&& Ġx Ġis ĠB 3 ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcheck Subtype < A 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < B 3 >( x ) ĊĠĠĠĠĠĠĠ Ġcheck Subtype < T >( x ) ĊĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" T Ġ& ĠA 3 Ġ& ĠB 3 Ġ& ĠT !! ") !> x <! > ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠB 3 Ċ interface ĠA 3 Ċ Ċ // ĠTEST CASE ĠNUMBER : Ġ 4 Ċ Ċ fun Ġcase 4 ( x : ĠC ?) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠB 4 Ġ&& Ġ<! USE LESS _ IS _ CHECK !> x Ġis ĠA 4 <! >) Ġ{ ĊĠĠĠĠĠĠĠ Ġx ĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" C ? Ġ& ĠC ") !> x <! > ĊĠĠĠĠĠĠĠ Ġx . foo () ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠA 4 Ċ interface ĠB 4 Ċ Ċ class ĠC Ġ: ĠA 4 , ĠB 4 Ġ{ ĊĠĠĠ Ġfun Ġfoo () Ġ= Ġ"" Ċ } Ċ Ċ // ĠTEST CASE ĠNUMBER : Ġ 5 Ċ Ċ fun Ġ< T Ġ: ĠI 5 > Ġcase 5 ( x : ĠT ) Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠB 5 Ġ&& Ġx Ġis ĠA 5 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġx ĊĠĠĠĠĠĠĠ Ġ<! DEBUG _ INFO _ EXPRESSION _ TYPE (" T Ġ& ĠB 5 Ġ& ĠA 5 Ġ& ĠT ") !> x <! > ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠA 5 Ġ: ĠI 5 Ċ interface ĠB 5 Ġ: ĠI 5 Ċ interface ĠI 5 Ċ class ĠC 5 Ġ: ĠA 5 , ĠB 5 Ġ{ ĊĠĠĠ Ġfun Ġfoo () Ġ= Ġ"" Ċ } Ċ Ċ // ĠTEST CASE ĠNUMBER : Ġ 6 Ċ Ċ fun Ġ< T > Ġcase 6 ( case : ĠT ): ĠT Ġwhere ĠT Ġ: ĠA 6 ?, ĠT Ġ: ĠB 6 ? Ġ Ġ= Ġcase Ċ Ċ fun Ġ< T > Ġfoo ( case : ĠT ): ĠT ? Ġ= Ġcase Ċ Ċ fun Ġ< T > test 6 ( x : ĠT ) Ġwhere ĠT Ġ: ĠB 6 ? Ġ{ ĊĠĠĠ Ġif Ġ( x Ġis ĠA 6 ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( x Ġas ĠC 6 ). foo () ĊĠĠĠ Ġ} Ċ } Ċ Ċ interface ĠA 6 Ċ interface ĠB 6 Ċ Ċ fun ĠC 6 ?. foo ( var arg Ġx : ĠInt ) Ġ= Ġprintln (" he he ") Ċ Ċ class ĠC 6 Ġ: ĠA 6 , ĠB 6 Ġ{} Ċ