package Ġorg . vit riv r . cott ont ail . math . knn Ċ Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Method Source Ċ import Ġorg . vit riv r . cott ont ail . core . queries . functions . math . distance . binary . E uclidean Distance Ċ import Ġorg . vit riv r . cott ont ail . core . queries . functions . math . distance . binary . Man h att an Distance Ċ import Ġorg . vit riv r . cott ont ail . core . queries . functions . math . distance . binary . Squared E uclidean Distance Ċ import Ġorg . vit riv r . cott ont ail . core . values . Long Vector Value Ċ import Ġorg . vit riv r . cott ont ail . core . values . generators . Long Vector Value Generator Ċ import Ġorg . vit riv r . cott ont ail . core . values . types . Types Ċ import Ġorg . vit riv r . cott ont ail . math . is Approx imately The Same Ċ import Ġorg . vit riv r . cott ont ail . test . Test Constants Ċ import Ġorg . vit riv r . cott ont ail . utilities . Vector Utility Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . measure Time Ċ Ċ /** Ċ Ġ* ĠTest Ġcases Ġthat Ġtest Ġfor Ġcorrect ness Ġof Ġsome Ġbasic Ġdistance Ġcalculations Ġwith Ġ[ Long Vector Value ]. Ċ Ġ* Ċ Ġ* Ġ@ author ĠR alph ĠG asser Ċ Ġ* Ġ@ version Ġ 1 . 1 . 0 Ċ Ġ*/ Ċ class ĠLong Vector Distance Test Ġ: ĠAbstract Distance Test () Ġ{ ĊĊĠĠĠ Ġ@ Experimental Time ĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" dimensions ") ĊĠĠĠ Ġfun Ġtest L 1 Distance ( dimensions : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠLong Vector Value Generator . random ( dimensions , ĠR AN DOM ) ĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= ĠVector Utility . random Long Vector Sequence ( dimensions , ĠTest Constants . TEST _ COLLECTION _ SIZE , ĠR AN DOM ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsum 1 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 2 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 3 Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime 1 Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġtime 2 Ġ= ĠDuration . ZERO ĊĊĠĠĠĠĠĠĠ Ġval Ġkernel Ġ= ĠMan h att an Distance . Long Vector ( query . type Ġas ĠTypes . Long Vector ) ĊĠĠĠĠĠĠĠ Ġcollection . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 1 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 1 Ġ+= Ġkernel ( query , Ġit ). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 2 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 2 Ġ+= Ġ( it Ġ- Ġquery ). abs (). sum (). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum 3 Ġ+= Ġl 1 ( it . data , Ġquery . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Calcul ating ĠL 1 Ġdistance Ġfor Ġcollection Ġ( s =${ Test Constants . TEST _ COLLECTION _ SIZE }, Ġd =$ dimensions ) Ġtook Ġ${ time 1 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġ( optimized ) Ġresp . Ġ${ time 2 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġper Ġvector Ġon Ġaverage .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time 1 Ġ> Ġtime 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Optim ized Ġversion Ġof ĠL 2 ^ 2 Ġis Ġslower Ġthan Ġdefault Ġversion !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 1 ) ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Time ĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" dimensions ") ĊĠĠĠ Ġfun Ġtest L 2 Squared Distance ( dimensions : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠLong Vector Value Generator . random ( dimensions , ĠR AN DOM ) ĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= ĠVector Utility . random Long Vector Sequence ( dimensions , ĠTest Constants . TEST _ COLLECTION _ SIZE , ĠR AN DOM ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsum 1 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 2 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 3 Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime 1 Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġtime 2 Ġ= ĠDuration . ZERO ĊĊĠĠĠĠĠĠĠ Ġval Ġkernel Ġ= ĠS quared E uclidean Distance . Long Vector ( query . type Ġas ĠTypes . Long Vector ) ĊĠĠĠĠĠĠĠ Ġcollection . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 1 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 1 Ġ+= Ġkernel ( query , Ġit ). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 2 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 2 Ġ+= Ġ( it Ġ- Ġquery ). pow ( 2 ). sum (). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum 3 Ġ+= Ġl 2 squared ( it . data , Ġquery . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Calcul ating ĠL 2 ^ 2 Ġdistance Ġfor Ġcollection Ġ( s =${ Test Constants . TEST _ COLLECTION _ SIZE }, Ġd =$ dimensions ) Ġtook Ġ${ time 1 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġ( optimized ) Ġresp . Ġ${ time 2 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġper Ġvector Ġon Ġaverage .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time 1 Ġ> Ġtime 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Optim ized Ġversion Ġof ĠL 2 ^ 2 Ġis Ġslower Ġthan Ġdefault Ġversion !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 1 ) ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Time ĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" dimensions ") ĊĠĠĠ Ġfun Ġtest L 2 Distance ( dimensions : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= ĠLong Vector Value Generator . random ( dimensions , ĠR AN DOM ) ĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= ĠVector Utility . random Long Vector Sequence ( dimensions , ĠTest Constants . TEST _ COLLECTION _ SIZE , ĠR AN DOM ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsum 1 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 2 Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġvar Ġsum 3 Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġtime 1 Ġ= ĠDuration . ZERO ĊĠĠĠĠĠĠĠ Ġvar Ġtime 2 Ġ= ĠDuration . ZERO ĊĊĠĠĠĠĠĠĠ Ġval Ġkernel Ġ= ĠE uclidean Distance . Long Vector ( query . type Ġas ĠTypes . Long Vector ) ĊĠĠĠĠĠĠĠ Ġcollection . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 1 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 1 Ġ+= Ġkernel ( query , Ġit ). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime 2 Ġ+= Ġmeasure Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsum 2 Ġ+= Ġ( query Ġ- Ġit ). pow ( 2 ). sum (). sqrt (). value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum 3 Ġ+= Ġl 2 ( it . data , Ġquery . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprintln (" Calcul ating ĠL 2 Ġdistance Ġfor Ġcollection Ġ( s =${ Test Constants . TEST _ COLLECTION _ SIZE }, Ġd =$ dimensions ) Ġtook Ġ${ time 1 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġ( optimized ) Ġresp . Ġ${ time 2 Ġ/ ĠTest Constants . TEST _ COLLECTION _ SIZE } Ġper Ġvector Ġon Ġaverage .") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time 1 Ġ> Ġtime 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLOGGER . warn (" Optim ized Ġversion Ġof ĠL 2 ^ 2 Ġis Ġslower Ġthan Ġdefault Ġversion !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 1 ) ĊĠĠĠĠĠĠĠ Ġis Approx imately The Same ( sum 3 , Ġsum 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe ĠL < sub > 1 </ sub > Ġ( sum Ġof Ġabs ) Ġdistance Ġbetween Ġtwo Ġpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġp 1 Ġthe Ġfirst Ġpoint ĊĠĠĠĠ Ġ* Ġ@ param Ġp 2 Ġthe Ġsecond Ġpoint ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠL < sub > 1 </ sub > Ġdistance Ġbetween Ġthe Ġtwo Ġpoints ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġl 1 ( p 1 : ĠLong Array , Ġp 2 : ĠLong Array ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( p 1 . size Ġ== Ġp 2 . size ) Ġ{ Ġ" Dimension Ġmismatch !" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġp 1 . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġabs ( p 1 [ i ] Ġ- Ġp 2 [ i ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe ĠL < sub > 2 </ sub > Ġ( E uclidean ) Ġdistance Ġbetween Ġtwo Ġpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġp 1 Ġthe Ġfirst Ġpoint ĊĠĠĠĠ Ġ* Ġ@ param Ġp 2 Ġthe Ġsecond Ġpoint ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠL < sub > 2 </ sub > Ġdistance Ġbetween Ġthe Ġtwo Ġpoints ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġl 2 ( p 1 : ĠLong Array , Ġp 2 : ĠLong Array ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( p 1 . size Ġ== Ġp 2 . size ) Ġ{ Ġ" Dimension Ġmismatch !" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġp 1 . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġp 1 [ i ] Ġ- Ġp 2 [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġdp . toDouble (). pow ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġkotlin . math . sqrt ( sum ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalculates Ġthe ĠL < sub > 2 </ sub > Ġ( E uclidean ) Ġdistance Ġbetween Ġtwo Ġpoints . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġp 1 Ġthe Ġfirst Ġpoint ĊĠĠĠĠ Ġ* Ġ@ param Ġp 2 Ġthe Ġsecond Ġpoint ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠL < sub > 2 </ sub > Ġdistance Ġbetween Ġthe Ġtwo Ġpoints ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġl 2 squared ( p 1 : ĠLong Array , Ġp 2 : ĠLong Array ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( p 1 . size Ġ== Ġp 2 . size ) Ġ{ Ġ" Dimension Ġmismatch !" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġsum Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġp 1 . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdp Ġ= Ġp 1 [ i ] Ġ- Ġp 2 [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsum Ġ+= Ġdp . toDouble (). pow ( 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsum ĊĠĠĠ Ġ} Ċ }