package Ġnet . d ink la . ray tracer . world . dsl Ċ Ċ import Ġnet . d ink la . ray tracer . assert Type Ċ import Ġnet . d ink la . ray tracer . colors . Color Ċ import Ġnet . d ink la . ray tracer . materials . Mat te Ċ import Ġnet . d ink la . ray tracer . math . Affine Transformation Ċ import Ġnet . d ink la . ray tracer . math . Normal Ċ import Ġnet . d ink la . ray tracer . math . Point 3 D Ċ import Ġnet . d ink la . ray tracer . math . Vector 3 D Ċ import Ġnet . d ink la . ray tracer . objects .* Ċ import Ġnet . d ink la . ray tracer . objects . acceleration . Grid Ċ import Ġnet . d ink la . ray tracer . objects . acceleration . k dt ree . KD Tree Ċ import Ġnet . d ink la . ray tracer . objects . be ve led . Be ve led Box Ċ import Ġnet . d ink la . ray tracer . objects . compound . Box Ċ import Ġnet . d ink la . ray tracer . objects . compound . Compound Ċ import Ġnet . d ink la . ray tracer . objects . compound . Solid Cy linder Ċ import Ġnet . d ink la . ray tracer . objects . mesh . Mesh Triangle Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ Ċ internal Ġclass ĠObjects Scope Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġsome Point Ġ= ĠPoint 3 D ( 1 . 0 , Ġ 2 . 0 , Ġ 3 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġsome Point 2 Ġ= ĠPoint 3 D ( 1 . 1 , Ġ 2 . 1 , Ġ 4 . 1 ) ĊĠĠĠ Ġprivate Ġval Ġsome Point 3 Ġ= ĠPoint 3 D ( 1 . 2 , Ġ 3 . 2 , Ġ 5 . 2 ) ĊĠĠĠ Ġprivate Ġval Ġsome Radius Ġ= Ġ 1 2 . 3 ĊĠĠĠ Ġprivate Ġval Ġsome Normal Ġ= ĠNormal ( 5 . 0 , Ġ 6 . 0 , Ġ 7 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġsome FileName Ġ= Ġ" resources / Two Triangles . ply " ĊĠĠĠ Ġprivate Ġval Ġsome Material Id Ġ= Ġ" material " ĊĠĠĠ Ġprivate Ġval Ġsome Vector Ġ= ĠVector 3 D ( 1 . 0 , Ġ 2 . 0 , Ġ 3 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġsome Vector 2 Ġ= ĠVector 3 D ( 1 . 1 , Ġ 2 . 1 , Ġ 4 . 1 ) ĊĠĠĠ Ġprivate Ġval Ġsome Vector 3 Ġ= ĠVector 3 D ( 3 . 1 , Ġ- 2 . 1 , Ġ 2 . 4 ) ĊĠĠĠ Ġprivate Ġval Ġy 0 Ġ= Ġ 1 . 0 ĊĠĠĠ Ġprivate Ġval Ġy 1 Ġ= Ġ 2 . 0 ĊĠĠĠ Ġprivate Ġval Ġsome Double Ġ= Ġ 1 . 2 3 ĊĊĠĠĠ Ġprivate Ġval Ġsome Material Ġ= ĠMat te () ĊĠĠĠ Ġprivate Ġval Ġmaterials Ġ= Ġmap Of ( Pair ( some Material Id , Ġsome Material )) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġsphere `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠSphere ( some Point , Ġsome Radius ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . sphere ( material Ġ= Ġsome Material Id , Ġcenter Ġ= Ġsome Point , Ġradius Ġ= Ġsome Radius ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġscope . objects . size ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠSphere ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġplane `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠPlane ( some Point , Ġsome Normal ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . plane ( material Ġ= Ġsome Material Id , Ġpoint Ġ= Ġsome Point , Ġnormal Ġ= Ġsome Normal ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠPlane >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠPlane ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġtriangle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTriangle ( some Point , Ġsome Point 2 , Ġsome Point 3 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . triangle ( material Ġ= Ġsome Material Id , Ġa Ġ= Ġsome Point , Ġb Ġ= Ġsome Point 2 , Ġc Ġ= Ġsome Point 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠTriangle >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠTriangle ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġsmooth Triangle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠSm ooth Triangle ( some Point , Ġsome Point 2 , Ġsome Point 3 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . triangle ( material Ġ= Ġsome Material Id , Ġa Ġ= Ġsome Point , Ġb Ġ= Ġsome Point 2 , Ġc Ġ= Ġsome Point 3 , Ġsmooth Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠSm ooth Triangle >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠSm ooth Triangle ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġply `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . ply ( material Ġ= Ġsome Material Id , ĠfileName Ġ= Ġsome FileName ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠGrid >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġscope . objects [ 0 ] Ġas ĠGrid ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġgrid . objects . size ) ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠMesh Triangle >( grid . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠMesh Triangle >( grid . objects , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Material , Ġgrid . material ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġgrid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġpre condition ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġscope . objects . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . grid () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsphere ( material Ġ= Ġsome Material Id , Ġcenter Ġ= Ġsome Point , Ġradius Ġ= Ġsome Radius ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠGrid >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġscope . objects [ 0 ] Ġas ĠGrid ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠSphere >( grid . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsphere Ġ= Ġgrid . objects [ 0 ] Ġas ĠSphere ĊĠĠĠĠĠĠĠ ĠassertEquals ( Sphere ( some Point , Ġsome Radius ). apply Ġ{ Ġmaterial Ġ= Ġsome Material Ġ}, Ġsphere ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġdisk `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠDisk ( some Point , Ġradius Ġ= Ġsome Radius , Ġnormal Ġ= Ġsome Normal ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . disk ( material Ġ= Ġsome Material Id , Ġcenter Ġ= Ġsome Point , Ġradius Ġ= Ġsome Radius , Ġnormal Ġ= Ġsome Normal ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠDisk >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠDisk ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġrectangle `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠRectangle ( some Point , Ġsome Vector , Ġsome Vector 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . rectangle ( material Ġ= Ġsome Material Id , Ġp 0 Ġ= Ġsome Point , Ġa Ġ= Ġsome Vector , Ġb Ġ= Ġsome Vector 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠRectangle >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠRectangle ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġaligned Box `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠAlign ed Box ( some Point , Ġsome Point 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . aligned Box ( material Ġ= Ġsome Material Id , Ġp Ġ= Ġsome Point , Ġq Ġ= Ġsome Point 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠAlign ed Box >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠAlign ed Box ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġopen Cy linder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠOpen Cy linder ( y 0 Ġ= Ġy 0 , Ġy 1 Ġ= Ġy 1 , Ġradius Ġ= Ġsome Radius ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . open Cy linder ( material Ġ= Ġsome Material Id , Ġy 0 Ġ= Ġy 0 , Ġy 1 Ġ= Ġy 1 , Ġradius Ġ= Ġsome Radius ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠOpen Cy linder >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠOpen Cy linder ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġsolid Cy linder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠSolid Cy linder ( y 0 Ġ= Ġy 0 , Ġy 1 Ġ= Ġy 1 , Ġradius Ġ= Ġsome Radius ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . solid Cy linder ( material Ġ= Ġsome Material Id , Ġy 0 Ġ= Ġy 0 , Ġy 1 Ġ= Ġy 1 , Ġradius Ġ= Ġsome Radius ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠSolid Cy linder >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠSolid Cy linder ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġinstance `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġsome Other Material Ġ= ĠMat te ( Color . RED , Ġ 0 . 1 2 , Ġ 0 . 3 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠSphere ( center Ġ= Ġsome Point , Ġradius Ġ= Ġsome Radius ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Other Material ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtrans Ġ= ĠAff ine Transformation () ĊĠĠĠĠĠĠĠ Ġtrans . translate ( some Vector ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . instance ( material Ġ= Ġsome Material Id , Ġof Ġ= Ġexpected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( some Vector ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠInstance >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= Ġscope . objects [ 0 ] Ġas ĠInstance ĊĠĠĠĠĠĠĠ ĠassertEquals ( trans , Ġinstance . trans ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Material , Ġinstance . material ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( some Other Material , Ġexpected . material ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġbox `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠBox ( some Point , Ġsome Vector , Ġsome Vector 2 , Ġsome Vector 3 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . box ( material Ġ= Ġsome Material Id , Ġp 0 Ġ= Ġsome Point , Ġa Ġ= Ġsome Vector , Ġb Ġ= Ġsome Vector 2 , Ġc Ġ= Ġsome Vector 3 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠBox >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠBox ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġtor us `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠTor us ( y 0 , Ġy 1 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . tor us ( material Ġ= Ġsome Material Id , Ġa Ġ= Ġy 0 , Ġb Ġ= Ġy 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠTor us >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠTor us ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġbe ve led Box `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠBe ve led Box ( some Point , Ġsome Point 2 , Ġsome Double ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmaterial Ġ= Ġsome Material ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . be ve led Box ( material Ġ= Ġsome Material Id , Ġp 0 Ġ= Ġsome Point , Ġp 1 Ġ= Ġsome Point 2 , Ġrb Ġ= Ġsome Double ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠBe ve led Box >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= Ġscope . objects [ 0 ] Ġas ĠBe ve led Box ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcreated ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġk dt ree `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġcompound Ġ= ĠCompound () ĊĠĠĠĠĠĠĠ Ġval Ġscope Ġ= ĠObjects Scope ( materials , Ġcompound ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġpre condition ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġscope . objects . size ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġscope . k dt ree () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsphere ( material Ġ= Ġsome Material Id , Ġcenter Ġ= Ġsome Point , Ġradius Ġ= Ġsome Radius ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠK D Tree >( scope . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġgrid Ġ= Ġscope . objects [ 0 ] Ġas ĠK D Tree ĊĠĠĠĠĠĠĠ Ġassert Type < Ge ometric Object , ĠSphere >( grid . objects , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsphere Ġ= Ġgrid . objects [ 0 ] Ġas ĠSphere ĊĠĠĠĠĠĠĠ ĠassertEquals ( Sphere ( some Point , Ġsome Radius ). apply Ġ{ Ġmaterial Ġ= Ġsome Material Ġ}, Ġsphere ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġhandle Ġx `() Ġ{ ĊĠĠĠ Ġ} Ċ }