package Ġcom . pl ast ick arma . pro ducers with priority Ċ Ċ import Ġrun Blocking Test Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠPro ducers Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġflatten _ pro duces _ elements _ from _ collection () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Producer Ġ= ĠList Producer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" A ", Ġ" B ", Ġ" C "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" 1 ", Ġ" 2 ", Ġ" 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ("@ ", Ġ"$ ", Ġ"% "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlist Producer . flatten (). collect Until Null () ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" A ", Ġ" B ", Ġ" C ", Ġ" 1 ", Ġ" 2 ", Ġ" 3 ", Ġ"@ ", Ġ"$ ", Ġ"% "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġflatten _ propag ates _ null _ values () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Producer Ġ= ĠList Producer ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" A ", Ġ" B ", Ġ" C "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ("@ ", Ġ"$ ", Ġ"% "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlist Producer . flatten (). collect While Ġ{ Ġit Ġ!= Ġ"% " Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" A ", Ġ" B ", Ġ" C ", Ġnull , Ġ"@ ", Ġ"$ "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠList Producer ( data : ĠList < List < String > ?> ) Ġ: ĠProducer < List < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġiter Ġ= Ġdata . iterator () ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġnext (): ĠList < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( iter . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiter . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ