package Ġnet . d ink la . ray tracer challenge . step defs Ċ Ċ import Ġio . cucumber . java . Pending Exception Ċ import Ġio . cucumber . java . en . Given Ċ import Ġio . cucumber . java . en . Then Ċ import Ġio . cucumber . java . en . When Ċ import Ġnet . d ink la . ray tracer challenge . Intersection Ċ import Ġnet . d ink la . ray tracer challenge . Point Light Ċ import Ġnet . d ink la . ray tracer challenge . World Ċ import Ġnet . d ink la . ray tracer challenge . math . Color Ċ import Ġnet . d ink la . ray tracer challenge . objects . Plane Ċ import Ġnet . d ink la . ray tracer challenge . objects . Shape Ċ import Ġnet . d ink la . ray tracer challenge . objects . Sphere Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertFalse Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ Ċ class ĠWorld Step Definitions Ġ{ ĊĊĠĠĠ Ġ@ Given (" w ĠâĨ Ĳ Ġworld ") ĊĠĠĠ Ġfun Ġw _ world () Ġ{ ĊĠĠĠĠĠĠĠ Ġw Ġ= ĠWorld () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" w Ġcontains Ġno Ġobjects ") ĊĠĠĠ Ġfun Ġw _ contains _ no _ objects () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġw . objects . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" w Ġhas Ġno Ġlight Ġsource ") ĊĠĠĠ Ġfun Ġw _ has _ no _ light _ source () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġw . objects . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġs 1 : ĠSphere ĊĊĠĠĠ Ġ@ Given (" s 1 ĠâĨ Ĳ Ġsphere Ġwith :") ĊĠĠĠ Ġfun Ġs 1 _ sphere _ with ( dataTable : ĠList < List < String >>) Ġ{ ĊĠĠĠĠĠĠ Ġs 1 Ġ= ĠSphere () ĊĠĠĠĠĠĠ Ġs 1 . with ( dataTable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġs 2 : ĠSphere ĊĊĠĠĠ Ġ@ Given (" s 2 ĠâĨ Ĳ Ġsphere Ġwith :") ĊĠĠĠ Ġfun Ġs 2 _ sphere _ with ( dataTable : ĠList < List < String >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġs 2 Ġ= ĠSphere () ĊĠĠĠĠĠĠĠ Ġs 2 . with ( dataTable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" w ĠâĨ Ĳ Ġdefault World ") ĊĠĠĠ Ġfun Ġw _ default _ world () Ġ{ ĊĠĠĠĠĠĠ Ġw Ġ= ĠWorld . default World () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" w . light Ġ= Ġlight ") ĊĠĠĠ Ġfun Ġw _ light _ light () Ġ{ ĊĠĠĠĠĠĠ ĠassertEquals ( light , Ġw . light ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" w Ġcontains Ġs 1 ") ĊĠĠĠ Ġfun Ġw _ contains _ s 1 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( s 1 Ġin Ġw . objects ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" w Ġcontains Ġs 2 ") ĊĠĠĠ Ġfun Ġw _ contains _ s 2 () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( s 1 Ġin Ġw . objects ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" xs ĠâĨ Ĳ Ġintersect _ world \\ ( w , Ġr )") ĊĠĠĠ Ġfun Ġxs _ intersect _ world _ w _ r () Ġ{ ĊĠĠĠĠĠĠĠ Ġxs Ġ= Ġw . intersect ( r ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" shape ĠâĨ Ĳ Ġthe Ġfirst Ġobject Ġin Ġw ") ĊĠĠĠ Ġfun Ġshape _ the _ first _ object _ in _ w () Ġ{ ĊĠĠĠĠĠĠ Ġshape Ġ= Ġw . objects [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" c ĠâĨ Ĳ Ġsh ade _ hit \\ ( w , Ġcomp s )") ĊĠĠĠ Ġfun Ġc _ shade _ hit _ w _ comp s () Ġ{ ĊĠĠĠĠĠĠĠ Ġc Ġ= Ġw . shade Hit ( comp s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" c Ġ= Ġcolor \\ ({ double }, Ġ{ double }, Ġ{ double }) ") ĊĠĠĠ Ġfun Ġc _ color ( double 1 : ĠDouble ?, Ġdouble 2 : ĠDouble ?, Ġdouble 3 : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠColor ( double 1 !! , Ġdouble 2 !! , Ġdouble 3 !! ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" w . light ĠâĨ Ĳ Ġpoint _ light \\ ( position , Ġintensity )") ĊĠĠĠ Ġfun Ġw _ light _ point _ light _ pos _ intensity () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . light Ġ= ĠPoint Light ( position , Ġintensity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" shape ĠâĨ Ĳ Ġthe Ġsecond Ġobject Ġin Ġw ") ĊĠĠĠ Ġfun Ġshape _ the _ second _ object _ in _ w () Ġ{ ĊĠĠĠĠĠĠ Ġshape Ġ= Ġw . objects [ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" i ĠâĨ Ĳ Ġintersection \\ ({ double }, Ġshape )") ĊĠĠĠ Ġfun Ġi _ intersection _ shape ( double 1 : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġi Ġ= ĠIntersection ( double 1 !! , Ġshape ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" c ĠâĨ Ĳ Ġcolor _ at \\ ( w , Ġr )") ĊĠĠĠ Ġfun Ġc _ color _ at _ w _ r () Ġ{ ĊĠĠĠĠĠĠĠ Ġc Ġ= Ġw . color At ( r ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġouter : ĠShape ĊĊĠĠĠ Ġ@ Given (" outer ĠâĨ Ĳ Ġthe Ġfirst Ġobject Ġin Ġw ") ĊĠĠĠ Ġfun Ġouter _ the _ first _ object _ in _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġouter Ġ= Ġw . objects [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" outer . material . ambient ĠâĨ Ĳ Ġ{ int }") ĊĠĠĠ Ġfun Ġouter _ material _ ambient ( int 1 : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġouter . material . ambient Ġ= Ġint 1 !!. toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġinner : ĠShape ĊĊĠĠĠ Ġ@ Given (" inner ĠâĨ Ĳ Ġthe Ġsecond Ġobject Ġin Ġw ") ĊĠĠĠ Ġfun Ġinner _ the _ second _ object _ in _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġinner Ġ= Ġw . objects [ 1 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" inner . material . ambient ĠâĨ Ĳ Ġ{ int }") ĊĠĠĠ Ġfun Ġinner _ material _ ambient ( int 1 : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġinner . material . ambient Ġ= Ġint 1 !!. toDouble () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" c Ġ= Ġinner . material . color ") ĊĠĠĠ Ġfun Ġc _ inner _ material _ color () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( inner . material . color , Ġc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" is _ shadow ed \\ ( w , Ġp ) Ġis Ġfalse ") ĊĠĠĠ Ġfun Ġis _ shadow ed _ w _ p _ is _ false () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( w . is Shadow ed ( p )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" is _ shadow ed \\ ( w , Ġp ) Ġis Ġtrue ") ĊĠĠĠ Ġfun Ġis _ shadow ed _ w _ p _ is _ true () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( w . is Shadow ed ( p )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" s 1 ĠâĨ Ĳ Ġsphere ") ĊĠĠĠ Ġfun Ġs 1 _ sphere () Ġ{ ĊĠĠĠĠĠĠĠ Ġs 1 Ġ= ĠSphere () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" s 1 Ġis Ġadded Ġto Ġw ") ĊĠĠĠ Ġfun Ġs 1 _ is _ added _ to _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . objects . add ( s 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" s 2 Ġis Ġadded Ġto Ġw ") ĊĠĠĠ Ġfun Ġs 2 _ is _ added _ to _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . objects . add ( s 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" i ĠâĨ Ĳ Ġintersection \\ ({ int }, Ġs 2 )") ĊĠĠĠ Ġfun Ġi _ intersection _ s 2 ( int 1 : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠ Ġi Ġ= ĠIntersection ( int 1 !!. toDouble (), Ġs 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġcolor : ĠColor ĊĊĠĠĠ Ġ@ When (" color ĠâĨ Ĳ Ġreflected _ color \\ ( w , Ġcomp s )") ĊĠĠĠ Ġfun Ġcolor _ reflect ed _ color _ w _ comp s () Ġ{ ĊĠĠĠĠĠĠ Ġcolor Ġ= Ġw . reflect ed Color ( comp s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" color ĠâĨ Ĳ Ġsh ade _ hit \\ ( w , Ġcomp s )") ĊĠĠĠ Ġfun Ġcolor _ shade _ hit _ w _ comp s () Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġw . shade Hit ( comp s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ When (" color ĠâĨ Ĳ Ġreflected _ color \\ ( w , Ġcomp s , Ġ{ int }) ") ĊĠĠĠ Ġfun Ġcolor _ reflect ed _ color _ w _ comp s ( int 1 : ĠInt ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġw . reflect ed Color ( comp s , Ġint 1 !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" color Ġ= Ġcolor \\ ({ double }, Ġ{ double }, Ġ{ double }) ") ĊĠĠĠ Ġfun Ġcolor _ color ( double 1 : ĠDouble ?, Ġdouble 2 : ĠDouble ?, Ġdouble 3 : ĠDouble ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠColor ( double 1 !! , Ġdouble 2 !! , Ġdouble 3 !! ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġcolor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" shape ĠâĨ Ĳ Ġplane Ġwith :") ĊĠĠĠ Ġfun Ġshape _ plane _ with ( dataTable : ĠList < List < String >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġshape Ġ= ĠPlane () ĊĠĠĠĠĠĠĠ Ġshape . with ( dataTable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" shape Ġis Ġadded Ġto Ġw ") ĊĠĠĠ Ġfun Ġshape _ is _ added _ to _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . objects . add ( shape ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġlower Plane : ĠPlane ĊĊĠĠĠ Ġ@ Given (" lower ĠâĨ Ĳ Ġplane Ġwith :") ĊĠĠĠ Ġfun Ġlower _ plane _ with ( dataTable : ĠList < List < String >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġlower Plane Ġ= ĠPlane () ĊĠĠĠĠĠĠĠ Ġlower Plane . with ( dataTable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" lower Ġis Ġadded Ġto Ġw ") ĊĠĠĠ Ġfun Ġlower _ is _ added _ to _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . objects . add ( lower Plane ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġupper Plane : ĠPlane ĊĊĠĠĠ Ġ@ Given (" upper ĠâĨ Ĳ Ġplane Ġwith :") ĊĠĠĠ Ġfun Ġupper _ plane _ with ( dataTable : ĠList < List < String >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġupper Plane Ġ= ĠPlane () ĊĠĠĠĠĠĠĠ Ġupper Plane . with ( dataTable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Given (" upper Ġis Ġadded Ġto Ġw ") ĊĠĠĠ Ġfun Ġupper _ is _ added _ to _ w () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . objects . add ( upper Plane ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Then (" color _ at \\ ( w , Ġr ) Ġshould Ġterminate Ġsuccessfully ") ĊĠĠĠ Ġfun Ġcolor _ at _ w _ r _ should _ terminate _ successfully () Ġ{ ĊĠĠĠĠĠĠĠ Ġw . color At ( r ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ