// Ġ! WITH _ SE AL ED _ CLASSES Ċ Ċ /* Ċ ĠK OT LIN ĠDI AG NO ST ICS ĠSPEC ĠTEST Ġ( POSITIVE ) ĊĊ ĠSECTION : Ġ 1 6 . 3 0 ĠWhen Ġexpression Ċ ĠPAR AG R APH : Ġ 1 1 Ċ ĠS ENT ENCE : Ġ[ 8 ] ĠThe Ġbound Ġexpression Ġis Ġof Ġa Ġnullable Ġtype Ġand Ġone Ġof Ġthe Ġcases Ġabove Ġis Ġmet Ġfor Ġits Ġnon - nullable Ġcounter part Ġand , Ġin Ġaddition , Ġthere Ġis Ġa Ġcondition Ġcontaining Ġliteral Ġnull . Ċ ĠNUMBER : Ġ 3 Ċ ĠDESCRIPTION : ĠCheck Ġwhen Ġex haustive Ġwhen Ġpossible Ġsub types Ġof Ġthe Ġsealed Ġclass Ġare Ġcovered Ġand Ġcontains Ġa Ġnull Ġcheck . Ċ Ġ*/ Ċ Ċ // ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( all Ġsealed Ġclass Ġsub types Ġand Ġnull Ġvalue Ġcovered ). Ċ fun Ġcase _ 1 ( expr : Ġ_ Se aled Class ?): ĠInt Ġ= Ġwhen Ġ( expr ) Ġ{ ĊĠĠĠ Ġis Ġ_ Se aled Child 1 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. number ĊĠĠĠ Ġis Ġ_ Se aled Child 2 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. e 1 Ġ+ Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. e 2 ĊĠĠĠ Ġis Ġ_ Se aled Child 3 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. m 1 Ġ+ Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. m 2 ĊĠĠĠ Ġnull Ġ-> Ġ 0 Ċ } Ċ Ċ // ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( sealed Ġclass Ġitself Ġand Ġnull Ġvalue Ġcovered ). Ċ fun Ġcase _ 2 ( expr : Ġ_ Se aled Class ?): ĠString Ġ= Ġwhen Ġ( expr ) Ġ{ ĊĠĠĠ Ġis Ġ_ Se aled Class Ġ-> Ġ"" ĊĠĠĠ Ġnull Ġ-> Ġ"" Ċ } Ċ Ċ // ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( all Ġsealed Ġclass Ġwith Ġmethods Ġsub types Ġand Ġnull Ġvalue Ġcovered ). Ċ fun Ġcase _ 3 ( expr : Ġ_ Se aled Class With Methods ?): ĠString Ġ= Ġwhen Ġ( expr ) Ġ{ ĊĠĠĠ Ġis Ġ_ Se aled With Methods Child 1 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. m 1 () ĊĠĠĠ Ġis Ġ_ Se aled With Methods Child 2 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. m 2 () ĊĠĠĠ Ġis Ġ_ Se aled With Methods Child 3 Ġ-> Ġ<! DEBUG _ INFO _ SM ART CAST !> expr <! >. m 3 () ĊĠĠĠ Ġnull Ġ-> Ġ"" Ċ } Ċ Ċ // ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( all Ġobjects Ġcovered Ġusing Ġimplicit Ġequality Ġoperator Ġand Ġnull Ġvalue Ġcovered ). Ċ fun Ġcase _ 4 ( expr : Ġ_ Se aled Class With Objects ?): ĠString Ġ= Ġwhen Ġ( expr ) Ġ{ ĊĠĠĠ Ġ_ Se aled With Objects Child 1 Ġ-> Ġ"" ĊĠĠĠ Ġ_ Se aled With Objects Child 2 Ġ-> Ġ"" ĊĠĠĠ Ġ_ Se aled With Objects Child 3 Ġ-> Ġ"" ĊĠĠĠ Ġnull Ġ-> Ġ"" Ċ } Ċ Ċ // ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( all Ġsub types Ġand Ġobjects Ġcovered Ġ+ Ġnull Ġvalue Ġcovered ). Ċ fun Ġcase _ 5 ( value : Ġ_ Se aled Class Mixed ?): ĠString Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 1 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 2 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 3 Ġ-> Ġ"" ĊĠĠĠ Ġ_ Se aled Mixed Child Object 1 Ġ-> Ġ"" ĊĠĠĠ Ġ_ Se aled Mixed Child Object 2 Ġ-> Ġ"" ĊĠĠĠ Ġ_ Se aled Mixed Child Object 3 Ġ-> Ġ"" ĊĠĠĠ Ġnull Ġ-> Ġ"" Ċ } Ċ Ċ /* Ċ ĠCASE ĠDESCRIPTION : ĠChecking Ġfor Ġex haustive Ġ' when ' Ġ( all Ġsub types Ġand Ġobjects Ġ( using Ġtype Ġchecking Ġoperator ) Ġcovered Ġ+ Ġnull Ġvalue Ġcovered ). Ċ ĠDIS CU SS ION : Ġis Ġit Ġcorrect Ġthat Ġobjects Ġcan Ġbe Ġchecked Ġusing Ġthe Ġtype Ġchecking Ġoperator ? Ċ Ġ*/ Ċ fun Ġcase _ 6 ( value : Ġ_ Se aled Class Mixed ?): ĠString Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 1 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 2 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child 3 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child Object 1 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child Object 2 Ġ-> Ġ"" ĊĠĠĠ Ġis Ġ_ Se aled Mixed Child Object 3 Ġ-> Ġ"" ĊĠĠĠ Ġnull Ġ-> Ġ"" Ċ } Ċ