package Ġio . pe te ef . kan ar oma . benchmark Ċ Ċ import Ġio . pe te ef . kan ar oma . Converter Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Nested Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . FileReader Ċ import Ġkotlin . system . measure Time Millis Ċ Ċ internal Ġclass ĠBenchmark Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCHAR _ THRESHOLD Ġ= Ġ 0 . 0 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠWORD _ THRESHOLD Ġ= Ġ 0 . 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġconverter : ĠConverter Ġ= ĠConverter () ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠK ana To Rom aji Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Characters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Characters ("/ benchmark / k ana _ rom aji _ characters . dat ", Ġconverter :: to Rom aji ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Words () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Words ("/ benchmark / k ana _ rom aji _ words . dat ", Ġconverter :: to Rom aji ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠR om aji To H ir ag ana Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Characters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Characters ("/ benchmark / rom aji _ hir ag ana _ characters . dat ", Ġconverter :: to H ir ag ana ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Words () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Words ("/ benchmark / rom aji _ hir ag ana _ words . dat ", Ġconverter :: to H ir ag ana ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Nested ĊĠĠĠ Ġinner Ġclass ĠR om aji To K ata k ana Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Characters () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Characters ("/ benchmark / rom aji _ k ata k ana _ characters . dat ", Ġconverter :: to K ata k ana ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġsingle Words () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Words ("/ benchmark / rom aji _ k ata k ana _ words . dat ", Ġconverter :: to K ata k ana ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġtest Characters ( path : ĠString , Ġoperation : Ġ( String ) Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcharacters Ġ= Ġload Input ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġaverage Ġ= Ġbenchmark ( characters , Ġoperation ) ĊĠĠĠĠĠĠĠ Ġprintln (" Average Ġfor Ġ${ characters . size } Ġcharacters : Ġ$ average Ġms ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( average Ġ< ĠCHAR _ THRESHOLD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġtest Words ( path : ĠString , Ġoperation : Ġ( String ) Ġ-> ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġload Input ( path ) ĊĠĠĠĠĠĠĠ Ġval Ġaverage Ġ= Ġbenchmark ( words , Ġoperation ) ĊĠĠĠĠĠĠĠ Ġprintln (" Average Ġfor Ġ${ words . size } Ġwords : Ġ$ average Ġms ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( average Ġ< ĠWORD _ THRESHOLD ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Input ( filepath : ĠString ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBufferedReader ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileReader ( Benchmark Test :: class . java . getResource ( filepath )?. path Ġ?: Ġfilepath ) ĊĠĠĠĠĠĠĠ Ġ). read Lines () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbenchmark ( input : ĠList < String >, Ġoperation : Ġ( String ) Ġ-> ĠString ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinput . sh uffled (). map Ġ{ Ġmeasure Ġ{ Ġoperation ( it ) Ġ} Ġ}. average () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmeasure ( operation : Ġ() Ġ-> ĠUnit ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmeasure Time Millis ( operation ) ĊĠĠĠ Ġ} Ċ } Ċ