package Ġch . u zh . ifi . se al . bench er . execution Ċ Ċ import Ġarrow . core . Either Ċ import Ġarrow . core . Some Ċ import Ġarrow . core . first Or None Ċ import Ġarrow . core . getOrElse Ċ import Ġch . u zh . ifi . se al . bench er . Benchmark Ċ import Ġch . u zh . ifi . se al . bench er . Class Ċ Ċ open Ġclass ĠConfig Based Configurator ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdefault Exec Config : ĠExecution Configuration , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclass Exec Configs : ĠMap < Class , ĠExecution Configuration >, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbench Exec Configs : ĠMap < Benchmark , ĠExecution Configuration > Ċ ) Ġ: ĠBenchmark Configurator Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġconfig ( bench : ĠBenchmark ): ĠEither < String , ĠExecution Configuration > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġbenchmark Exec Config ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġbench Config ( bench ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc Ġ= Ġclass Config ( bench ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd Ġ= Ġdefault Exec Config ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( valid ( c )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Right ( c ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEither . Left (" Invalid Ġconfiguration Ġfor Ġbenchmark Ġ($ bench ) Ġand Ġprovided Ġdefault / class / benchmark Ġconfigurations ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalid ( c : ĠExecution Configuration ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġc . fork s Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . warm up Fork s Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . warm up Iterations Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . warm up Time Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . warm up TimeUnit Ġis ĠSome Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . measurement Iterations Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . measurement Time Ġ>= Ġ 0 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc . measurement TimeUnit Ġis ĠSome ĊĊĠĠĠ Ġprivate Ġfun Ġbenchmark Exec Config ( b : ĠExecution Configuration , Ġc : ĠExecution Configuration , Ġd : ĠExecution Configuration ): ĠExecution Configuration Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġor Default Ġc Ġor Default Ġd ĊĊĠĠĠ Ġprivate Ġfun Ġbench Config ( bench : ĠBenchmark ): ĠExecution Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbe c Ġ= Ġbench Exec Configs [ bench ] ĊĠĠĠĠĠĠĠ Ġif Ġ( bec Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbe c ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġbe cs Ġ= Ġbench Exec Configs . filter Keys Ġ{ Ġit . clazz Ġ== Ġbench . clazz Ġ&& Ġit . name Ġ== Ġbench . name Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( bec s . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġunset Exec Config ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbe cs . iterator (). next (). value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclass Config ( bench : ĠBenchmark ): ĠExecution Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Config Ġ= Ġclass Exec Configs . toList (). filter Ġ{ Ġ( c , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCurrently Ġclass - level ĠJ MH Ġconfigurations Ġare Ġonly Ġinherited Ġto Ġdirectly Ġcontaining Ġbenchmarks , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnot Ġto Ġbenchmarks Ġin Ġnested Ġclasses . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTherefore , Ġa Ġdirect Ġmatch Ġon Ġthe Ġclass Ġname Ġis Ġsufficient . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbench . clazz Ġ== Ġc . name ĊĠĠĠĠĠĠĠ Ġ}. first Or None () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġclass Config ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getOrElse Ġ{ Ġunset Exec Config Ġ} ĊĠĠĠ Ġ} Ċ } Ċ