package Ġcom . in motion software . promise kt Ċ Ċ import Ġcom . in motion software . promise kt . features . after Ċ import Ġcom . in motion software . promise kt . features . race Ċ import Ġcom . in motion software . promise kt . features . race Gu arante e Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . fail Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent . Count DownLatch Ċ Ċ class ĠRace Tests : ĠAsync Tests () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġrace ( after ( 0 . 0 1 ). then Promise Ġ{ ĠPromise . value ( 1 ) Ġ}, Ġafter ( 1 . 0 ). map Ġ{ Ġ 2 Ġ}). done Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . count Down () ĊĠĠĠĠĠĠĠ Ġ}. catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail ( it . localized Message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwait ( count Down Ġ= Ġe , Ġtimeout Ġ= Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġrace Gu arante e ( after ( 1 . 0 ). map Gu arante e Ġ{ Ġ 1 Ġ}, Ġafter ( 0 . 0 1 ). map Gu arante e Ġ{ Ġ 2 Ġ}). done Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwait ( count Down Ġ= Ġe , Ġtimeout Ġ= Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 Array () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġpromises Ġ= Ġarray ListOf ( after (. 0 1 ). map { Ġ 1 Ġ}, Ġafter ( 1 . 0 ). map { Ġ 2 Ġ}) ĊĠĠĠĠĠĠĠ Ġrace ( promises ). done Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwait ( count Down Ġ= Ġe , Ġtimeout Ġ= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 2 Array () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġrace ( after ( 1 . 0 ). map Ġ{ Ġ 1 Ġ}, Ġafter (. 0 1 ). map Ġ{ Ġ 2 Ġ}). done Ġ{ Ġindex Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġindex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwait ( count Down Ġ= Ġe , Ġtimeout Ġ= Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty Array () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġempty : ĠIterable < Promise < Int >> Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġrace ( empty ). catch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ! is ĠPM K Error . bad Input ) Ġ{ Ġfail () Ġ} ĊĠĠĠĠĠĠĠ Ġ}. finally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwait ( count Down Ġ= Ġe , Ġtimeout Ġ= Ġ 1 0 ) ĊĠĠĠ Ġ} Ċ Ċ }