package Ġnet . d ink la . ray tracer . math Ċ Ċ import Ġio . kot est . core . spec . style . Annotation Spec Ċ import Ġio . kot est . matchers . shouldBe Ċ Ċ internal Ġclass ĠVector 3 D Test Ġ: ĠAnnotation Spec () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġv 0 Ġ= ĠVector 3 D ( 0 . 0 , Ġ 0 . 0 , Ġ 0 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġv Ġ= ĠVector 3 D ( 2 . 0 , Ġ 3 . 0 , Ġ 5 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġw Ġ= ĠVector 3 D (- 2 . 0 , Ġ- 3 . 0 , Ġ- 5 . 0 ) ĊĠĠĠ Ġprivate Ġval Ġel : ĠElement 3 D Ġ= Ġv ĊĊĠĠĠ Ġprivate Ġval Ġa Ġ= Ġ 3 . 0 ĊĠĠĠ Ġprivate Ġval Ġb Ġ= Ġ 5 . 0 ĊĠĠĠ Ġprivate Ġval Ġc Ġ= Ġ 7 . 0 ĊĠĠĠ Ġprivate Ġval Ġd Ġ= Ġ 1 1 . 0 ĊĠĠĠ Ġprivate Ġval Ġe Ġ= Ġ 1 3 . 0 ĊĠĠĠ Ġprivate Ġval Ġf Ġ= Ġ 1 7 . 0 ĊĊĠĠĠ Ġprivate Ġval Ġv 1 Ġ= ĠVector 3 D ( a , Ġb , Ġc ) ĊĠĠĠ Ġprivate Ġval Ġv 2 Ġ= ĠVector 3 D ( d , Ġe , Ġf ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` construct Ġfrom Ġintegers `() Ġ{ ĊĠĠĠĠĠĠĠ ĠVector 3 D ( 2 . 0 , Ġ 3 . 0 , Ġ 5 . 0 ) ĠshouldBe Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` construct Ġfrom ĠElement 3 D `() Ġ{ ĊĠĠĠĠĠĠĠ ĠVector 3 D ( el ) ĠshouldBe Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` add Ġvector `() Ġ{ ĊĠĠĠĠĠĠĠ Ġv Ġ+ Ġw ĠshouldBe Ġv 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` subtract Ġvector `() Ġ{ ĊĠĠĠĠĠĠĠ Ġv Ġ- Ġv ĠshouldBe Ġv 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` right Ġscalar Ġmultiplication `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġv Ġ* Ġs ĠshouldBe ĠVector 3 D ( v . x Ġ* Ġs , Ġv . y Ġ* Ġs , Ġv . z Ġ* Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` left Ġscalar Ġmultiplication `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ 2 . 0 ĊĠĠĠĠĠĠĠ Ġs * v ĠshouldBe ĠVector 3 D ( v . x Ġ* Ġs , Ġv . y Ġ* Ġs , Ġv . z Ġ* Ġs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dot Ġproduct Ġwith Ġvector `() Ġ{ ĊĠĠĠĠĠĠĠ Ġv 1 Ġdot Ġv 2 ĠshouldBe Ġa Ġ* Ġd Ġ+ Ġb Ġ* Ġe Ġ+ Ġc Ġ* Ġf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` dot Ġproduct Ġwith Ġnormal `() Ġ{ ĊĠĠĠĠĠĠĠ Ġv 1 Ġdot ĠNormal ( d , Ġe , Ġf ) ĠshouldBe Ġa Ġ* Ġd Ġ+ Ġb Ġ* Ġe Ġ+ Ġc Ġ* Ġf ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` cross Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠVector 3 D ( v 1 . y Ġ* Ġv 2 . z Ġ- Ġv 1 . z Ġ* Ġv 2 . y , Ġv 1 . z Ġ* Ġv 2 . x Ġ- Ġv 1 . x Ġ* Ġv 2 . z , Ġv 1 . x Ġ* Ġv 2 . y Ġ- Ġv 1 . y Ġ* Ġv 2 . x ) ĊĠĠĠĠĠĠĠ Ġv 1 Ġcross Ġv 2 ĠshouldBe Ġexpected ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnormalize () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġv . x Ġ/ Ġv . length () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġv . y Ġ/ Ġv . length () ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġv . z Ġ/ Ġv . length () ĊĠĠĠĠĠĠĠ Ġv . normalize () ĠshouldBe ĠVector 3 D ( x , Ġy , Ġz ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġneg ate () Ġ{ ĊĠĠĠĠĠĠĠ Ġ- w ĠshouldBe Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvolume () Ġ{ ĊĠĠĠĠĠĠĠ Ġv 1 . volume () ĠshouldBe Ġa Ġ* Ġb Ġ* Ġc ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunary Minus () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv Ġ= ĠVector 3 D ( a , Ġb , Ġ- c ) ĊĠĠĠĠĠĠĠ Ġ- v ĠshouldBe ĠVector 3 D (- a , Ġ- b , Ġc ) ĊĠĠĠ Ġ} Ċ Ċ }