/* Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ġor Ġmore Ċ Ġ* Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ċ Ġ* Ġthis Ġwork Ġfor Ġadditional Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* ĠThe ĠASF Ġlicenses Ġthis Ġfile Ġto Ġyou Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ċ Ġ* Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ċ Ġ* Ġthe ĠLicense . Ġ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . apache . jmeter . threads . open model Ċ Ċ import Ġorg . junit . jupiter . params . Parameterized Test Ċ import Ġorg . junit . jupiter . params . provider . Method Source Ċ import Ġjava . text . Decimal Format Ċ import Ġjava . text . Decimal Format Symbols Ċ import Ġjava . util . Locale Ċ import Ġjava . util . Random Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠThread Schedule Process Generator Test Ġ{ ĊĠĠĠ Ġclass ĠCase ( val Ġschedule : ĠString , Ġval Ġexpected : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġschedule ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġdata () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCase ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtotal Ġduration Ġis Ġ 2 + 3 + 1 + 2 Ġ=> Ġ 8 Ġsec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 / sec Ġ* Ġ 2 Ġsec Ġ=> Ġ 2 Ġevents Ġat Ġ 1 Ġand Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate ( 1 / sec ) Ġeven _ ar ri vals ( 2 Ġsec ) Ġrate ( 1 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 / sec Ġ* Ġ 3 sec Ġ=> Ġ 6 Ġevents Ġat Ġ 2 . 5 , Ġ 3 , Ġ 3 . 5 , Ġ 4 , Ġ 4 . 5 , Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate ( 2 / sec ) Ġeven _ ar ri vals ( 3 Ġsec ) Ġrate ( 2 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( 2 / sec Ġ+ Ġ 5 / sec )/ 2 Ġ* Ġ 1 Ġsec Ġ=> Ġ 3 . 5 Ġevents Ġ( tr uncated Ġto Ġ 3 ) Ġin Ġ 5 .. 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeven _ ar ri vals ( 1 Ġsec ) Ġrate ( 5 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( 5 / sec Ġ+ Ġ 3 / sec )/ 2 Ġ* Ġ 2 Ġsec Ġ=> Ġ 8 Ġevents Ġin Ġ 6 .. 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeven _ ar ri vals ( 2 Ġsec ) Ġrate ( 3 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration : Ġ 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 . 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 . 3 8 7 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 . 6 6 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 . 2 0 4 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 . 4 1 7 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 . 6 4 1 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 6 . 8 7 6 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 . 1 2 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 . 3 9 4 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 7 . 6 8 3 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCase ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtotal Ġduration Ġis Ġ 2 + 3 + 1 0 + 4 Ġ=> Ġ 1 9 Ġsec ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( 0 / sec Ġ+ Ġ 2 / sec )/ 2 Ġ* Ġsec Ġ=> Ġ 2 Ġevents Ġat Ġ 0 .. 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate ( 0 ) Ġrandom _ ar ri vals ( 2 Ġsec ) Ġrate ( 2 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 / sec Ġ* Ġ 3 sec Ġ=> Ġ 6 Ġevents Ġat Ġ 2 .. 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom _ ar ri vals ( 3 Ġsec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause ( 1 0 Ġsec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( 2 / sec Ġ+ Ġ 1 / sec )/ 2 Ġ* Ġ 4 Ġsec Ġ=> Ġ 6 Ġevents Ġat Ġ 1 5 .. 1 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom _ ar ri vals ( 4 Ġsec ) Ġrate ( 1 / sec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration : Ġ 1 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 9 8 0 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 7 0 9 9 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 9 9 9 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 1 5 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 6 5 1 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 7 9 2 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 . 9 1 2 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 . 9 5 4 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 5 . 5 1 5 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 6 . 0 9 9 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 7 . 4 6 8 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 . 3 9 0 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 . 5 1 6 7 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 8 . 7 6 5 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parameterized Test ĊĠĠĠ Ġ@ Method Source (" data ") ĊĠĠĠ Ġfun Ġschedule Test ( case : ĠCase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrnd Ġ= ĠRandom ( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġschedule Ġ= Ġcase . schedule ĊĠĠĠĠĠĠĠ Ġval Ġgen Ġ= ĠThread Schedule Process Generator ( rnd , ĠThread Schedule ( schedule )) ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠDecimal Format ("# . #### ", ĠDecimal Format Symbols . getInstance ( Locale . ROOT )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcase . expected , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Duration : Ġ${ format . format ( gen . total Duration )} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () Ġ+ Ġ"\ n " Ġ+ Ġgen . as Sequence (). join ToString ("\ n ") Ġ{ Ġ" Ġ Ġ" Ġ+ Ġformat . format ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ