package Ġcom . github . j corn az . kw ik . generator . api Ċ Ċ import Ġcom . github . j corn az . kw ik . generator . test . Abstract Generator Test Ċ import Ġkotlin . random . Random Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails With Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠFrequency Generator Test Ġ: ĠAbstract Generator Test () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġgenerator : ĠGenerator < Int > Ġ= ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠ 1 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 1 0 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠ 2 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt (- 1 0 0 , Ġ 0 ) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails With Empty List () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGenerator . frequency < Int >() ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails If A Probability Is B ellow 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 1 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 1 0 , Ġ 2 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 2 0 , Ġ 3 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfails If Weight Sum Is Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Fails With < IllegalArgumentException > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 1 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 1 0 , Ġ 2 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 2 0 , Ġ 3 0 ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan Generate From Single Source () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠGenerator . frequency ( 4 2 . 0 Ġto Ġsource ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource . random Sequence ( 0 ). take ( 1 0 0 ). toList (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . random Sequence ( 0 ). take ( 1 0 0 ). toList () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgenerates From All Sources () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 1 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 1 0 0 , Ġ 2 0 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrandom Values Ġ= Ġgenerator . random Sequence ( 0 ). take ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( random Values . any Ġ{ Ġit Ġin Ġ 0 Ġuntil Ġ 1 0 Ġ}) ĊĠĠĠĠĠĠĠ ĠassertTrue ( random Values . any Ġ{ Ġit Ġin Ġ 1 0 0 Ġuntil Ġ 2 0 0 Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgenerates Using Given Probability () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 5 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 2 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 5 0 , Ġ 7 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 3 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 7 0 , Ġ 1 0 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġgenerator . random Sequence ( 0 ). take ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote : Ġexpected Ġranges Ġrepresent Ġ 5 Ġtimes Ġthe Ġstandard Ġdeviation ĊĠĠĠĠĠĠĠ ĠassertTrue ( sequence . count Ġ{ Ġit Ġ< Ġ 5 0 Ġ} Ġin Ġ 4 2 0 .. 5 8 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sequence . count Ġ{ Ġit Ġin Ġ 5 0 Ġuntil Ġ 7 0 Ġ} Ġin Ġ 1 3 0 .. 2 7 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sequence . count Ġ{ Ġit Ġ> Ġ 7 0 Ġ} Ġin Ġ 2 2 5 .. 3 7 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgenerates Using Given Probability With 2 Sources () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 8 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 2 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 8 0 , Ġ 1 0 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsequence Ġ= Ġgenerator . random Sequence ( 0 ). take ( 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNote : Ġexpected Ġranges Ġrepresent Ġ 5 Ġtimes Ġthe Ġstandard Ġdeviation ĊĠĠĠĠĠĠĠ ĠassertTrue ( sequence . count Ġ{ Ġit Ġ< Ġ 8 0 Ġ} Ġin Ġ 7 3 0 .. 8 7 0 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( sequence . count Ġ{ Ġit Ġ>= Ġ 8 0 Ġ} Ġin Ġ 1 3 0 .. 2 7 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdoes Not Generate From Weight Of Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠGenerator . frequency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 1 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 0 , Ġ 1 0 0 ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 Ġto ĠGenerator Ġ{ Ġit : ĠRandom Ġ-> Ġit . nextInt ( 1 0 0 , Ġ 2 0 0 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( generator . random Sequence ( 0 ). take ( 1 0 0 0 ). none Ġ{ Ġit Ġ> Ġ 1 0 0 Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ